正则表达式 – Perl同时替换多个字符串

前端之家收集整理的这篇文章主要介绍了正则表达式 – Perl同时替换多个字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法替换字符串中的多个字符串?
例如,我有一个字符串你好世界是多么可爱的一天,我想用其他东西替换什么和可爱的..
$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"..

任何想法为什么它不起作用?@H_404_5@

谢谢.@H_404_5@

首先,tr不起作用;有关详细信息,请参阅perldoc perlop,但tr表示音译,与替换非常不同.

为此,更正确的替换方法是@H_404_5@

# $val
$val =~ s/what/its/g;
$val =~ s/lovely/bad/g;

请注意,“同时”更改相当困难,但我们可以这样做,例如,@H_404_5@

%replacements = ("what" => "its","lovely" => "bad");
($val = $sentence) =~ s/(@{[join "|",keys %replacements]})/$replacements{$1}/g;

(当然,可能需要转义以使用元字符替换字符串.)@H_404_5@

这仍然只是在一个非常松散的意义上同时发生,但是对于大多数目的而言,它确实表现为好像一次性完成替换.@H_404_5@

而且,将“what”替换为“it’s”而不是“its”更为正确.@H_404_5@

猜你在找的正则表达式相关文章