我想修改Perl脚本,但是我遇到了问题。
我阅读了有关“tr”命令的文档,但我的问题是当要替换的字符串是可自定义的时。
例如,我的var“$ car”包含“&”我想用“\&”替换这个字符串。
我试试这个,但它不起作用
ligne =~ tr/$car/\$car/
谁能帮帮我?
由于
答案 0 :(得分:6)
tr///
的模式在编译期间被编译。对于动态替换,您需要使用s///
的正则表达式替换。
tr///
所做的是音译。这意味着它将一个字符替换为另一个字符。您要做的是 substitution ,您要将一个灵活字符串替换为另一个字符串。这些根本不同。
您还需要转义反斜杠\\
。如果您放置一个,它将转义美元符号$
,并将$car
的内容替换为文字字符串'$car'
。
$ligne =~ s/$car/\\$car/
如果你不确定$car
中的内容,你应该逃避它。其中可能存在正则表达式中具有特殊含义的字符,例如.
。 \Q ... \E
将逃避这些,因此它们将被视为文字字符。
$ligne =~ s/\Q$car\E/\\$car/
另请参阅What's the difference between tr/// and s/// when using regex in Perl?,这不是直接重复。