PCRE正则表达式删除空括号

时间:2015-08-01 04:50:04

标签: regex perl pcre

如何编写正则表达式来删除所有不包含任何东西的大括号?

例如,{}{{}}应缩减为空字符串,但{{}变为{{{A}{}}变为{{A}}

我目前正在循环中运行s/\{\}//g,直到修改了字符串长度,但还有更好的方法吗?

2 个答案:

答案 0 :(得分:10)

使用传统正则表达式匹配平衡对很困难,如果不是不可能的话。幸运的是,PCRE和其他人有一个递归匹配的扩展,(?R)将递归匹配整个模式。

/\{(?R)*\}/

这就是为了匹配在其中具有零个或多个支撑对的支撑对。有关详细信息,请参阅perlretut->Recursive patternsperlre->Extended Patterns->?R

答案 1 :(得分:2)

没有递归:

1 while s/\{\}//g;