Re: [pcre-dev] No capture in nested negative assertions

Top Page
Delete this message
Author: ph10
Date:  
To: ND
CC: Pcre-dev
Subject: Re: [pcre-dev] No capture in nested negative assertions
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