Есть рекурсивный шаблон
'\((([^\(\)]+)|(?R))+\)'
, который должен захватывать любую правильную скобочную структуру. Например, в строке
x + ((3-2) + (3*(4+5))) + y
он должен найти подстроку
((3-2) + (3*(4+5)))
.
Проблема в том, что если в строке есть лишняя открывающая скобка, например
x + (((3-2) + (3*(4+5))) + y
, то шаблон почему-то ничего не захватывает.
При этом, если в шаблоне сделать однократную подмаску
'\(((?>[^\(\)]+)|(?R))+\)',
то все правильно работает. Почему так? В чем разница?
UPD
Видимо, зависит от длины строки.
Вот пример, когда ничего не захватывает:
https://rextester.com/GCUB77640