PCRE 正则表达式删除空括号

PCRE regex to remove empty braces

如何编写一个正则表达式来删除所有不包含任何内容的大括号对?

例如,{}{{}} 应该减少为空字符串,但是 {{} 变成 {{{A}{}} 变成 {{A}}.

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

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

/\{(?R)*\}/

这表示匹配内部有零个或多个大括号对的大括号对。有关详细信息,请参阅 perlretut->Recursive patterns and perlre->Extended Patterns->?R

没有递归:

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