Есть рекурсивный шаблон
'\((([^\(\)]+)|(?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