有什么办法可以替换一个字符串中的多个字符串?
例如,我有字符串hello world what a lovely day
,我想用其他东西替换what
和lovely
。
$sentence = "hello world what a lovely day";
@list = ("what", "lovely"); # strings to replace
@replist = ("its", "bad"); # strings to replace with
($val = $sentence) =~ "tr/@list/@replist/d";
print "$val\n"; # should print "hello world its a bad day"..
任何想法为什么它不起作用?
谢谢。
最佳答案
首先,tr
不能那样工作;有关详细信息,请查阅perldoc perlop
,但是tr
确实可以进行音译,并且与替换有很大不同。
为此,更正确的替换方法是
# $val
$val =~ s/what/its/g;
$val =~ s/lovely/bad/g;
请注意,“同时”更改比较困难,但是例如,我们可以做到这一点,
%replacements = ("what" => "its", "lovely" => "bad");
($val = $sentence) =~ s/(@{[join "|", keys %replacements]})/$replacements{$1}/g;
(当然,转义可能需要用元字符替换字符串。)
从术语的非常松散的意义上讲,这仍然是同时发生的,但是对于大多数目的,它的作用就像一次完成替换。
同样,用
"what"
代替"it's"
代替"its"
更为正确。