在条件上替换字符串

时间:2013-11-07 01:20:45

标签: regex perl

假设我有一个哈希:

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

和一个字符串:

$string = "dog1 dog2 dog3";

如果哈希值中的狗的值是奇数,我需要用$string替换cat中的所有“狗”。所以最后我希望我的字符串是:

"cat1 dog2 cat3"

我怎样才能使用正则表达式?我可以很容易地将所有的狗变成猫:

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

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

1 个答案:

答案 0 :(得分:2)

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

$string=~s/(dog(\d+))/$hash{$1}%2==0?$1:"cat$2"/eg;
print $string; #prints cat1 dog2 cat3