目录
安装步骤: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 v] // S 匹配任何非空白, 相当于 [^f v] // x 匹配十六进制的 ASCII // . 匹配除换行符以外的任何字符 { f : 换页符 : 换行符 : 回车符 : 制表符(Tab) v : 垂直制表符 }
// 单词边界 reg.Subject := 'Delphi Delphi2007 MyDelphi'; reg.RegEx := 'Delphi'; //前后边界 reg.Replacement := '◆'; reg.ReplaceAll; //结果为“◆ Delphi2007 MyDelphi” reg.RegEx := 'Delphi'; //左边界 //结果为“◆ ◆2007 MyDelphi” reg.RegEx := 'Delphi'; //右边界 //结果为“◆ 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◆ // 也标记行尾 reg.RegEx := 'phi'; //匹配在行尾的 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: ]'; // 12 分别引用对应的子表达式; 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