【发布时间】:2012-06-17 02:04:10
【问题描述】:
在我熟悉的所有语言的正则表达式引擎中,.* 表示法表示匹配零个或多个字符。考虑以下 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 都匹配后者。我原以为它会匹配baaab,仅仅是因为该子字符串满足要求并且首先出现。
那么为什么在这种情况下模式匹配baaabcccb?而且,是否有任何方法可以修改此行为(使用任何一种语言),以使其与 baaab 匹配?
【问题讨论】:
标签: javascript python regex