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

本文介绍Delphi中使用PerlRegEx组件进行正则表达式的应用实例,涵盖各种重复模式匹配与替换技巧,以及如何处理大小写敏感性和中文字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.Free
end;

分类: 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 码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值