例如我下面有文字
外面有一些{}},里面有一些$ aa {bb} cc {{dd} ee} ff $,还有另外一些$ aa {bb} cc {{dd} ee} ff $。
我调用$
标志符号,现在我想使用正则表达式替换成对的{
之间的所有}
或$...$
。
我能想到的唯一方法是使用正则表达式多次替换
(\$.*?)(\{|\})
每次都替换{
内的}
或$...$
。经过足够的更换时间,我们得到了
外面有一些{}},在$ aabbccddeeff $内部有一些,还有更多 $ aabbccddeeff $在这里。
缺点是您不知道将{
或}
完全更换所需要的次数,而且显然效率很低。
所以我想知道,正则表达式是否能够一次运行?对于正则表达式而言,我的意思是与Perl兼容。但是,如果perl无法做到这一点,我很想知道其他正则表达式是否可以做到。
答案 0 :(得分:1)
尝试此正则表达式:
[{}](?=[^$]*\$(?:(?:[^$]*\$){2})*[^$]*$)
将每个匹配项替换为空白字符串。
说明:
[{}]
-匹配{
或}
(?=[^$]*\$(?:(?:[^$]*\$){2})*[^$]*$)
-正向查找,以确保在字符串的后面某个位置,上述匹配后跟$
的奇数。这样可以确保在字符串后面的某个位置,{
或}
之后是$
的1或3或5或7 ...实例。