首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 正則表達式深度解析(三):Regex 引擎群組匹配追蹤實戰

     編輯:關於C語言

複雜群組結構匹配追蹤完整範例

模式(含註解,需 RegexOptions.IgnorePatternWhitespace):

string pattern = @"
    (              # 群組 1 開始
        abra       # 匹配 abra
        (          # 群組 2 開始
            cad    # 匹配 cad
        )?         # 群組 2 結束(可選)
    )              # 群組 1 結束
    +              # 重複一次以上
";

輸入:abracadabra1abracadabra2abracadabra3

執行程式碼與輸出分析

Regex r = new Regex(pattern, RegexOptions.IgnorePatternWhitespace);
int[] groupNums = r.GetGroupNumbers();
Match m = r.Match(text);
while (m.Success) {
    for (int i = 1; i < groupNums.Length; i++) {
        Group g = m.Groups[groupNums[i]];
        Console.WriteLine($"Group{groupNums[i]}=[{g.Value}]");
        for (int j = 0; j < g.Captures.Count; j++) {
            Capture c = g.Captures[j];
            Console.WriteLine($" Capture{j}=[{c.Value}] Index={c.Index} Length={c.Length}");
        }
    }
    m = m.NextMatch();
}

關鍵輸出解讀

Group1=[abra]           // 最後一次匹配值
 Capture0=[abracad] Index=0 Length=7   // 第一次重複捕獲
 Capture1=[abra]    Index=7 Length=4   // 第二次重複捕獲
Group2=[cad]            // 內層群組最後值
 Capture0=[cad]     Index=4 Length=3
// 後續重複相同結構...

重點:

  • 外層群組因 + 量詞產生多個 Capture
  • Group.Value 永遠等於最後一個 Capture.Value
  • 若移除 +,僅匹配一次,CaptureCollection 僅含單一元素
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved