自己时长会用的几个关于正则的函数、在这里存一份、、、
{ 测试字符串 参数列表 Subject 等待测试的字符串 getIndex 获取的分组下标(可指定多个) RegEx 正则匹配式 Results 返回符合表达式的字符串列表 Result 测试是否成功 **************************************** eg: var s:TStringList; begin if RegTest('<a href="/miniportal/static/album/22/album_54122_1.html" mce_href="miniportal/static/album/22/album_54122_1.html" title="单身情歌.万人舞台:越慢越美丽慢歌演唱会" class="song_title">', '<a\x20href="(?<URL>.*?)"\x20title="(?<Album>.*?)"\x20class="song_title">',[1,2],s) then begin ShowMessage('ok'); end; end; } function RegTest(const Subject,RegEx:string; const getIndex:array of Integer; var Results:TStringList; const FindAll:Boolean=False):Boolean;overload; var Reg:TPerlRegEx; nLoop:Integer; function GetOnce(const Num:array of Integer;const RegStr:TPerlRegEx;RStr:TStringList):Boolean; var nLoop:Integer; begin try for nLoop := 0 to High(getIndex) do//根据输入的下标来反馈 Results.Add(Reg.SubExpressions[getIndex[nLoop]]); finally end; end; begin try try Reg:=TPerlRegEx.Create(nil); Reg.Subject:=Subject; Reg.RegEx:=RegEx; Result:=Reg.Match; Results.Clear; if Result then if FindAll then begin GetOnce(getIndex,Reg,Results);//先获取一次 while Reg.MatchAgain do //然后再重复获取 GetOnce(getIndex,Reg,Results); end else GetOnce(getIndex,Reg,Results); except Result:=False; end; finally FreeAndNil(Reg); end; end; { 测试字符串 参数列表: Subject 等待测试的字符串 RegEx 正则匹配式 Results 返回符合表达式的一个字符串 getIndex 获取的分组下标 Result 测试是否成功 } function RegTest(const Subject,RegEx:string;var Results:string;const getIndex:Integer=0):Boolean;overload; var Reg:TPerlRegEx; begin try try Reg:=TPerlRegEx.Create(nil); Reg.Subject:=Subject; Reg.RegEx:=RegEx; Result:=Reg.Match; if Result then Results:=Reg.SubExpressions[getIndex]; except Result:=False; end; finally FreeAndNil(Reg); end; end; { 测试字符串 参数列表: Subject 等待测试的字符串 RegEx 正则匹配式 Results 返回符合表达式的所有字符串 Result 测试是否成功 } function RegTest(const Subject,RegEx:string;var Results:TStringList):Boolean;overload; var Reg:TPerlRegEx; begin try Reg:=TPerlRegEx.Create(nil); Reg.Subject:=Subject; Reg.RegEx:=RegEx; Results.Clear; while Reg.MatchAgain do begin if Reg.MatchedExpression <> '' then Results.Add(Reg.MatchedExpression); end; Result:=Results.Count > 0; //Reg.Options:=[preCaseLess]; finally FreeAndNil(Reg); end; end; { 替换字符串 参数列表: sString 原字符串 oString 被替换正则表达式 nString 替换为字符串 NewStr 保存结果的字符串 NoCase 是否区分大小写(True不区分、表达式含有中文慎用) Result 是否替换成功 } function RegReplace(const sString,oString,nString:string;var NewStr:string;const NoCase:Boolean=True):Boolean; var Reg:TPerlRegEx; begin try Reg:=TPerlRegEx.Create(nil); Reg.RegEx:=oString; Reg.Subject:=sString; Reg.Replacement:=nString; if NoCase then Reg.Options:=[preCaseLess]; Result:=Reg.ReplaceAll; if Result then NewStr:=Reg.Subject; finally Reg.Free; end; end; {*******************************************************}