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

Delphi 正則表達式語法詳解 (9):邊界斷言 - 預搜尋與反向預搜尋

     編輯:Delphi

零寬度斷言 (Zero-width Assertions) 不消耗字元,僅檢查位置前後的內容,是精準匹配的利器。

四大斷言語法

語法名稱含義範例
(?=...)正向預搜尋右側必須匹配 ...Delphi (?=2007) 僅匹配後接 2007 的 Delphi
(?!...)負向預搜尋右側必須不匹配 ...Delphi (?!2007) 匹配非後接 2007 的 Delphi
(?<=...)正向回顧左側必須匹配 ...(?<=\$)\d{3} 匹配左側為 $ 的三位數
(?負向回顧左側必須不匹配 ...(? 匹配左側非 $ 的三位數

完整範例

匹配右側內容 (?=)

reg.Subject := 'Delphi 6; Delphi 7; Delphi 2007; Delphi Net'; 
reg.RegEx := 'Delphi (?=2007)'; 
reg.Replacement := '◆'; 
reg.ReplaceAll; 
{ 輸出: Delphi 6; Delphi 7; ◆2007; Delphi Net }

不匹配右側內容 (?!)

reg.RegEx := 'Delphi (?!2007)'; 
{ 輸出: ◆6; ◆7; Delphi 2007; ◆Net }

匹配左側內容 (?<=)

reg.Subject := '111, 222, $333, $444'; 
reg.RegEx := '(?<=\$)\d{3}'; 
reg.Replacement := '◆'; 
{ 輸出: 111, 222, $◆, $◆ }

不匹配左側內容 (?
reg.RegEx := '(?{ 輸出: ◆, ◆, $333, $444 }

關鍵特性

  • 零寬度:斷言本身不佔用匹配長度,替換時不會移除斷言匹配的內容
  • (?<=...) 固定寬度限制:某些引擎要求回顧斷言為固定長度,Delphi PCRE 相容性良好
  • 巢狀支援:斷言內可包含完整正則表達式
  • 效能考量:複雜斷言可能影響效能,簡單字面值斷言極快

實用模式

{ 單詞邊界精確控制 }
\b(?=\w) { 單詞開始 }
\b(?<=\w) { 單詞結束 }

{ 千分位分隔符 (不匹配小數點後) }
(?<=\d)(?=(\d{3})+(?!\d))

掌握四大斷言,能解決「匹配但不捕獲」、「條件式邊界」等高階文字處理難題。

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