正则表达式 – 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"..

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

谢谢.

首先,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”更为正确.

原文链接:https://www.f2er.com/regex/357230.html

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