Почему рекурсивный шаблон ничего не захватывает?

Есть рекурсивный шаблон '\((([^\(\)]+)|(?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
  • Вопрос задан
  • 57 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы