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

Delphi 正則表達式 TPerlRegEx 實戰 (2):子表達式捕獲與引用完整指南

     編輯:Delphi

正則表達式中的子表達式 (捕獲組) 是進階文字處理的核心,TPerlRegEx 提供完整的捕獲存取機制。

基本捕獲存取

var 
  reg: TPerlRegEx; 
begin 
  reg := TPerlRegEx.Create(nil); 
  reg.Subject := 'CodeGear Delphi 2007'; 
  reg.RegEx := 'Delphi'; 
  
  while reg.MatchAgain do 
  begin 
    ShowMessage(reg.MatchedExpression); { Delphi - 整個匹配內容 }
    ShowMessage(reg.SubExpressions[0]); { Delphi - 等同 MatchedExpression }
  end; 
  
  FreeAndNil(reg); 
end;

多重子表達式提取

var 
  reg: TPerlRegEx; 
begin 
  reg := TPerlRegEx.Create(nil); 
  reg.Subject := 'abc A1111 BB222 CCC33 DDDD4'; 
  reg.RegEx := '\b([A-D]+)([1-4]+)\b'; { 兩個子表達式:字母組 + 數字組 }
  
  while reg.MatchAgain do 
  begin 
    ShowMessage(reg.SubExpressions[0]); { 整個匹配: A1111, BB222, CCC33, DDDD4 }
    ShowMessage(reg.SubExpressions[1]); { 第1子表達式: A, BB, CCC, DDDD }
    ShowMessage(reg.SubExpressions[2]); { 第2子表達式: 1111, 222, 33, 4 }
    
    { 額外資訊屬性 }
    { reg.SubExpressionCount: 子表達式總數 (此例為 2) }
    { reg.SubExpressionLengths[n]: 第 n 子表達式匹配長度 }
    { reg.SubExpressionOffsets[n]: 第 n 子表達式在源字串中的位移 }
  end; 
  
  FreeAndNil(reg); 
end;

子表達式索引對照表

索引含義別名
0整個正則表達式匹配的內容MatchedExpression
1第 1 個括號組捕獲的內容
2第 2 個括號組捕獲的內容
n第 n 個括號組捕獲的內容最大 99 (MAX_SUBEXPRESSIONS)

Replacement 字串中引用捕獲組

reg.Replacement := '\1-\2'; { 引用第1、2捕獲組 }
reg.Replacement := '$1-$2'; { 同樣效果,$ 語法更通用 }

限制

  • 最大子表達式數:MAX_SUBEXPRESSIONS = 99 (內建常數)
  • 巢狀括號按左括號出現順序編號
  • 非捕獲組 (?:...) 不佔用索引

熟練掌握子表達式捕獲與引用,是編寫強大文字處理邏輯的關鍵技能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved