我们刚在程序员使用(.)+
时应用(.+)
时发现了一些错误。一个简单的修复,但我们无法解释(.)+
的行为。任何人都可以解释为什么这匹配“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