如何编写正则表达式来删除所有不包含任何东西的大括号?
例如,{}
和{{}}
应缩减为空字符串,但{{}
变为{
,{{A}{}}
变为{{A}}
。
我目前正在循环中运行s/\{\}//g
,直到修改了字符串长度,但还有更好的方法吗?
答案 0 :(得分:10)
使用传统正则表达式匹配平衡对很困难,如果不是不可能的话。幸运的是,PCRE和其他人有一个递归匹配的扩展,(?R)
将递归匹配整个模式。
/\{(?R)*\}/
这就是为了匹配在其中具有零个或多个支撑对的支撑对。有关详细信息,请参阅perlretut->Recursive patterns和perlre->Extended Patterns->?R。
答案 1 :(得分:2)
没有递归:
1 while s/\{\}//g;