On Fri, 6 Jul 2018, ND via Pcre-dev wrote:

> PCRE documents:
> "No capturing is done for a negative assertion unless it is being used as a
> condition in a conditional subpattern (see the discussion below). Matching
> continues after a non-conditional negative assertion only if all its branches
> fail to match."
> 
> 
> But capture also matters if it is inside even number of nested negative
> assertions. But PCRE ignore this and unset capture:

When I looked at this issue originally, I seem to remember that Perl was 
inconsistent on what it did in different cases. But of course, Perl 
keeps on changing... I can't find any Perl documentation about this.

However, when I was implementing this I could not see an easy way of
defining what capturing inside a negative assertion actually means 
outside of the assertion itself. The documentation needs updating to 
make it clear that *within* the assertion, capturing can be used.

This is even worse if (?| is used in such an assertion, because it may
"capture" the same group several times while it checks that all the
branches fail to match. I decided that the most straightforward approach
was to discard all capturing inside negative assertions when the 
assertion completes.

> PCRE2 version 10.31 2018-02-12
> /(?!(?!(.)))/

PCRE2 is nowhere near clever enough to recognize that two negatives make 
a positive.

Philip

-- 
Philip Hazel

-- 
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev 

Reply via email to