Delphi 正则表达式 与 TPerlRegEx.doc_第1页
Delphi 正则表达式 与 TPerlRegEx.doc_第2页
Delphi 正则表达式 与 TPerlRegEx.doc_第3页
Delphi 正则表达式 与 TPerlRegEx.doc_第4页
Delphi 正则表达式 与 TPerlRegEx.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

在 Delphi 中使用正则表达式, 目前 PerlRegEx 应该是首选 直接下载: /download/TPerlRegEx.zip安装方法:1、先把解压的 TPerlRegEx 里面的文件和PCRE里面的文件统统放在 Delphi 的 Lib 目录中.2、然后再Delphi中 Component-Install component-在unit file name中找到PerRegEx.pas(package file name就按照默认的dclusr.dpk即可)安装。再用同样的方法安装pcre.pas. OK!安装完毕,在组件条最后已经出现了JGSoft按钮,安装成功。( you can create a new package or add the component to an existing package. Simply add the files PerlRegEx.pas and pcre.pas to the package.)计划的学习步骤: 1、正则语法; 2、TPerlRegEx 功能. /准备用这段简单的代码测试语法:usesPerlRegEx; /uses 正则表达式单元procedure TForm1.FormCreate(Sender: TObject);varreg: TPerlRegEx; /声明正则表达式变量beginreg := TPerlRegEx.Create(nil); /建立reg.Subject := sSsS; /这是要替换的源字符串reg.RegEx := s; /这是表达式, 在这里是准备替换掉的子串reg.Replacement := ; /要替换成的新串reg.ReplaceAll; /执行全部替换ShowMessage(reg.Subject); /返回替换结果: SSFreeAndNil(reg); /因为建立时属主给了 nil, 这里没有使用 reg.Freeend;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 := CodeGear Delphi 2007; reg.RegEx := e|Delphi|0; /使用了 | 记号 reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: CodGar 27 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 := a3; /这里指定重复 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 := a2,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 := a1,; /n 个或多个, 这里是 1 个或多个 reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: b bb bbb 呀 FreeAndNil(reg); end; /上面这个 1, 和 + 是等效的; /还有 0,1 与 ? 是等效的; /0, 和 * 是等效的 Delphi 正则表达式语法(3): 匹配范围/ A-Z: 匹配所有大写字母varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := CodeGear Delphi 2007 for Win32;reg.RegEx := A-Z;reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: odeear elphi 2007 for in32FreeAndNil(reg);end;/ a-z: 匹配所有小写字母varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := CodeGear Delphi 2007 for Win32;reg.RegEx := a-z;reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: CG D 2007 W32FreeAndNil(reg);end;/ 0-9: 匹配所有数字varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := CodeGear Delphi 2007 for Win32;reg.RegEx := 0-9;reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: CodeGear Delphi for WinFreeAndNil(reg);end;/匹配几个范围varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := CodeGear Delphi 2007 for Win32;reg.RegEx := C-Do-p0-2; /大写字母: C-D; 小写字母: o-p; 数字: 0-2reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: deGear elhi 7 fr Win3FreeAndNil(reg);end;/匹配 中的所有varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := CodeGear Delphi 2007 for Win32;reg.RegEx := Ci2; /大写字母: C; 小写字母: i; 数字: 2reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: odeGear Delph 007 for Wn3FreeAndNil(reg);end;/ 排除 中的所有varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := CodeGear Delphi 2007 for Win32;reg.RegEx := Ci0-2; /这里排除了大写字母: C; 小写字母: i; 数字: 0-2reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: Ci200i2FreeAndNil(reg);end; Delphi 正则表达式语法(4): 常用转义字符与 . / d 匹配所有数字, 相当于 0-9 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 期待Delphi 2008 for Win32!; reg.RegEx := d; reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: 期待Delphi for Win! FreeAndNil(reg); end; / D 匹配所有非数字, 相当于 0-9 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 期待Delphi 2008 for Win32!; reg.RegEx := D; reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: 200832 FreeAndNil(reg); end; / w 匹配字母、数字与下划线_, 相当于 A-Za-z0-9_ var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 期待Delphi 2008 for Win32!; 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 := 期待Delphi 2008 for Win32!; reg.RegEx := W; reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: 期待 ! FreeAndNil(reg); end; / s 匹配任何空白, 包括空格、制表、换页等, 相当于 fnrtv var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 期待Delphi 2008 for Win32!; reg.RegEx := s; reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: 期待Delphi2008forWin32! FreeAndNil(reg); end; f : 换页符 n : 换行符 r : 回车符 t : 制表符(Tab) v : 垂直制表符 / S 匹配任何非空白, 相当于 fnrtv var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 期待Delphi 2008 for Win32!; reg.RegEx := S; reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: FreeAndNil(reg); end; / x 匹配十六进制的 ASCII var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := CodeGear Delphi; reg.RegEx := x61; / a 的 ASCII 值是 97, 也就是十六进制的 61 reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); /返回: CodeGer Delphi FreeAndNil(reg); end; /非常遗憾 TPerlRegEx 不能使用 u 或 U 匹配 Unicode 字符! / . 匹配除换行符以外的任何字符 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 期待 + #10 + Delphi 2008 for Win32!; /#10是换行符 reg.RegEx := .; reg.Replacement := ; reg.ReplaceAll; ShowMessage(reg.Subject); 返回: FreeAndNil(reg); end;Delphi 正则表达式语法(5): 边界/ b 单词边界varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := Delphi Delphi2007 MyDelphi;reg.RegEx := bDelphib; /前后边界reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: Delphi2007 MyDelphiFreeAndNil(reg);end;/ b 单词边界: 左边界varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := Delphi Delphi2007 MyDelphi;reg.RegEx := bDelphi; /左边界reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: 2007 MyDelphiFreeAndNil(reg);end;/ b 单词边界: 右边界varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := Delphi Delphi2007 MyDelphi;reg.RegEx := Delphib; /右边界reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: Delphi2007 MyFreeAndNil(reg);end;/ B 非单词边界varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := Delphi MyDelphi2007 MyDelphi;reg.RegEx := BDelphiB; /现在只有 MyDelphi2007 中的 Delphi 属于非单词边界reg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: Delphi My2007 MyDelphiFreeAndNil(reg);end;/ 行首varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := Delphi Delphi2007 MyDelphi;reg.RegEx := Del; /匹配在行首的 Delreg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: phi Delphi2007 MyDelphiFreeAndNil(reg);end;/ A 也标记行首varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := Delphi Delphi2007 MyDelphi;reg.RegEx := ADel; /匹配在行首的 Delreg.Replacement := ;reg.ReplaceAll;ShowMessage(reg.Subject); /返回: phi Delphi2007 MyDelphiFreeAndNil(reg);end;/ $ 行尾varreg: TPerlRegEx;beginreg := TPerlRegEx.Create(nil);reg.Subject := Delphi Delphi2007 MyDelphi;reg.RegEx := phi$; /匹配在行尾的 phireg.Replacement := ;reg.Replace

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论