function fun_preg_match(expr:string;SourceData:string;var resJson:TQJson;mode:ExprSet):Integer; var Trex:TRegExpr; I:Integer; begin Result := 0; //参考php的正则函数. resJson.Clear; Trex := TRegExpr.Create; try Trex.Expression := expr; Trex.ModifierI := modeI in mode; Trex.ModifierS := modeS in mode; Trex.ModifierG := modeG in mode; Trex.ModifierM := modeM in mode; Trex.ModifierX := modeX in mode; Trex.ModifierR := modeR in mode; if Trex.Exec(SourceData) then begin for I := 0 to Trex.SubExprMatchCount do begin resJson.Add(IntToStr(I)).AsString := Trex.Match[I]; end; // resJson.Add('Modifier').AsString := Trex.ModifierStr; Result := Trex.SubExprMatchCount; end; finally FreeAndNil(Trex); end; end;
function fun_preg_match_all(expr:string;SourceData:string;var resJson:TQJson;mode:ExprSet):Integer; var Trex:TRegExpr; I:Integer; Rs:string; begin Result := 0; //参考php的正则函数. resJson.Clear; Trex := TRegExpr.Create; try Trex.Expression := expr; Trex.ModifierI := modeI in mode; Trex.ModifierS := modeS in mode; Trex.ModifierG := modeG in mode; Trex.ModifierM := modeM in mode; Trex.ModifierX := modeX in mode; Trex.ModifierR := modeR in mode; if Trex.Exec(SourceData) then begin repeat for I := 0 to Trex.SubExprMatchCount do begin Rs := IntToStr(I); resJson.ForceName(Rs).Add( IntToStr(resJson.ForceName(Rs).Count) ).AsString := Trex.Match[I]; end; until (not Trex.ExecNext); // resJson.Add('Modifier').AsString := Trex.ModifierStr; Result := resJson.Count; end; finally FreeAndNil(Trex); end; end;