如何使用正则表达式替换两个标志符号之间的内容
How to replace stuff between two flag symbols using regex
例如我有下面的文字
some {}} outside, and some inside $aa{bb}cc{{dd}ee}ff$, and some more $aa{bb}cc{{dd}ee}ff$ here.
我调用 $
标志符号,现在我想使用正则表达式替换 $...$
对之间的所有 {
或 }
。
我能想到的唯一方法是多次替换,使用正则表达式
($.*?)(\{|\})
每次替换 $...$
中的 {
或 }
。经过足够的时间替换,我们得到了
some {}} outside, and some inside $aabbccddeeff$, and some more
$aabbccddeeff$ here.
缺点是你不知道要{
或}
完全替换多少次,显然效率不高。
所以我想知道,正则表达式是否能够在单个 运行 中完成此操作?对于正则表达式风格,我的意思是 perl 兼容。但是如果 perl 不能做到这一点,我很想知道其他正则表达式风格是否可以做到。
试试这个正则表达式:
[{}](?=[^$]*$(?:(?:[^$]*$){2})*[^$]*$)
用空白字符串替换每个匹配项。
解释:
[{}]
- 匹配 {
或 }
(?=[^$]*$(?:(?:[^$]*$){2})*[^$]*$)
- 正向前瞻以确保上述匹配后跟在字符串后面某处的奇数 $
。这将确保 {
或 }
后跟 1 或 3 或 5 或 7 ... $
的实例在字符串后面的某处。
例如我有下面的文字
some {}} outside, and some inside $aa{bb}cc{{dd}ee}ff$, and some more $aa{bb}cc{{dd}ee}ff$ here.
我调用 $
标志符号,现在我想使用正则表达式替换 $...$
对之间的所有 {
或 }
。
我能想到的唯一方法是多次替换,使用正则表达式
($.*?)(\{|\})
每次替换 $...$
中的 {
或 }
。经过足够的时间替换,我们得到了
some {}} outside, and some inside $aabbccddeeff$, and some more $aabbccddeeff$ here.
缺点是你不知道要{
或}
完全替换多少次,显然效率不高。
所以我想知道,正则表达式是否能够在单个 运行 中完成此操作?对于正则表达式风格,我的意思是 perl 兼容。但是如果 perl 不能做到这一点,我很想知道其他正则表达式风格是否可以做到。
试试这个正则表达式:
[{}](?=[^$]*$(?:(?:[^$]*$){2})*[^$]*$)
用空白字符串替换每个匹配项。
解释:
[{}]
- 匹配{
或}
(?=[^$]*$(?:(?:[^$]*$){2})*[^$]*$)
- 正向前瞻以确保上述匹配后跟在字符串后面某处的奇数$
。这将确保{
或}
后跟 1 或 3 或 5 或 7 ...$
的实例在字符串后面的某处。