Perl正则表达式匹配双引号之间的所有内容?

时间:2011-08-28 11:42:27

标签: regex perl double-quotes

案文是:

some text here x"/get/me/out/of/here.png"

如何在双引号之间获取所有内容?

这似乎不起作用:

if ($text =~ /".+?"/) {
 print"found: $1\n";
}

感谢。

2 个答案:

答案 0 :(得分:12)

您需要$1,所以围绕.+?包裹括号:

$text = 'foo "bar baz" mu';

if ($text =~ /"(.+?)"/) {
  print"found: $1\n";
}

打印:

bar baz

或使用$&抓取整场比赛("bar baz":包括双引号):

if ($text =~ /".+?"/) {
  print"found: $&\n";
}

答案 1 :(得分:5)

与往常一样,只要您认为正则表达式是最佳解决方案(偶尔也可能是这样),快速前往CPAN可能会找到更好的东西。在这种情况下Text::Balanced。有extract_delimitedextract_quotelike函数可以在指定的引号之间提取文本。

请仔细阅读说明,因为它有用但可能是意外的行为。但是它非常有用,特别是如果你不得不重复提取。