空白比對後的下一個比對
更新:2007 年 11 月
當比對經由呼叫 NextMatch 或者使用 Regex.Matches 傳回的集合,在字串中全面重複時,規則運算式引擎會對空白比對進行特殊處理。
通常,NextMatch 正好從上次比對停止的地方開始下一個比對。然而,在空白比對之後,NextMatch 會在嘗試下次比對之前,會再向前移動一個字元。這個規則保證比對引擎在字串中全面進展 (如果它不再向前移動一個字元,下一個比對將在上次比對完全相同的地方開始,並且它將會重複比對相同的空字串)。
例如,在字串 "abaabb" 中搜尋 "a*" 會傳回下列比對序列。
"a"、""、"aa"、""、""、""
在內容中,這裡有另一個觀點:
(a)()b(aa)()b()b()
第一個比對取得第一個 a。第二個比對在第一個 b 之前,正好從第一個比對結束之處開始;它尋找零個項目的 a 並傳回空字串。
第三個比對沒有正好在第二個比對結束的地方開始,因為第二個比對傳回空字串。反而,它向後一個字元開始,即第一個 b 之後。第三個比對尋找到兩個 a 項目,並傳回 "aa"。
第四個比對開始於第三個比對結束之處,即第二個 b 之前,並找到空字串。然後第五個比對在最後的 b 之前開始,並再次找到空字串。第六個比對在最後的 b 之後開始,並又再度找到空字串。