DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: liangjiping168
今日帖子: 16
在线用户: 22
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2019/3/15 11:09:47
标题:
分享一下参考php正则匹配的函数.. 浏览:702
加入我的收藏
楼主: 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;

// 调用方法 需要Tqjson.
fun_preg_match('aab','--AabbaabbbaAbuu--',Tq,[modeX,modeI]);
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2019/3/15 17:29:58
1楼: 楼主描述一下:ExprSetr的定义呗
----------------------------------------------
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2019/3/15 17:48:48
2楼: @glwang


哪看到的?? ExprSetr
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 glwang (glwang) ★☆☆☆☆ -
盒子活跃会员
2019/3/16 14:54:34
3楼: 函数中的参数:mode:ExprSet
----------------------------------------------
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行62.5毫秒 RSS