在我所熟悉的所有编程语言中,正则表达式引擎使用的符号“.*”表示匹配零个或多个字符。请看下面这段JavaScript代码:
这两种语言为什么都会匹配"baaabcccb",而不仅仅是"baaab"呢?我对模式"b.*b"的理解是“查找以'b'开头、中间有任意数量字符,以'b'结尾的子字符串”。"baaab"和"baaabcccb"都能满足这个要求,但是JavaScript和Python都匹配后者。 我原本期待它匹配"baaab",因为该子字符串既满足要求,又出现在前面。
那么,为什么这个模式会在这种情况下匹配"baaabcccb"呢?是否有任何方法可以修改这种行为(无论是在哪种语言中)以便它匹配"baaab"而不是"baaabcccb"?
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都匹配后者。 我原本期待它匹配"baaab",因为该子字符串既满足要求,又出现在前面。
那么,为什么这个模式会在这种情况下匹配"baaabcccb"呢?是否有任何方法可以修改这种行为(无论是在哪种语言中)以便它匹配"baaab"而不是"baaabcccb"?