我有一个程序可以读取行并改变它们的一部分,只要它前面没有反斜杠。
例如,如果将单词foo更改为bar,则为sentance
Hello foo, thisfoo likes \foo
会变成
Hello bar, thisbar likes \foo
如果该行存储在$ line中,我的代码是
$line =~ s/[(^\\)]foo/bar/g;
但当然会产生
的输出Hellobar, thibar likes \foo
有没有办法让正则表达式搜索找到字符串的一些要求,但不包括在被改变的内容中?或者是否有某种解决方法。我唯一能想到的是将\foo
的所有出现替换为其他字符串,然后再将其替换回来,但这绝对不理想,因为我无法保证输入中的内容。
由于
答案 0 :(得分:2)
您可以使用的解决方法是一个环视:)
你可以使用负面的后视:
$line =~ s/(?<!\\)foo/bar/g;
这将匹配foo
,除非它之前有反斜杠。
此外,我想指出您当前的正则表达式不起作用,因为您可能认为它有效:
$line =~ s/[(^\\)]foo/bar/g;
[(^\\)]
应匹配(
,)
,^
或\
中的任何一个。您的意思是[^\\]