【问题标题】:Cannot extract value from double quote Perl var with s///无法使用 s/// 从双引号 Perl var 中提取值
【发布时间】:2013-10-10 09:18:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: regex perl substitution


    【解决方案1】:

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

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

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

    【讨论】:

    • 我可以按照您的建议,但我已经有了解决方案,真正的问题是为什么替换不起作用。我看到替换是有效的,它用第二个// 替换了第一个// 之间的内容// 我最近一直在语言跳跃,忘记了 Perl 只更改了它匹配的字符串部分;它不会替换输入字符串中的所有内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2013-02-16
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多