依此類推,對於每個匹配(匹配時)或每個字符(當沒有匹配時)。
正則表達式d*
中的問題是它接受空匹配 - 它表示空字符串匹配模式。這意味着你會總是獲得一場比賽。
讓我們嘗試在dddxdddd
字符串d*
模式:
這裏的初始位置:
dddxdddd matches: []
^
的^
真的意味着光標第一d
之前。你應該將光標看作是之間的這兩個字符串。這將幫助您瞭解匹配過程。
所以讓我們只需要插入虛構空間來說明:
d d d x d d d d matches: []
^
我們拿到的第一場比賽在這裏,作爲第一個字符是一個d
:
dddxdddd
\_/
比賽結束後,我們將在光標位於d
和x
之間:
d d d x d d d d matches: ["ddd"]
^
我們嘗試再次匹配。該匹配成功與d
和x
之間的空字符串。當我們得到一個空的比賽,我們提前光標:
d d d x d d d d matches: ["ddd", ""]
^
我們然後嘗試再次匹配,而我們得到的dddd
子:
dddxdddd
\__/
我們將光標後:
d d d x d d d d matches: ["ddd", "", "dddd"]
^
所以它現在在最後的d
和字符串的末尾之間。同樣,我們嘗試的比賽,我們有一個空字符串成功:
d d d x d d d d matches: ["ddd", "", "dddd", ""]
^
如果我們試圖向前移動光標,現在將過去的字符串的結尾,這意味着我們已經找到了所有的比賽,我們完成了。
最終結果:
["ddd", "", "dddd", ""]
http://www.regular-expressions.info/ – hjpotter92
這並不是說有「空字符串前,每個字母后」。你的查詢的答案在你連接的問題的答案中...... _「你的正則表達式匹配'''空字符串與'd *',因爲'*'量詞意味着零次或多次,這是零'd'這裏。「_ – msanford