Fix Pcre2.exec_all
for non-consuming patterns
#5
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
At present,
Pcre2.exec_all
does not return the full set of captures when matching patterns containing non-consuming captured subpatterns such as lookahead assertions, falsely detecting the end of the matched set before reaching the end of the string. In order to resolve this issue, I have implemented the algorithm recommended by the PCRE2 project for global regex matching, allowing for zero-length captures to be properly matched and returned byexec_all
.As a demonstration, prior to this patch:
And after this patch:
Additionally, the test suite has been expanded to cover a number of evaluation scenarios for
exec_all
, including zero-length matches such as those shown above.