On Tue, 2 Jul 2019, Zoltán Herczeg wrote:

> Perhaps the misunderstanding comes from the fact that we are talking
> about the pattern and they talk about the matching process. So (*THEN)
> simply starts a backtrack, and when an alternation is encountered, it
> switches to the next alternative. 

That is indeed what happens in the pcre2_match() interpreter.

> But this happens normally as well, so what is the exact purpose of
> this verb then?

Not quite. (*THEN) suppresses going back to a previous backtrack inside 
the branch. In the Perl example

  ( COND (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ )
  
if COND matches, but FOO fails to match, it does not go back to
backtrack points inside COND (which it would do without (*THEN)), but
instead abandons the entire branch and jumps to try to match COND2. It's
a sort of branch-level (*COMMIT).

At a simple level I suppose it's also equivalent to

  ((?>COND) FOO | ...
  
but perhaps there are more complicated examples that can't be written 
that way. 
 
Philip

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

Reply via email to