Сопоставьте текст, окруженный "{{" и "}}"

Я ищу Regex, который может это сделать: Мой текст:

"Blablabla {{ blabla1 }} blablablabla {{ blablabla2 {{ blabla3 }} }} blablabla"

Что я хочу извлечь:

"blabla1" and "blablabla2 {{ blabla3 }}"

Есть ли у кого-нибудь идеи?

Я пробовал: "{{(.)*}}" но он возвращает "blabla1" и "blabla3"

Ответы

Ответ 1

Вы можете использовать балансировочные группы для подсчета и сопоставления вложенных конструкций, подобных этим. Например:

(?x) {{ ( (?: [^{}]+ | (?<open>{{) | (?<-open>}}) )* (?(open)(?!)) ) }}

Ответ 2

У этого есть гнездование, поэтому это не регулярная грамматика. Некоторые механизмы регулярных выражений имеют расширения для обработки соответствия скобок, но, как правило, лучший способ сделать это - просто сканировать строку и накапливать вывод в List<string>, отслеживая глубину вложенности.