电竞比分网-中国电竞赛事及体育赛事平台

分享

Delphi正則表達(dá)式System.RegularExpressions

 喜歡站在山上 2024-04-19 發(fā)布于吉林

新版本的Delphi內(nèi)置了專門用于正則操作的庫System.RegularExpressions,該庫提供了一個專門的類TRegEx用來操作正則表達(dá)式。今天一起來看看Delphi正則表達(dá)式用法,包括創(chuàng)建正則表達(dá)式對象、匹配驗證、捕獲分組以及反向引用等。

新建TRegEx對象

通過TRegEx.Create('your pattern')來新建正則對象。

uses System.RegularExpressions;var Regex: TRegEx; Input: string;begin Input := 'Hello world and love'; // 創(chuàng)建一個正則表達(dá)式對象,使用構(gòu)造函數(shù)指定正則表達(dá)式字符串 Regex := TRegEx.Create('world');end;

驗證是否匹配(IsMatch)

新建TRegEx對象之后,如果只需要驗證是否匹配,可以使用IsMatch方法。該方法返回一個boolean值,true表示匹配,false表示不匹配。

if Regex.IsMatch(Input) then  ShowMessage('匹配成功');

獲取第一個匹配的位置(Match)

新建TRegEx對象之后,也可以用Match方法,獲取到具體的匹配信息,包括第一次匹配的位置(Index)。

var Match: TMatch;begin Match := Regex.Match(Input); if Match.Success then ShowMessage('第一次匹配的位置在: ' + IntToStr(Match.Index));end;

獲取所有匹配結(jié)果(Matches)

如果要獲取所有匹配結(jié)果,可以用Matches方法,該方法返回一個TMatchCollection,包含所有的匹配結(jié)果。

var  Matches: TMatchCollection;  Match: TMatch;begin  Matches := Regex.Matches(Input);  for Match in Matches do    WriteLn('匹配位置: ' + IntToStr(Match.Index) + ', 匹配值: ' + Match.Value);end;

捕獲分組(Groups)

在正則表達(dá)式中,使用圓括號 () 來定義捕獲組。每一個()表示一組匹配。匹配后,可以通過Groups獲取到所有匹配的分組信息。

比如下面的案例,定義分組正則表達(dá)式,可以獲取到所有的數(shù)字。

var Match: TMatch;begin Match := Regex.Match('123-45-6789'); if Match.Success then begin WriteLn('Group 1: ' + Match.Groups[1].Value); // 輸出:123 WriteLn('Group 2: ' + Match.Groups[2].Value); // 輸出:45 WriteLn('Group 3: ' + Match.Groups[3].Value); // 輸出:6789 end;end;

匹配結(jié)果反向引用

反向引用允許你在替換字符串中引用之前的捕獲組內(nèi)容,一般用于正則替換(Replace)場景。使用 $ 符號加組號(如 $1、$2)或命名組名(如 $groupname)來引用。

下面的案例中,<tag>text</tag>被替換成 $1 has been extracted,其中$1是匹配到的結(jié)果,即text。

uses  System.SysUtils,  System.RegularExpressions;var  Regex: TRegEx;  InputStr, ReplacementStr: string;begin  InputStr := 'Before <tag>text</tag> After';    // 創(chuàng)建一個正則表達(dá)式對象  Regex := TRegEx.Create('<tag>(.*?)</tag>');  // 使用反向引用進(jìn)行替換  ReplacementStr := Regex.Replace(InputStr, '$1 has been extracted');    // 輸出替換后的結(jié)果  WriteLn(ReplacementStr); // 輸出:Before text has been extracted Afterend;

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多