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



我有以下正则表达式:

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

它应该做的是:检查 xmldirname 是否以 "db" 开头 ($),并将字符串的其余部分放入$pkg。

它的作用是:"全局符号$db需要明确的包名称"。

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

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

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

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

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

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

请参阅报价和类似报价的运算符

  • 你可以逃脱$

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

代码可以是

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

测试

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

将输出为

hello

在我看来,你滥用了锚点。

它应该做的是:检查 xmldirname 是否以 "db" 开头 ($),并将字符串的其余部分放入$pkg。

使用这个:

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

您也可以删除终端$

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

相关内容

  • 没有找到相关文章

最新更新