Java 用正则表达式替换特定标识符
我有一个java正则表达式,用于替换脚本中特定标识符的所有实例 这是搜索“foo”标识符的搜索正则表达式: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
([^\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脚本中的标识符。(?)?