• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Delphi中使用RegExpr单元进行匹配与替换操作

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

      在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)表示不区分大小写

 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Delphi中用ADOQuery实现主从表的例子(转)发布时间:2022-07-18
下一篇:
FastReport调用Delphi中的自定义函数发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap