我有一个java正则表达式,用于替换脚本中特定标识符的所有实例。
这是搜索" foo"的搜索正则表达式。标识符
([^\w_]|^)foo([^\w\d_]|$)
这是替代品:
$1bar$2
在
之类的内容中执行replaceAllfor foo: [1,2,3];foo&&foo;
效果很好,输出
for bar: [1,2,3];bar&&bar;
但是,当我们将这个应用于一个字符串,其中两个标识符实例由一个字符分隔时,它只替换第一个:
foo&foo
输出
bar&foo
我认为,这种情况发生了,因为第一场比赛是" bar&"所以在分析字符串的其余部分时,没有找到其他匹配项。
有没有办法通过仅修改正则表达式来解决这个问题?
答案 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