在存储在变量中的Perl正则表达式中使用捕获缓冲区

时间:2010-08-18 20:55:01

标签: regex perl

我接收正则表达式替换的左侧和右侧作为函数的参数。我希望我的用户能够使用捕获缓冲区,但它不能像我尝试的那样工作。

my $string = "This is my string";

$string = regex_replace($string,'is (my) string','$1');

print "$string\n";

sub regex_replace {
    my ( $string,$left,$right ) = @_;

    $string =~ s/$left/$right/gsm;

    return $string;
}

执行此输出“此$ 1”而不是我试图获得的“This my”。有没有办法完成我想在这里做的事情?

2 个答案:

答案 0 :(得分:2)

如果你想避免使用eval ...

my $string = "This is my string";

$string = regex_replace($string,'is (my) string','$1');

print "$string\n";

sub regex_replace {
    my ( $string,$left,$right ) = @_;

    $string =~ /$left/g;
    $rv = $1;
    $right =~ s/\$1/$rv/;

    $string =~ s/$left/$right/gsm;

    return $string;
}

答案 1 :(得分:0)

regex_replace中,您可以使用

eval "\$string =~ s/$left/$right/gsm";

但是eval STRING给人们带来了heebie-jeebies。

以您的示例为例,输出为

This my