On Mon, 4 May 2020, ND via Pcre-dev wrote:

> /\A(?:\1b|(?=(a)))*\z/
> ab
> No match
> 
> 
> Both patterns must successfully match after second iteration.

Perl does exactly the same as PCRE. The problem is that analysing the 
pattern to discover that matching nothing in one branch might make a 
different branch match something on iteration, and then checking next 
time that it *has* made a difference, is beyond the capability of PCRE 
(and presumably Perl). If instead of "ab" you had "aa" it would be an 
infinite loop.

There is already an item on the wish list about this. What it needs is a 
way of telling that something has changed during an iteration. If 
nothing changes, then you have a loop. This needs remembering much more 
state than PCRE currently does, and in fact "something has changed" is
not sufficient; you also have to be able to detect a cycle of changes.

Because of the say PCRE is coded, the current state is unlikely to 
change.

Philip

-- 
Philip Hazel

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

Reply via email to