程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> RegularExpressions(5) RegularExpressions 成員(二) IRegex

RegularExpressions(5) RegularExpressions 成員(二) IRegex

編輯:Delphi

//IRegex 的屬性與方法   
IRegex.GetGroupNames;     { 子表達式編號數組, 譬如有兩個子表達式, 會得到 0,1,2; 這基本無用 } 
IRegex.GetGroupNumbers;    { 同上, 只是獲取的是整數數組 } 
IRegex.GroupNameFromNumber(); { 應該是從子表達式編號獲取子表達式的名稱; 但沒有實現, 來回都是編號 } 
IRegex.GroupNumberFromName(); { 同上一個是反著的; 基本都無用 } 
IRegex.IsMatch();       { 判斷是否有所匹配; 如果只想知道是否匹配到, 用它應該最快 } 
IRegex.Match();        { 獲取一個 IMatch 對象, 這是第一個匹配結果 } 
IRegex.Matches();       { 獲取一個 IMatchCollection 對象; 這是匹配到的 IMatch 的集合 } 
IRegex.Replace();       { 替換 } 
IRegex.Split();        { 根據表達式分割字符串; 當前版本沒有實現好, 暫時無用 } 
IRegex.ToString;       { 獲取表達式文本 } 
IRegex.Save();        { 把表達式保存到流 } 
IRegex.Load();        { 從流中取回由 Save 保存的表達式 } 
IRegex.Options;        { 選項集合, 是只讀的; 要設置只能從 Create 方法中 } 
{這其中需要重新看看的只有 Replace} 
 
//IRegex 是通過 TRegex 實現的, TRegex 還有下面幾個靜態類方法: 
TRegex.Escape();  { 編碼需要轉義的字符 } 
TRegex.Unescape(); { 還原 Escape 的編碼 } 
TRegex.IsMatch();  { 同 IRegex.IsMatch } 
TRegex.Match();   { 同 IRegex.Match } 
TRegex.Matches();  { 同 IRegex.Matches } 
TRegex.Replace();  { 同 IRegex.Replace } 
TRegex.Split();   { 同 IRegex.Split } 
{ 使用這些個類方法會讓代碼更簡單 } 

  下面是使用類方法簡化程序的例子:

uses RegularExpressions; 
 
procedure TForm1.FormCreate(Sender: TObject); 
var 
 Match: IMatch; 
 MatchCollection: IMatchCollection; 
 Pattern, Input, str: string; 
begin 
 Pattern := '([A-Za-z]+)(\d+)'; 
 Input := 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA'; 
 
 // 
 Match := TRegex.Match(Input, Pattern); 
 ShowMessage(Match.Value); { AAA1 } 
 
 // 
 MatchCollection := TRegex.Matches(Input, Pattern); 
 ShowMessage(IntToStr(MatchCollection.Count)); { 4 } 
  
 // 
 str := TRegex.Replace(Input, Pattern, '◆'); 
 ShowMessage(str); { ◆ ◆ ◆ ◆ ◆ ◆ AAAA } 
end; 

  Escape 與 Unescape 測試:

uses RegularExpressions; 
 
procedure TForm1.FormCreate(Sender: TObject); 
var 
 str: string; 
begin 
 str := TRegex.Escape('.$^{[(|)*+?\'); 
 ShowMessage(str); (* \.\$\^\{\[\(\|\)\*\+\?\\ *) 
 str := TRegex.Unescape(str); 
 ShowMessage(str); (* .$^{[(|)*+?\ *) 
end; 

  Replace 函數有很多重載, 如:

uses RegularExpressions; 
 
procedure TForm1.FormCreate(Sender: TObject); 
var 
 Regex: IRegex; 
 Match: IMatch; 
 Pattern, Input, str: string; 
begin 
 Pattern := '([A-Za-z]+)(\d+)'; 
 Input := 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA'; 
 Regex := TRegex.Create(Pattern); 
 
 { 替換全部 } 
 str := Regex.Replace(Input, '◆'); 
 ShowMessage(str); { ◆ ◆ ◆ ◆ ◆ ◆ AAAA } 
 
 { 只替換前兩個匹配 } 
 str := Regex.Replace(Input, '◆', 2); 
 ShowMessage(str); { ◆ ◆ AA11 BB22 A111 B222 AAAA } 
 
 { 從第 10 個字符開始, 只替換兩個匹配 } 
 str := Regex.Replace(Input, '◆', 2, 10); 
 ShowMessage(str); { AAA1 BBB2 ◆ ◆ A111 B222 AAAA } 
end; 

  Replace 函數中還應該有一個 TMatchEvaluator 事件參數, 它可以執行一些更高級的替換, 遺憾的是當前版本也沒有實現.

  盡管有不少東西還沒實現, 但試用下來感覺還是蠻不錯的, 可以放棄 PerlRegEx 了!


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved