zoukankan      html  css  js  c++  java
  • Delphi中使用RegExpr单元进行匹配与替换操作

          在Delphi本身不支持正则表达式,但是有许多第三方软件提供了相关组件,通常的有TPerlRegEx和RegExpr,可以在http://RegExpStudio.com中下载此模块,使用时无需安装只要在工程的路径中的search项指定即可(Projects->Options的Directories/Conditions的search项)

         下面为设计的窗体:

       

    其中匹配和替换的代码如下

    //匹配

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Rgr: TRegExpr;
    begin
      Rgr := TRegExpr.Create;
      Rgr.Expression := ':(\S+),';   //输入333 :1,  :3,  输出333 "1"  "3"

      Edit2.Text := Rgr.Replace(Edit1.Text, '"$1"', True);  //最后一个参数必须指定为True,否则不按组匹配,会得到333 "$1"  "$1" 

      Rgr.Free;
    end;

    //替换,将:xxx,替换为"xxx"

    procedure TForm1.Button2Click(Sender: TObject);
    var
      Rgr: TRegExpr;
    begin
      Rgr := TRegExpr.Create;
      Rgr.Expression := ':(\S+),';  //输入333 :1,  :3,  输出   1   3
      try
        if Rgr.Exec(Edit1.Text) then
          repeat
            Edit2.Text :=Edit2.Text+'   '+Rgr.Match[1];  //Match[1]改为Match[0]后输出   :1   :3
          until not Rgr.ExecNext;
      finally
        Rgr.Free;
      end;
    end;

    end.

    问题1:

    如果我想匹配 AAA  :B,  :"C",  :D,  :"E",  然后将:B, :D,替换为:"B", :"D",  该如何实现呢?

     

    解决方法: 

    1.字符中的:B, 和:D, ,可以用'(:)(\w+)(,)',共分为三个组,分别为$1,$2,$3;

    2.替换用Rgr.Replace(Edit1.Text, '$1"$2"$3', True);

    这样又会产生新的问题,即对于汉字无法替换,如AAA  :B,  :"C",  :我们,  :"E",  应用上面的规则只能替换为

    AAA  :"B",  :"C",  :我们,  :"E",所以此处替换规则应该是

    (1)以:号开始  

    (2)以,号结束

    (3)中间为非"号的字符

    新的匹配规则为 用'(:)([^"]+)(,)'代码为:

    procedure TForm1.Button2Click(Sender: TObject);
    var
       Rgr: TRegExpr;
    begin
       Edit2.Text := '';
       Rgr := TRegExpr.Create;
       //Rgr.Expression :='(:)(\w+)(,)';       //不能匹配汉字
       Rgr.Expression := '(:)([^"]+)(,)';    //(:)对应$1  (\S+)对应$2   (,)对应$3
       Edit2.Text := Rgr.Replace(Edit1.Text, '$1"$2"$3', True);
       Rgr.Free;
    end;

     

    问题2:

    不分大小写的匹配,  该如何实现呢?比如我想匹配aAA或aAa

      

     

    解决方法:

    可用 Rgr.Expression := '(?i)(aA)';  //(?i)表示不区分大小写

     

     

  • 相关阅读:
    Java集合之ArrayList
    深入理解Java中的String
    Spring系列之AOP实现的两种方式
    设计模式之代理模式
    使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件
    滚动页面, 顶部导航栏固定效果
    nginx同一iP多域名配置方法
    nginx 服务器重启命令,关闭
    CentOS Linux服务器安全设置
    CentOS7安装iptables防火墙
  • 原文地址:https://www.cnblogs.com/djcsch2001/p/2072217.html
Copyright © 2011-2022 走看看