0

假设我有一个哈希:

%hash = ("dog1" => "1", 
         "dog2" => "2",
         "dog3" => "3");

和一个字符串:

$string = "dog1 dog2 dog3";

如果散列中狗的值是奇数,我需要替换其中的所有“狗” $stringcat所以最后我希望我的字符串是:

"cat1 dog2 cat3"

我怎样才能用正则表达式做到这一点?我可以轻松地将所有狗变成猫:

$string =~ s/dog/cat/g;

但这不是我想要的。有没有办法可以有条件地用正则表达式代替?

4

1 回答 1

2

您可以使用/e修饰符。从perldoc :/e将导致替换部分被视为成熟的 Perl 表达式并立即进行评估。例如:

$string=~s/(dog(\d+))/$hash{$1}%2==0?$1:"cat$2"/eg;
print $string; #prints cat1 dog2 cat3
于 2013-11-07T01:37:13.243 回答