添加.*
這是關於greedyness,這是你的問題(即得到了由卡西米爾回答)附加的註釋。
默認情況下,意識到regex引擎將消耗所有它可以直到它找到滿足當前評估子表達式右側的子表達式。
任何時候你認爲用DOT metachar使用.+
貪婪量詞都應該引出一個紅旗來思考兩次。如果可能的話,它會衝擊你想要的東西。
由於這個原因,嘗試用一些更具體的東西來代替它,這些東西沒有機會超過您的預期目標。
修改您的示例正則表達式可以稍微顯示如何發生這種情況。
my $test = "this is a very long day indeed, very long.";
if ($test =~ m/
^
(this) # (1)
(.+) # (2)
(very) # (3)
(.+) # (4)
(indeed)? # (5)
/x) {
print "All = '$&'\n";
print "grp1 = '$1'\n";
print "grp1 = '$2'\n";
print "grp1 = '$3'\n";
print "grp1 = '$4'\n";
}
# Output >>
#
# All = 'this is a very long day indeed, very long.'
# grp1 = 'this'
# grp1 = ' is a very long day indeed, '
# grp1 = 'very'
# grp1 = ' long.'
#
來源
2013-11-23 19:07:24
sln
可能重複:http://stackoverflow.com/questions/12683713/optional-capture-group-not-capturing – Enissay