> Note that if this operator is used and NOT inside of an alternation
> then it acts exactly like the "(*PRUNE)" operator.
> But it doesn't.

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. But this happens normally as well, so what is the exact purpose of 
this verb then?

This is also very confusing (especially if you read the documentation):
/(a(a|b)c(*THEN)d|e)/

It says:
Its name comes from the observation that this operation combined with the 
alternation operator ("|" ) can be used to create what is essentially a 
pattern-based if/then/else block:

( COND (*THEN) FOO | COND2 (*THEN) BAR | COND3 (*THEN) BAZ )

But if your cond has an alternation, it will do something else.

I think they simply introduced some random verb which is easy to implement for 
them, but totally confusing for a user. Imagine if (*THEN) backtracks into an 
atomic block, or a recursion. Btw this type of (*THEN) is impossible to 
implement in JIT, because static analysis of its effect is not always possible.

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

Reply via email to