Delphi 正则表达式 与 TPerlRegEx.docx
《Delphi 正则表达式 与 TPerlRegEx.docx》由会员分享,可在线阅读,更多相关《Delphi 正则表达式 与 TPerlRegEx.docx(12页珍藏版)》请在冰豆网上搜索。
![Delphi 正则表达式 与 TPerlRegEx.docx](https://file1.bdocx.com/fileroot1/2023-1/25/a6806a8b-3ae0-450d-a87e-3a403143d692/a6806a8b-3ae0-450d-a87e-3a403143d6921.gif)
Delphi正则表达式与TPerlRegEx
在Delphi中使用正则表达式,目前PerlRegEx应该是首选
直接下载:
http:
//www.regular-expressions.info/download/TPerlRegEx.zip
安装方法:
1、先把解压的TPerlRegEx里面的文件和PCRE里面的文件统统放在Delphi的Lib目录中.
2、然后再Delphi中Component-->Installcomponent--->在unitfilename中找到PerRegEx.pas(packagefilename就按照默认的dclusr.dpk即可)安装。
再用同样的方法安装pcre.pas.
OK~!
安装完毕,在组件条最后已经出现了JGSoft按钮,安装成功。
(youcancreateanewpackageoraddthecomponenttoanexistingpackage.SimplyaddthefilesPerlRegEx.pasandpcre.pastothepackage.)
计划的学习步骤:
1、正则语法;2、TPerlRegEx功能.
//准备用这段简单的代码测试语法:
uses
PerlRegEx;//uses正则表达式单元
procedureTForm1.FormCreate(Sender:
TObject);
var
reg:
TPerlRegEx;//声明正则表达式变量
begin
reg:
=TPerlRegEx.Create(nil);//建立
reg.Subject:
='sSsS'; //这是要替换的源字符串
reg.RegEx :
='s'; //这是表达式,在这里是准备替换掉的子串
reg.Replacement:
='◆';//要替换成的新串
reg.ReplaceAll; //执行全部替换
ShowMessage(reg.Subject);//返回替换结果:
◆S◆S
FreeAndNil(reg);//因为建立时属主给了nil,这里没有使用reg.Free
end;
Delphi正则表达式语法
(1):
关于大小写与中文
//替换一般字符串
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='我爱DELPHI,但Delphi不爱我!
';
reg.RegEx :
='Delphi';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
我爱DELPHI,但◆不爱我!
FreeAndNil(reg);
end;
//不区分大小写
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='我爱DELPHI,但Delphi不爱我!
';
reg.RegEx :
='Delphi';
reg.Replacement:
='◆';
reg.Options:
=[preCaseLess];//不区分大小的设定,默认是区分的
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
我爱◆,但◆不爱我!
FreeAndNil(reg);
end;
//试试中文替换
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='我爱DELPHI,但Delphi不爱我!
';
reg.RegEx :
='我';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆爱DELPHI,但Delphi不爱◆!
FreeAndNil(reg);
end;
//如果不区分大小写,竟然也不区分中文字了
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='我爱DELPHI,但Delphi不爱我!
';
reg.RegEx :
='我';
reg.Replacement:
='◆';
reg.Options:
=[preCaseLess];//也设定不区分大小
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆◆DELPHI,◆Delphi◆◆◆!
FreeAndNil(reg);
end;
//我测试了不同的汉字,除了乱以外,没有规律;所有如果操作汉字暂时不要指定preCaseLess
Delphi正则表达式语法
(2):
或者与重复
//|号的使用,|是或者的意思
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='CodeGearDelphi2007';
reg.RegEx :
='e|Delphi|0';//使用了|记号
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
Cod◆G◆ar◆2◆◆7
FreeAndNil(reg);
end;
//+的使用,+是重复1个或多个
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='aaaaaaaaaaababbabbbaa呀a';
reg.RegEx :
='ab+';//使用了+记号,这里是允许a后面有1个或多个b
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
aaaaaaaaaa◆◆◆aa呀a
FreeAndNil(reg);
end;
//*的使用,*是重复0个或多个
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='aaaaaaaaaaababbabbbaa呀a';
reg.RegEx :
='ab*';//使用了*记号,这里是允许a后面有多个或者没有b
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆呀◆
FreeAndNil(reg);
end;
//?
的使用,?
是重复0个或1个
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='aaaaaaaaaaababbabbbaa呀a';
reg.RegEx :
='a?
';//使用了?
记号
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆◆◆◆◆◆◆◆◆◆◆b◆bb◆bbb◆◆呀◆
FreeAndNil(reg);
end;
//大括号的使用<1>,指定重复数
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='aaaaaaaaaaababbabbbaa呀a';
reg.RegEx :
='a{3}';//这里指定重复3次
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
aaa◆◆aababbabbbaa呀a
FreeAndNil(reg);
end;
//大括号的使用<2>
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='aaaaaaaaaaababbabbbaa呀a';
reg.RegEx :
='a{2,4}';//这里指定重复2-4次
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
a◆◆◆ababbabbbaa呀a
FreeAndNil(reg);
end;
//大括号的使用<3>
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='aaaaaaaaaaababbabbbaa呀a';
reg.RegEx :
='a{1,}';//n个或多个,这里是1个或多个
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆◆◆◆◆b◆bb◆bbb◆◆呀◆
FreeAndNil(reg);
end;
//上面这个{1,}和+是等效的;
//还有{0,1}与?
是等效的;
//{0,}和*是等效的
Delphi正则表达式语法(3):
匹配范围
//[A-Z]:
匹配所有大写字母
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='CodeGearDelphi2007forWin32';
reg.RegEx :
='[A-Z]';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆ode◆ear◆elphi2007for◆in32
FreeAndNil(reg);
end;
//[a-z]:
匹配所有小写字母
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='CodeGearDelphi2007forWin32';
reg.RegEx :
='[a-z]';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
C◆◆◆G◆◆◆D◆◆◆◆◆2007◆◆◆W◆◆32
FreeAndNil(reg);
end;
//[0-9]:
匹配所有数字
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='CodeGearDelphi2007forWin32';
reg.RegEx :
='[0-9]';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
CodeGearDelphi◆◆◆◆forWin◆◆
FreeAndNil(reg);
end;
//匹配几个范围
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='CodeGearDelphi2007forWin32';
reg.RegEx :
='[C-Do-p0-2]';//大写字母:
C-D;小写字母:
o-p;数字:
0-2
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆◆deGear◆el◆hi◆◆◆7f◆rWin3◆
FreeAndNil(reg);
end;
//匹配[]中的所有
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='CodeGearDelphi2007forWin32';
reg.RegEx :
='[Ci2]';//大写字母:
C;小写字母:
i;数字:
2
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆odeGearDelph◆◆007forW◆n3◆
FreeAndNil(reg);
end;
//^排除[]中的所有
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='CodeGearDelphi2007forWin32';
reg.RegEx :
='[^Ci0-2]';//这里排除了大写字母:
C;小写字母:
i;数字:
0-2
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
C◆◆◆◆◆◆◆◆◆◆◆◆◆i◆200◆◆◆◆◆◆◆i◆◆2
FreeAndNil(reg);
end;
Delphi正则表达式语法(4):
常用转义字符与.
//\d匹配所有数字,相当于[0-9]
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='期待Delphi2008forWin32!
';
reg.RegEx :
='\d';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
期待Delphi◆◆◆◆forWin◆◆!
FreeAndNil(reg);
end;
//\D匹配所有非数字,相当于[^0-9]
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='期待Delphi2008forWin32!
';
reg.RegEx :
='\D';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
◆◆◆◆◆◆◆◆◆◆◆2008◆◆◆◆◆◆◆◆32◆◆
FreeAndNil(reg);
end;
//\w匹配字母、数字与下划线_,相当于[A-Za-z0-9_]
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='期待Delphi2008forWin32!
';
reg.RegEx :
='\w';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
期待◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆!
FreeAndNil(reg);
end;
//\W匹配非字母、数字与下划线_,相当于[^A-Za-z0-9_]
var
reg:
TPerlRegEx;
begin
reg:
=TPerlRegEx.Create(nil);
reg.Subject:
='期待Delphi2008forWin32!
';
reg.RegEx :
='\W';
reg.Replacement:
='◆';
reg.ReplaceAll;
ShowMessage(reg.Subject);//返回:
期待◆◆◆◆◆◆◆◆◆◆