在我熟悉的所有语言的正则表达式引擎中,.*
符号表示匹配零个或多个字符。考虑以下 Javascript 代码:
var s = "baaabcccb";
var pattern = new RegExp("b.*b");
var match = pattern.exec(s);
if (match) alert(match);
这输出baaabcccb
Python也会发生同样的事情:
>>> import re
>>> s = "baaabcccb"
>>> m = re.search("b.*b", s)
>>> m.group(0)
'baaabcccb'
这两种语言都匹配"baaabcccb"
而不是简单的原因是什么"baaab"
?我阅读模式的方式b.*b
是“找到一个以 开头的子字符串b
,然后包含任意数量的其他字符,然后以 . 结尾b
。” 两者都baaab
满足baaabcccb
这个要求,但 Javascript 和 Python 都匹配后者。我本来希望它 match baaab
,仅仅是因为该子字符串满足要求并首先出现。
那么为什么baaabcccb
在这种情况下模式匹配呢?而且,有没有办法修改这种行为(在任何一种语言中),以使其匹配baaab
?