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