代码之家  ›  专栏  ›  技术社区  ›  SCdF

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

  •  2
  • SCdF  · 技术社区  · 14 年前

    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;
    }
    

    2 回复  |  直到 14 年前
        1
  •  2
  •   theraccoonbear    14 年前

    如果你想避免使用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;
    }
    
        2
  •  0
  •   Greg Bacon    14 年前

    regex_replace ,你可以用

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

    但是 eval STRING

    在您的示例中,输出是

    This my