Delphi中使⽤RegExpr单元进⾏匹配与替换操作在Delphi本⾝不⽀持正则表达式,但是有许多第三⽅软件提供了相关组件,通常的有TPerlRegEx和RegExpr,可以在中下载此模块,使⽤时⽆需安装只要在⼯程的路径中的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)表⽰不区分⼤⼩写

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。