On Tue, 10 Jul 2018, ND via Pcre-dev wrote:

> I guess Perl doesn't backtrack if last alternative of negative assertion
> fails.

Not quite (see below). I suspect it is just the way the Perl code turned
out rather than a deliberate design. I couldn't find any Perl
documentation about this.

> PCRE2 version 10.31 2018-02-12
> /(?!(a)b)/allcaptures
> a
> 0:
> 1: <unset>

Indeed, but the way Perl works means that adding another branch changes 
things:

Perl 5.026002 Regular Expressions
/(?!(a)b)/
a
 0: 
 1: a

/(?!(a)b|ac)/
a
 0: 

/(?!ac|(a)b)/
a
 0:  

It seems to save the capture only if there is just one branch in the 
assertion. Or maybe it has some algorithm for deciding on which branch 
to try first ... I don't know, but it all seems very inconsistent to me.
 
PCRE2 consistently discards the captures in all cases.

Philip

-- 
Philip Hazel

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

Reply via email to