2010-12-07 66 views
1
Regex.IsMatch("ab", @"^(?:(a)|\1b)$") == False 

所以它試圖匹配a,成功,然後再嘗試匹配$,失敗,所以它回溯並嘗試其他的間斷,這與\1開始。我假設它碰到「a」\1取值「a」,但現在因爲它必須回溯它忘記了那個值?它是如何工作的?在這之後,\1只會無法匹配任何內容?爲什麼這個正則表達式無法匹配?

+0

告訴我們你想匹配什麼可能會更好? – 2010-12-07 20:21:32

回答

4

正則表達式中的反向引用總是隻匹配當前被匹配的內容。這是一致性問題 - 不匹配的字符串部分不應該污染匹配引擎的狀態,因爲這會導致誤報。

所以是的,你是正確的:\1反向引用永遠不會匹配任何東西(甚至不是空字符串),因爲它對應的捕獲組也不會匹配,因爲它位於交替運算符的另一側。

相關問題