Delphi 正则表达式语法(2): 或者与重复

来源:互联网 发布:用手机注册淘宝店铺 编辑:程序博客网 时间:2024/06/05 22:35

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); //返回: 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,} 和 * 是等效的


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 正则表达式起步


在 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.Freeend;

分类: Delphi编程标签:

JScript 正则表达式语法表

2007年12月21日解未知数没有评论

字符

描述

\\标记下一个字符是特殊字符或文字。例如,"n"
和字符 "n" 匹配。"\\n"
则和换行字符匹配。序列 "\\\\" 和 "\\"
匹配,而 "\\(" 则和 "(" 匹配。^匹配输入的开头。$匹配输入的末尾。*匹配前一个字符零或多次。例如,"zo*"
与 "z" 或 "zoo" 匹配。+匹配前一个字符一次或多次。例如,"zo+"
与 "zoo" 匹配,但和 "z" 不匹配。?匹配前一个字符零或一次。例如,"a?ve?"
和 "never" 中的 "ve" 匹配。.匹配除换行字符外的任何单个字符。(pattern)匹配 pattern
并记住该匹配。匹配上的子字符串,可以使用 Item [0]...[n],来从生成的
Matches 集合中取回。要匹配圆括号字符 ( ),则需使用
"\\(" 或 "\\)"。x|y匹配 x
y。例如,"z|food" 和 "z" 或 "food"
匹配。"(z|f)ood" 匹配 "zoo" 或
"food"。{n}n 是非负整数。共匹配 n
次。例如,"o{2}" 和 "Bob" 中的
"o" 不匹配,但和 "foooood" 中的前两个 o
匹配。{n,}n 是一个非负整数。至少匹配 n
次。例如,"o{2,}" 和 "Bob" 中的
"o" 不匹配,但和 "foooood" 中的所有 o
匹配。"o{1,}" 与 "o+" 等效。"o{0,}"
和 "o*" 等效。{n,m}m 和 n 是非负整数。至少匹配 n
次而至多匹配 m 次。例如,"o{1,3}" 和
"fooooood" 中的前三个 o 匹配。"o{0,1}" 和
"o?" 等效。[
xyz]字符集合。匹配括号内的任一字符。例如,"[abc]"
和 "plain" 中的 "a" 匹配。[^xyz
]否定字符集合。匹配非括号内的任何字符。例如,"[^abc]"
和 "plain" 中的 "p" 匹配。[a-z]字符范围。和指定范围内的任一字符匹配。例如,"[a-z]"
匹配 "a" 到 "z"范围内的任一小写的字母表字符。[^m-z]否定字符范围。匹配不在指定范围内的任何字符。例如,"[m-z]"
匹配不在 "m" 到 "z"范围内的任何字符。\\b匹配字的边界,也就是说,在字和空格之间的位置。例如,"er\\b"
和 "never" 中的 "er" 匹配,但和
"verb" 中的 "er" 不匹配。\\B匹配非字边界。"ea*r\\B"
和 "never early" 中的 "ear" 匹配。\\d匹配数字字符。等价于 [0-9]。\\D匹配非数字字符。等价于 [^0-9]。\\f匹配换页字符。\\n匹配换行字符。\\r匹配回车符字符。\\s匹配任何空白,包括空格、制表、换页等。与
"[ \\f\\n\\r\\t\\v]" 等效。\\S匹配任何非空白字符。与 "[^ \\f\\n\\r\\t\\v]"
等效。\\t匹配制表字符。\\v匹配垂直制表符。\\w匹配包括下划线在内的任何字字符。与
"[A-Za-z0-9_]" 等效。\\W匹配任何非字字符。与
"[^A-Za-z0-9_]" 等效。\\num匹配 num,其中 num
是一个正整数。返回记住的匹配的引用。例如,"(.)\\1"
匹配两个连续的同一字符。\\n匹配 n,其中 n
是八进制换码值。八进制换码值必须是 1、2、或 3
位长。例如,"\\11" 和 "\11"
都匹配制表字符。"\011" 和 "\01" &
"1" 是等效的。八进制换码值必须不超过 256。如果超过了,则只有前两位组成表达式。允许在正则表达式中使用
ASCII 码。\\xn匹配 n,其中 n
是十六进制换码值。十六进制换码值必须正好是两位长。例如,"\\x41"
与 "A" 匹配。"\\x041" 和 "\\x04"
& "1" 是等效的。允许在正则表达式中使用
ASCII 码。