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

时间:2017-03-19 21:05:55

标签: java regex identifier

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

这是搜索" foo"的搜索正则表达式。标识符

([^\w_]|^)foo([^\w\d_]|$)

这是替代品:

$1bar$2

之类的内容中执行replaceAll
for foo: [1,2,3];foo&&foo;

效果很好,输出

for bar: [1,2,3];bar&&bar;

但是,当我们将这个应用于一个字符串,其中两个标识符实例由一个字符分隔时,它只替换第一个:

foo&foo

输出

bar&foo

我认为,这种情况发生了,因为第一场比赛是" bar&"所以在分析字符串的其余部分时,没有找到其他匹配项。

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

1 个答案:

答案 0 :(得分:1)

我认为你几乎在寻找attr_accessor,因为你的正则表达式使用了lookarounds class Duck attr_accessor :name def quack "QUACK! My name is #{name}." end end a_duck = Duck.new a_duck.name = "Mr. Duck" puts a_duck.quack #=> QUACK! My name is Mr. Duck. 。在两种方式中,替换字符串都是\bfoo\b

注意:(?<=\W|^)foo(?=\W|$)bar\d的子集,_等于\w