我有以下正则表达式:
my ($pkg) = ( $xmldirname =~ /$db(.*)^/ );
它应该做的是:检查 xmldirname 是否以“db”开头 ($) 并将字符串的其余部分放入 $pkg。
它的作用是:“全局符号 $db 需要明确的包名称”。
我该怎么做呢?使用 qr// 也不起作用。
是的,好的,我明白了。$ 是结束,而不是开始。对不起....
我有以下正则表达式:
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(.*)/ );