我有以下正则表达式:
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(.*)/ );