Java 用正则表达式替换特定标识符

Java 用正则表达式替换特定标识符,java,regex,identifier,Java,Regex,Identifier,我有一个java正则表达式,用于替换脚本中特定标识符的所有实例 这是搜索“foo”标识符的搜索正则表达式: ([^\w_]|^)foo([^\w\d_]|$) 这就是替代品: $1bar$2 做一个类似于 for foo: [1,2,3];foo&&foo; 效果很好,可以输出 for bar: [1,2,3];bar&&bar; 但是,当我们将此应用于由单个字符分隔的标识符的两个实例的字符串时,它仅替换第一个: foo&foo 输出 bar&a

我有一个java正则表达式,用于替换脚本中特定标识符的所有实例

这是搜索“foo”标识符的搜索正则表达式:

([^\w_]|^)foo([^\w\d_]|$)
这就是替代品:

$1bar$2
做一个类似于

for foo: [1,2,3];foo&&foo;
效果很好,可以输出

for bar: [1,2,3];bar&&bar;
但是,当我们将此应用于由单个字符分隔的标识符的两个实例的字符串时,它仅替换第一个:

foo&foo
输出

bar&foo
我认为,这是因为第一个匹配是“bar&”,所以在分析字符串的其余部分时,找不到其他匹配项


有没有办法通过只更改正则表达式来解决这个问题?

我认为您几乎在寻找
\bfoo\b
,因为您的正则表达式使用lookarounds
(?如果您只需要将
foo
替换为
bar
为什么不能使用:
input.replaceAll(“foo”,“bar”)
;这里
foo
是正则表达式。这个问题缺少什么吗?我只想替换整个标识符。假设我有
refoo>foo
。如果我要执行
input.replaceAll(“foo”,“bar”)
我会得到
rebar>bar
。我想要的是
refo>bar
。问题是refo和bar&foo之间有什么区别(我指的是编程方式)
refoo
是一个标识符,它与
foo
不同
bar&foo
是由
运算符分隔的两个标识符。在这种情况下,
bar&foo
应替换为
bar&bar
。例如,标识符是指Python脚本中的标识符。
(?)?