Совпадение текста, окруженного "{{" и "}}"
Я ищу Regex, который может сделать это: Мой текст:
"Blablabla {{ blabla1 }} blablablabla {{ blablabla2 {{ blabla3 }} }} blablabla"
Что я хочу извлечь:
"blabla1" and "blablabla2 {{ blabla3 }}"
У кого-нибудь есть идея?
Я пробовал с: "{{(.)*}}"
но возвращается "blabla1"
а также "blabla3"
2 ответа
Решение
Вы можете использовать балансировочные группы для подсчета и сопоставления вложенных конструкций, подобных этим. Например:
(?x) {{ ( (?: [^{}]+ | (?<open>{{) | (?<-open>}}) )* (?(open)(?!)) ) }}
Это имеет вложение, так что это не обычная грамматика. Некоторые движки регулярных выражений имеют расширения для обработки соответствия фигурных скобок, но в целом лучший способ сделать это - просто просканировать строку и накопить вывод в List<string>
отслеживая глубину вложения.