-2

我有以下正则表达式:

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

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

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

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

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

4

3 回答 3

2

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

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

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

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

请参阅引用和类似引用的运算符

于 2014-12-12T11:05:29.493 回答
1
  • 你可以逃脱$

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

代码可以

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

测试

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

将输出为

hello
于 2014-12-12T11:06:38.450 回答
0

在我看来,你误用了锚。

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

用这个:

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

您还可以删除终端$

my ($pkg) = ( $xmldirname =~ /^db(.*)/ );
于 2014-12-12T11:08:20.073 回答