回溯
更新:2007 年 11 月
當規則運算式有選擇性或替代比對模式時,規則運算式比對引擎 (在其輸入字串評估的某個點) 可能分支出一個或多個方向以達成所有可能比對。如果比對在引擎搜尋的第一個方向上不成功,它必須備份輸入字串中發生分支的位置,並嘗試替代的比對。
例如,考慮使用針對比對兩種灰色拼法而設計的規則運算式:gray 和 grey。使用替代字元 | 來建立規則運算式 gr(a|e)y,以比對任一種拼寫。套用至輸入字串 greengraygrowngrey 時,假設引擎會首先嘗試比對 gray。它比對輸入字串的頭兩個字元 gr,接著在 green 的 e 上失敗。它反向追蹤至 r (替代字元之前的最後成功比對),並試圖比對 grey。又在第二個 e 上失敗,引擎會繼續搜尋,最後將比對到兩個嵌入字組 gray 和 grey。
下列程式碼範例示範如何建立這個規則運算式,並將它套用至輸入字串。
Imports System.Text.RegularExpressions
Module Example
Public Sub Main()
' Define strings: "gray" and "grey".
Dim r As New Regex("gr(a|e)y")
Dim m As MatchCollection = r.Matches("greengraygrowngrey")
Console.WriteLine("Number of groups found: {0}", m.Count)
End Sub
End Module
' The example displays the following output:
' Number of groups found: 2
using System;
using System.Text.RegularExpressions;
public class Example
{
public static void Main()
{
// Define strings: "gray" and "grey".
Regex r = new Regex("gr(a|e)y");
MatchCollection m = r.Matches("greengraygrowngrey");
Console.WriteLine("Number of groups found: {0}", m.Count);
}
}
// The example displays the following output:
// Number of groups found: 2