正则表达式替换在perl中不起作用

时间:2014-02-20 12:55:11

标签: perl

以下是自我解释:

admin> cat test.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";

admin> ./test.pl

var1=SELECT * FROM CALENDAR WHERE CALNAME = ( SELECT * from EMP ) )

2 个答案:

答案 0 :(得分:2)

$var2中有特殊字符,当用作文字字符时应为quoted

$var1 =~ s/\Q$var2\E/$var3/;

答案 1 :(得分:0)

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