Perl替换参数

时间:2018-06-18 08:55:18

标签: perl

我想修改Perl脚本,但是我遇到了问题。

我阅读了有关“tr”命令的文档,但我的问题是当要替换的字符串是可自定义的时。

例如,我的var“$ car”包含“&”我想用“\&”替换这个字符串。

我试试这个,但它不起作用

ligne =~ tr/$car/\$car/

谁能帮帮我?

由于

1 个答案:

答案 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?,这不是直接重复。