不能从带有s ///的双引号Perl var中提取值

时间:2013-10-09 22:56:34

标签: regex perl substitution

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

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";

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

1 个答案:

答案 0 :(得分:3)

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

如果您的目标是仅将引用部分的内容放在$title中,或许您想要这样的内容:

my($title) = $line =~ m/"(.*?)"/;