有什么办法可以替换一个字符串中的多个字符串?
例如,我有字符串hello world what a lovely day,我想用其他东西替换whatlovely

$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"更为正确。

10-01 02:17
查看更多