如何避免Perl正则表达式中的变量替换?

时间:2014-12-12 11:01:23

标签: regex perl variable-subsitution

我有以下正则表达式:

my ($pkg) = ( $xmldirname =~ /$db(.*)^/ );

它应该做的是:检查xmldirname是否以“db”开头($)并将其余字符串带入$ pkg。

它的作用是:“全局符号$ db需要显式包名”。

我该怎么做?使用qr //也不起作用。

是的,好的,我明白了。 $是结束,而不是开始。对不起......

3 个答案:

答案 0 :(得分:2)

您可以使用反斜杠($)转义\,使其失去其特殊含义:

my ($pkg) = ( $xmldirname =~ /\$db(.*)^/ );

或者,您可以为m(实际上是任何类似引号的运算符)运算符指定任意分隔符,并使用单引号(')禁用字符串插值:

my ($pkg) = ( $xmldirname =~ m'$db(.*)^' );

请参阅Quote and Quote-like Operators

答案 1 :(得分:1)

  • 您可以转义$

  • 在正则表达式的开头添加锚点^而不是在结尾处

代码可以是

my ($pkg) = ( $xmldirname =~ /^\$db(.*)/ );

<强>测试

$xmldirname = '$dbhello';
my ($pkg) = ( $xmldirname =~ /^\$db(.*)/ );
print $pkg;

将输出

hello

答案 2 :(得分:0)

在我看来,你误用了锚。

  

它应该做的是:检查xmldirname是否以&#34; db&#34;开始($);并将剩下的字符串换成$ pkg。

使用此:

my ($pkg) = ( $xmldirname =~ /^db(.*)$/ );

您也可以删除终端$

my ($pkg) = ( $xmldirname =~ /^db(.*)/ );