Совпадение текста, окруженного "{{" и "}}"

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

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

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

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

У кого-нибудь есть идея?

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

2 ответа

Решение

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

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

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

Другие вопросы по тегам