delphi正規表示式學習筆記(三)

2021-07-05 20:02:52 字數 2792 閱讀 4134

在 delphi 中使用正規表示式, 目前 perlregex 應該是首選, 準備徹底而細緻地研究它. 

官方**:  xpressions.info/delphi.html

二、安裝方法:

perlregex提供了tperlregex類。主要用法是: 

regex : tperlregex; 

.... 

regex := tperlregex; 

try 

regex.subject := '要匹配的正文'; 

regex.regex := '正規表示式'; 

if regex.match then .... 

finally 

regex.free 

end; 

如果要多次匹配並做一些處理,可以: 

matched : boolean; 

.... 

regex.match; 

while regex.foundmatch do 

begin 

.... 

regex.matchagain; 

end; 

如果要替換匹配到的內容,可以 

regex.subject := '要匹配的正文'; 

regex.regex := '正規表示式'; 

regex.replace := '替換的字串' 

if regex.match then regex.replaceall;   //結果在regex.subject 

或者 if regex.match then result := regex.replacement; 

匹配到的字串放在regex.matchedexpression中,長度在regex.matchedexpressionlength中,上一次匹配的結束位置在regex.stop中 

匹配到的子串放在regex.subexpressions中,子串個數在regex.subexpressioncount中。 

如果正則式很複雜而且常用,可建立乙個生存期相對長的tperlregex例項.設定好regex屬性後,使用.study方法對正規表示式進行預處理.據幫助文件說,文件資料會大大提高效率. 

詳情可參考文件。有一點文件上沒有提到(又或者我看漏了),在第一次匹配之後,如果沒有重新賦值subject,下一次匹配無論用match或者matchagain,都是從上次的結束位置開始。所以如果要重新開始匹配,應先把regex.start := 0; 

四、正則單元

程式**

unit unitregex; 

inte***ce 

uses 

perlregex; 

function checkemail(emailaddr: string): boolean; 

function checkstrornumber(str: string): boolean; 

var 

perlregex: tperlregex; 

implementation 

//email電子郵箱檢測 

function checkemail(emailaddr: string): boolean; 

begin 

perlregex := tperlregex.create(nil); 

perlregex.subject := emailaddr; 

perlregex.regex := '\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*'; 

result := perlregex.match; 

end; 

//字元、數字檢測 

function checkstrornumber(str: string): boolean; 

begin 

perlregex := tperlregex.create(nil); 

perlregex.subject := str; 

perlregex.regex := '^[a-za-z0-9]+$'; 

result := perlregex.match; 

end; 

end.

五、使用例項

程式**

六、常用正則表式

正規表示式用於字串處理、表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。 

匹配中文字元的正規表示式: [\x-\x]+

評注:匹配中文還真是個頭疼的事,有了這個表示式就好辦了 

匹配雙位元組字元(包括漢字在內):[^\x00-\xff]--------------------------------------

試驗:刪除http所有標籤

var 

reg: tperlregex; 

str:string; 

begin 

str:=memo1.text; //有<>等內容 

reg := tperlregex.create(nil);

reg.subject := memo1.text; 

reg.regex   := '\<[^>]+()\>';

while reg.matchagain do 

begin 

str:=stringreplace(str,reg.subexpressions[0],'',[rfreplaceall]); //刪除http標籤 

end; 

showmessage(str); 

freeandnil(reg);

end;

正規表示式學習筆記

正規表示式學習日記 1 為萬用字元,表示任何乙個字元,例如 a.c 可以匹配 anc abc acc 2 在內可以指定要求匹配的字元,例如 a nbc c 可以匹配 anc abc acc 但不可以匹配 ancc a到z可以寫成 a z 0到9可以寫成 0 9 3 數量限定符號,表示匹配次數 或者叫...

正規表示式學習筆記

字元描述 將下乙個字元標記為乙個特殊字元 或乙個原義字元 或乙個 向後引用 或乙個八進位制轉義符。例如,n 匹配字元 n n 匹配乙個換行符。序列 匹配 而 則匹配 匹配輸入字串的開始位置。如果設定了 regexp 物件的 multiline 屬性,也匹配 n 或 r 之後的位置。匹配輸入字串的結束...

正規表示式學習筆記

1.正規表示式是可用於在乙個檔案或字元裡查詢和替代文字的一種標準。它具有兩種標準 基本的正規表示式 bre 擴充套件的正規表示式 ere ere包括bre功能和另外其它的概念。2.表示或運算 3.匹配任何單個字元 4.匹配任何中包含的單個字元,如 張王李 三,匹配張 三 王三,李三 5.將排除 後跟...