如何使用正则表达式

时间:2019-01-01 04:26:59

标签: regex pcre

例如我下面有文字

  

外面有一些{}},里面有一些$ aa {bb} cc {{dd} ee} ff $,还有另外一些$ aa {bb} cc {{dd} ee} ff $。

我调用$标志符号,现在我想使用正则表达式替换成对的{之间的所有}$...$

我能想到的唯一方法是使用正则表达式多次替换

(\$.*?)(\{|\})

每次都替换{内的}$...$。经过足够的更换时间,我们得到了

  

外面有一些{}},在$ aabbccddeeff $内部有一些,还有更多   $ aabbccddeeff $在这里。

缺点是您不知道将{}完全更换所需要的次数,而且显然效率很低。

所以我想知道,正则表达式是否能够一次运行?对于正则表达式而言,我的意思是与Perl兼容。但是,如果perl无法做到这一点,我很想知道其他正则表达式是否可以做到。

1 个答案:

答案 0 :(得分:1)

尝试此正则表达式:

[{}](?=[^$]*\$(?:(?:[^$]*\$){2})*[^$]*$)

Click for Demo

将每个匹配项替换为空白字符串。

说明:

  • [{}]-匹配{}
  • (?=[^$]*\$(?:(?:[^$]*\$){2})*[^$]*$)-正向查找,以确保在字符串的后面某个位置,上述匹配后跟$的奇数。这样可以确保在字符串后面的某个位置,{}之后是$的1或3或5或7 ...实例。