说,我有一个包含以下字符串的行:为什么我的非贪婪Perl正则表达式仍然匹配太多?
"$tom" said blah blah blash. "$dick" said "blah blah blah". "$harry" said blah blah blah.
,我想提取
"$dick" said "blah blah blah"
我有以下代码:
my ($term) = /(".+?" said ".+?")/g;
print $term;
但它给我超过我需要:
"$tom" said blah blah blash. "$dick" said "blah blah blah"
我试图通过使用非捕获括号分组我的图案作为一个整体:
my ($term) = /((?:".+?" said ".+?"))/g;
但问题仍然存在。
我已经重读了学习Perl的Nongreedy Quantifiers部分,但它到目前为止让我无处可寻。
感谢您的任何指导,你可以慷慨地提供:)
第一“等等等等blash”不加引号,所以你的正则表达式被抓住了第二盘。 – Ether 2009-10-25 22:49:43
@其他,我的问题是:我认为Perl可以将我的模式视为一个整体。但是我错了。对我而言,事情变得越来越清楚,即Perl总是试图匹配第一个子模式,然后再匹配下一个子模式。似乎没有“同步整体模式匹配”这样的事情。 – Mike 2009-10-26 02:40:28
@brian,谢谢。我喜欢你改写我的问题的方式:) – Mike 2009-10-26 02:43:47