在我熟悉的所有語言的正則表達式引擎中,.*
表示法表示匹配零個或多個字符。請看下面的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
結尾。」 baaab
和baaabcccb
都滿足這個要求,但Javascript和Python都符合後者。我預料它匹配baaab
,只是因爲該子字符串滿足要求和首先出現。
那麼爲什麼在這種情況下模式匹配baaabcccb
?並且,是否有任何方法可以修改此行爲(使用任一種語言),以便它與baaab
相匹配?
可能會增加,它的貪婪在默認情況下,這意味着正則表達式將嘗試匹配最長的字符串可能 – David
@大衛好呼叫 – Trevor