Задать вопрос

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

Есть рекурсивный шаблон '\((([^\(\)]+)|(?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
  • Вопрос задан
  • 59 просмотров
Подписаться 1 Средний 8 комментариев
Помогут разобраться в теме Все курсы
  • Хекслет
    Java-разработчик
    10 месяцев
    Далее
  • Хекслет
    Python-разработчик
    10 месяцев
    Далее
  • Учебный центр IBS
    RT-001 Эксплуатация RT.DataLake
    1 неделя
    Далее
Пригласить эксперта
Ваш ответ на вопрос

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

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