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

Delphi 正則表達式語法詳解 (8):反向引用 - 在替換與模式中引用捕獲組

     編輯:Delphi

反向引用 (Backreference) 允許在正則模式內部或替換字串中引用前面捕獲組的內容,實現強大的文字重組與驗證。

基礎:提取每個單詞首字母

var reg: TPerlRegEx; 
begin 
  reg := TPerlRegEx.Create(nil); 
  reg.Subject := 'one two three four five six seven eight nine ten'; 
  reg.RegEx := '\b([A-Za-z])[A-Za-z]*\b'; { 第1捕獲組: 首字母 }
  reg.Replacement := '\1'; { 引用第1捕獲組 }
  reg.ReplaceAll; 
  ShowMessage(reg.Subject); { 輸出: o t t f f s s e n t }
  FreeAndNil(reg); 
end;

多重捕獲組引用

reg.Subject := 'one two three ten'; 
reg.RegEx := '(t)(\w+)'; { 捕獲組1: t, 捕獲組2: 餘下字母 }
reg.Replacement := '[\1-\2:\0]'; { \1\2 引用捕獲組,\0 引用整個匹配 }
reg.ReplaceAll; 
{ 輸出: one [t-wo:two] [t-hree:three] [t-en:ten] }

引用語法對照

語境引用整體引用第1組引用第2組說明
Replacement 字串\0 / $0\1 / $1\2 / $2替換結果中插入捕獲內容
RegEx 模式內部不支援\1\2模式中反向引用,如 (\w+)\s+\1 匹配重複單詞

進階應用:HTML 標籤配對驗證

{ 簡易版:匹配成對的標籤如 ... }
reg.RegEx := '<(\w+)>.*?'; { \1 引用第一捕獲組 (標籤名) }

關鍵限制

  • 模式內反向引用最多 99 組 (同 MAX_SUBEXPRESSIONS)
  • 巢狀捕獲組按左括號順序編號
  • (?:...) 非捕獲組不佔用編號
  • 具名捕獲組 (?<name>...) 在替換中用 ${name} 或 \k<name> 引用 (視引擎支援)

反向引用是正則表達式從「匹配」邁向「處理」的關鍵橋樑,善用它能完成極其複雜的文字轉換任務。

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