It sure seems like a bug to me.
The regexp engine was massively changed between 5.8 and 5.10. Some bugs fell through. Some were found and fixed already. I don't know about this one. 5.10.1 is expected to be released before the end of the year.
On the plus side, both 5.8 and 5.10 compiled the regexp identically according to use re 'debug';. It's the matching that differs. In both version, it finds that (.*w) only matched once, backtracks. Then it seems to forget to forget that the entire (?(...)...) failed in 5.10.
As a workaround, replacing
(?=(.*w){2})
with
(?(?=(.*w){2})|(?!))
results in the desired behaviour.
By the way, I'd place the ^ before the (?()), and I'd use grouping parens ((?:...)) instead of capturing parens ((...)).
In reply to Re^3: Oddity with Conditional Regex
by ikegami
in thread Oddity with Conditional Regex
by Rabscuttle
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |