On 2019-06-20 15:40, ph10 wrote:
(?:(?=X)|(?=Y))Z means "if X matches, try to match Z; if that fails, if
Y matches try to match Z". In the simple case the second match of Z will
be the same as the first, so will always fail. However, if X and Y are
complex and contain capturing parentheses, I suppose it is possible to
construct Z using back references in such a way that it fails after X
matches but succeeds after Y matches.
But who would want to constuct such a complicated thing?
It's not complicated. It can brings more power to regexes and give
possibility to solve tasks that now are too complicated or impossible for
PCRE2.
Imagine that we have a text. There are some words in this text that occurs
at least 10 times. We want to find from they a word that is most closer to
the end of text.
If lookahead assertion is non-possessive then we can use this pattern:
\A(?=.*\b(\w++))(?>.*?\b\1\b){10}
What pattern can solve this task with current PCRE2?
--
## List details at https://lists.exim.org/mailman/listinfo/pcre-dev