用正则表达式替换特定标识符
Replacement specific identifer with regex
我有一个 java 正则表达式,用于替换脚本中特定标识符的所有实例。
这是搜索 "foo" 标识符的搜索正则表达式:
([^\w_]|^)foo([^\w\d_]|$)
这是替换:
bar
像
一样做一个replaceAll
for foo: [1,2,3];foo&&foo;
运行良好,输出
for bar: [1,2,3];bar&&bar;
但是,当我们将其应用于具有两个标识符实例且由一个字符分隔的字符串时,它只会替换第一个:
foo&foo
产出
bar&foo
我认为发生这种情况是因为第一个匹配项是 "bar&",因此在分析字符串的其余部分时没有找到其他匹配项。
是否可以通过仅更改正则表达式来解决此问题?
我认为您几乎是在寻找 \bfoo\b
作为您的正则表达式,否则使用环视 (?<=\W|^)foo(?=\W|$)
。在这两种方式中,替换字符串都是 bar
.
注:\d
和_
是\w
的子集,[^\w]
等于\W
我有一个 java 正则表达式,用于替换脚本中特定标识符的所有实例。
这是搜索 "foo" 标识符的搜索正则表达式:
([^\w_]|^)foo([^\w\d_]|$)
这是替换:
bar
像
一样做一个replaceAllfor foo: [1,2,3];foo&&foo;
运行良好,输出
for bar: [1,2,3];bar&&bar;
但是,当我们将其应用于具有两个标识符实例且由一个字符分隔的字符串时,它只会替换第一个:
foo&foo
产出
bar&foo
我认为发生这种情况是因为第一个匹配项是 "bar&",因此在分析字符串的其余部分时没有找到其他匹配项。
是否可以通过仅更改正则表达式来解决此问题?
我认为您几乎是在寻找 \bfoo\b
作为您的正则表达式,否则使用环视 (?<=\W|^)foo(?=\W|$)
。在这两种方式中,替换字符串都是 bar
.
注:\d
和_
是\w
的子集,[^\w]
等于\W