// | 号的使用, | 是或者的意思
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := \'CodeGear Delphi 2007\';
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 := \'a aa aaa aaaa ab abb abbba a呀a\';
reg.RegEx := \'ab+\'; //使用了 + 记号, 这里是允许 a 后面有 1 个或多个 b
reg.Replacement := \'◆\';
reg.ReplaceAll;
ShowMessage(reg.Subject); //返回: a aa aaa aaaa ◆ ◆ ◆a a呀a
FreeAndNil(reg);
end;
// * 的使用, * 是重复 0 个或多个
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := \'a aa aaa aaaa ab abb abbba a呀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 := \'a aa aaa aaaa ab abb abbba a呀a\';
reg.RegEx := \'a?\'; //使用了 ? 记号
reg.Replacement := \'◆\';
reg.ReplaceAll;
ShowMessage(reg.Subject); //返回: ◆ ◆◆ ◆◆◆ ◆◆◆◆ ◆b ◆bb ◆bbb◆ ◆呀◆
FreeAndNil(reg);
end;
//大括号的使用, 指定重复数
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := \'a aa aaa aaaa ab abb abbba a呀a\';
reg.RegEx := \'a{3}\'; //这里指定重复 3 次
reg.Replacement := \'◆\';
reg.ReplaceAll;
ShowMessage(reg.Subject); //返回: a aa ◆ ◆a ab abb abbba a呀a
FreeAndNil(reg);
end;
//大括号的使用
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := \'a aa aaa aaaa ab abb abbba a呀a\';
reg.RegEx := \'a{2,4}\'; //这里指定重复 2-4 次
reg.Replacement := \'◆\';
reg.ReplaceAll;
ShowMessage(reg.Subject); //返回: a ◆ ◆ ◆ ab abb abbba a呀a
FreeAndNil(reg);
end;
//大括号的使用
var
reg: TPerlRegEx;
begin
reg := TPerlRegEx.Create(nil);
reg.Subject := \'a aa aaa aaaa ab abb abbba a呀a\';
reg.RegEx := \'a{1,}\'; //n 个或多个, 这里是 1 个或多个
reg.Replacement := \'◆\';
reg.ReplaceAll;
ShowMessage(reg.Subject); //返回: ◆ ◆ ◆ ◆ ◆b ◆bb ◆bbb◆ ◆呀◆
FreeAndNil(reg);
end;
//上面这个 {1,} 和 + 是等效的;
//还有 {0,1} 与 ? 是等效的;
//{0,} 和 * 是等效的
//替换一般字符串
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 中使用正则表达式, 目前 PerlRegEx 应该是首选, 准备彻底而细致地研究它.
官方网站: http://www.regular-expressions.info/delphi.html
直接下载: http://www.regular-expressions.info/download/TPerlRegEx.zip
安装方法:
1、先把解压的 TPerlRegEx 文件夹放一个合适的地方, 我放在了 Delphi 的 Imports 目录中.
2、目前最新 For Win32 的版本是对 Delphi 2006 的, 2007 也能用.
打开 PerlRegExD2006.dpk, 提示缺少资源文件, 没关系;
在 Project Manager 窗口中的 PerlRegExD2006.bpl 上点击右键, 执行 Install;
这时在 Tool Palette 的列表中已经有了 TPerlRegEx, 在 JGsoft 组.
3、Tools -> Options -> Environment Options -> Delphi Options -> Library-Win32 -> Library path ->
添加路径: ...\\Imports\\TPerlRegEx
4、可以使用了! 直接 uses PerlRegEx 或从 Tool Palette 添加都可以.
如果不喜欢 Tool Palette 的添加方式可以省略第二步.
计划的学习步骤: 1、正则语法; 2、TPerlRegEx 功能.
//先测试一下:
uses
PerlRegEx; //uses 正则表达式单元
procedure TForm1.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); //或 reg.Free
end;