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

Delphi正则表达式Delphi正则表达式起步

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

目录

  1. 基本用法
  2. 转义字符
  3. 边界
  4. 临界匹配
  5. 匹配模式选项

 

安装步骤:Delphi 正则表达式起步

基本用法:

with reg do 
begin
  Subject:= str; //要进行操作的字符串        
  RegEx  := str1; //要被替换的子字符串
  Replacement := str2; //被替换成的字符串
     // (str1=>str2)
  ReplaceAll;//执行替换
     str:= Subject; //取回替换后的字符串。
end
//属性:preCaseLess 不区分大小写
reg.Options := [preCaseLess];

注意:不区分大小写后,中文替换会出现错误(中文也不区分了……)

//|:或者
reg.RegEx   := 'e|Delphi|0'; //将e、Delphi、0替换成想要的字符串

//+:重复一个或多个
reg.RegEx   := 'ab+'; //将ab、abb、abbb等替换,最大替换原则

//*:重复0个或多个
reg.RegEx   := 'ab*'; //将a、ab、abb、abbb等替换,最大替换原则

//?重复 0 个或 1 个
reg.RegEx   := 'ab?'; //将a、ab替换,ab优先。

//{}大括号
//{num}:指定重复num次
//{num1, num2}:重复num1~num2次
//{num,}:重复num次或以上
//[ ]匹配范围,将与方括号中想匹配的“字符”匹配
//可以是:[a-z]、[A-Z]、[0-9]、[fajdl;gkhalu]
//[^ ]不匹配范围,与匹配相反

注意:[ ]只用来匹配单个字符

转义字符

//转义字符

// \d 匹配所有数字, 相当于 [0-9]
// \D 匹配所有非数字, 相当于 [^0-9]

// \w 匹配字母、数字与下划线_, 相当于 [A-Za-z0-9_]
// \W 匹配非字母、数字与下划线_, 相当于 [^A-Za-z0-9_]

// \s 匹配任何空白, 包括空格、制表、换页等, 相当于 [\f\n\r\t\v]
// \S 匹配任何非空白, 相当于 [^\f\n\r\t\v]

// \x 匹配十六进制的 ASCII
// . 匹配除换行符以外的任何字符

{
  \f : 换页符
  \n : 换行符
  \r : 回车符
  \t : 制表符(Tab)
  \v : 垂直制表符
}

 边界:

// \b 单词边界
  reg.Subject := 'Delphi Delphi2007 MyDelphi'; 
  reg.RegEx   := '\bDelphi\b'; //前后边界
  reg.Replacement := '';
  reg.ReplaceAll;
//结果为“◆ Delphi2007 MyDelphi”


  reg.RegEx   := '\bDelphi'; //左边界
//结果为“◆ ◆2007 MyDelphi”

reg.RegEx   := 'Delphi\b'; //右边界
//结果为“◆ Delphi2007 My◆”


// \B 非单词边界

// ^ 行首
  reg.RegEx   := '^Del'; //匹配在行首的 Del
//返回: ◆phi Delphi2007 MyDelphi

// \A 也标记行首
  reg.RegEx   := '\ADel'; //匹配在行首的 Del
//返回: ◆phi Delphi2007 MyDelphi


// $ 行尾
  reg.RegEx   := 'phi$'; //匹配在行尾的 phi
//返回: Delphi Delphi2007 MyDel◆

// \Z 也标记行尾
  reg.RegEx   := 'phi\Z'; //匹配在行尾的 phi
//返回: Delphi Delphi2007 MyDel◆
//正规表达式一般默认为贪婪匹配
//默认规则1.从最左边开始匹配
//默认规则2.在符合要求的情况下尽量匹配到最右边(符合1的前提下匹配最长的串)

  reg.Subject := '<html><head><title>标题</title></head><body>内容</body></html>';
  reg.RegEx   := '<.*>'; //将会全部匹配, 因为两头分别是: < 和 >
  reg.Replacement := '';
//贪婪匹配,结果为“◆”

  reg.Subject := '<html><head><title>标题</title></head><body>内容</body></html>';
  reg.RegEx   := '<.*?>'; // *? 是非贪婪匹配方法之一, 将匹配每组 <>
  reg.Replacement := '';
//非贪婪匹配,结果为“◆◆◆标题◆◆◆内容◆◆”

//区别是加了个问号。

 引用子表达式

//1. 子表达式要用“( )”括起
//2. 从左到右依次为\1、\2、\3……按左括号排序,包括嵌套的字表达式
//3. \0 表示整个表达式

  reg.Subject := 'one two three ten';
  reg.RegEx   := '(t)(\w+)';
  reg.Replacement := '[\1-\2:\0]'; // \1\2 分别引用对应的子表达式; \0 引用整个表达式
//结果: one [t-wo:two] [t-hree:three] [t-en:ten]

临界匹配

//(?=xxx) 匹配到xxx之前的位置
//(?<=xxx)匹配到xxx之后的位置
//把上面的“=”改为“!”,不匹配原来得到的结果

  reg.Subject := 'Delphi 6; Delphi 7; Delphi 2007; Delphi Net';
  reg.RegEx   := 'Delphi (?=2007)'; // ?=
  reg.Replacement := '';
 //结果: Delphi 6; Delphi 7; ◆2007; Delphi Net


  reg.Subject := '111, 222, ¥333, ¥444';
  reg.RegEx   := '(?<=¥)\d{3}'; // ?<=
  reg.Replacement := '';
  reg.ReplaceAll;
//结果: 111, 222, ¥◆, ¥◆

  reg.Subject := '111, 222, ¥333, ¥444';
  reg.RegEx   := '(?<!¥)\d{3}'; // ?<!
  reg.Replacement := '';
//结果: ◆, ◆, ¥333, ¥444

匹配的选项

// preCaseLess: 不区分大小写, 相当于其他语言中的 i
// preAnchored: 只匹配字符串开始, 相当于 ^, 不过还是有区别的
// preDollarEndOnly: 让 $ 只匹配字符串结尾
// preMultiLine: 多行匹配, 相当于其他语言中的 m
// preSingleLine: 让特殊符号 . 能够匹配换行符 (. 的本意是匹配换行符以外的任意字符)
// preUnGreedy: 指定为非贪婪模式
// preExtended: 指定为扩展模式

//抄自:万一的博客http://www.cnblogs.com/del/archive/2007/12/21/1009363.html

 


鲜花

握手

雷人

路过

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

请发表评论

全部评论

专题导读
上一篇:
利用Delphi编写Socket通信程序发布时间:2022-07-18
下一篇:
TMsgThread,TCommThread--在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