我們剛在程序員使用(.)+
時應用(.+)
時發現了一些錯誤。一個簡單的修復,但我們無法解釋(.)+
的行爲。任何人都可以解釋爲什麼這匹配「e」,最後一個字母,而不是「b」,正則表達式中的「a」之後的第一個字母?你會如何解釋(.)+
?(。)+在正則表達式中的行爲是什麼?
my $s = 'abcde';
if ($s =~ m{ a (.)+ }x){
print "s '$s' matched '$1'\n";
}else{
print "total match fail\n";
}
__END__
output:
s 'abcde' matched 'e'
我相信這背後的原因是因爲它保持匹配,直到它無法匹配模式。在哪一點,它是捕獲組中最後一個匹配的字符。 –
嘗試在代碼的頂部添加'use re'debug';'。這對跟蹤正在發生的事情很有用。 – Sobrique
我喜歡[重複捕捉組與重複組捕捉]中的解釋(http://www.regular-expressions.info/captureall.html)。 – ThisSuitIsBlackNot