我有以下正则表达式:
my ($pkg) = ( $xmldirname =~ /$db(.*)^/ );
它应该做的是:检查xmldirname是否以“db”开头($)并将其余字符串带入$ pkg。
它的作用是:“全局符号$ db需要显式包名”。
我该怎么做?使用qr //也不起作用。
是的,好的,我明白了。 $是结束,而不是开始。对不起......
答案 0 :(得分:2)
您可以使用反斜杠($
)转义\
,使其失去其特殊含义:
my ($pkg) = ( $xmldirname =~ /\$db(.*)^/ );
或者,您可以为m
(实际上是任何类似引号的运算符)运算符指定任意分隔符,并使用单引号('
)禁用字符串插值:
my ($pkg) = ( $xmldirname =~ m'$db(.*)^' );
答案 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(.*)/ );