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

Regex替换在perl中不起作用

  •  -3
  • contravaluebets  · 技术社区  · 12 年前

    以下内容不言自明:

    管理员>cat测试.pl

    #!/bin/perl
    
    $var1 = "SELECT * FROM CALENDAR WHERE CALNAME = ( SELECT * from EMP ) )";
    $var2 = "( SELECT * from EMP )";
    $var3 = "zyx";
    
    if ($var1 =~ /EMP/)
    {
        $var1 =~ s/$var2/$var3/;
    }
    
    print "var1=$var1\n";
    

    管理员>/测试.pl

    var1=SELECT * FROM CALENDAR WHERE CALNAME = ( SELECT * from EMP ) )
    
    2 回复  |  直到 12 年前
        1
  •  2
  •   mpapec    12 年前

    你有特殊字符 $var2 应该是 quoted 当用作文字字符时,

    $var1 =~ s/\Q$var2\E/$var3/;
    
        2
  •  0
  •   fugu    12 年前

    Comapre公司:

    原件:

    $var1 = "( SELECT * from EMP )";
    $var2 = "abcd";
    
    $var3 =~ s/$var1/$var2/;
    
    print "var1=$var1\n";
    print "var2=$var2\n";
    print "var3=$var3\n";
    

    工作:

    use strict;
    use warnings;
    
    my $var1 = "( SELECT * from EMP )";
    my $var2 = "abcd";
    my $var3 = "Something to keep, something to be replaced: ( SELECT * from EMP )";
    $var3 =~ s/\Q$var1\E/$var2/;
    
    print "var1=$var1\n";
    print "var2=$var2\n";
    print "var3=$var3\n";
    

    输出:

    var1=( SELECT * from EMP )
    var2=abcd
    var3=Something to keep, something to be replaced: abcd