正则表达式中(。)+的行为是什么?

时间:2015-10-05 16:42:04

标签: regex perl

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

1 个答案:

答案 0 :(得分:10)

(.)+(.+)之间存在巨大差异,但仅限于捕获的内容,而不是匹配内容。

(.)+查找单个字符的一个或多个实例并捕获其中的最后一个。

(.+)会查找一个或多个单个字符,并立即捕获所有这些字符。