匹配被 "{{" 和 "}}" 包围的文本

4
我需要一个正则表达式,可以实现以下功能: 我的文本:

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

我想要提取的内容是:
"blabla1" and "blablabla2 {{ blabla3 }}"

有人有想法吗?

我尝试了:"{{(.)*}}",但它返回 "blabla1""blabla3"


你想让它只返回“blabla1”和“blablabla2 {{ blabla3 }}”吗?不包括“blabla3”? - joaonlima
是的。但如果它也返回“blabla3”,那也可以。 - abecker
对于这样的递归模式,当正则表达式失败时编写解析器会更容易。 - Shiplu Mokaddim
2个回答

10

你可以使用平衡组来计数和匹配像这样的嵌套结构。例如:

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

这正是我想要的,谢谢!(我也会阅读有关平衡组的整个文档;) - abecker
@Qtax:非常感谢,我正在寻找这个问题的解决方案 "{{}} --> 括号()" (?x) ( ( (?: [^()]+ | (?<open>() | (?<-open>)) )* (?(open)(?!)) ) )。 - Thulasiram

2

这个文本具有嵌套结构,因此它不是一个普通的语法。一些正则表达式引擎有扩展来处理大括号匹配,但通常最好的方法是简单地扫描字符串,并在跟踪嵌套深度的同时,在 List<string> 中累积输出。


这正是平衡组为您所做的。如果您想要更详细的说明,可以在表达式中添加注释。;-) - Qtax

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接