0

我确定我错过了一些东西,需要另一双眼睛。我已经启用警告并使用严格我试图提取变量中的双引号之间,例如:

my $line = '    TITLE "Better off Faded"';
(my $title = $line) =~ s/"(.*?)"/$1/g;

print "title: [$title]\n";
print "MATCHDATA: <$`|$&|$'>\n";
print "capture1: $1\n";

这将产生输出:

title: [    TITLE Better off Faded]
MATCHDATA: <    TITLE |"Better off Faded"|>
capture1: [Better off Faded]

看起来捕获正在工作,但替换命令只是从$title变量中删除双引号字符,而不是用$1捕获填充它。

由于捕获工作正常,我已经知道我可以使用:

my $data = ($line =~ /"(.*?)"/)[0];
print "alt: [$date]\n";

从双引号中提取数据,但为什么替代品不起作用?

4

1 回答 1

3

您看到的结果似乎与您的代码一致。它只匹配双引号部分并用引号的内容替换该部分,使字符串的其余部分保持不变。

如果您的目标是仅将引用部分的内容放入其中,那么$title您可能想要这样的内容:

my($title) = $line =~ m/"(.*?)"/;
于 2013-10-09T23:09:37.320 回答