文档章节

官方的正则表达式组件 RegularExpressions (1) : 基本应用

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 455
阅读 13
收藏 0

刚刚试了一下 DelphiXE 新增的正则表达式组件, 它基于 C 语言编写的 PCRE 库实现, 感觉设计的非常好。

其主要的 TRegEx 被设计为一个结构(而不是类), 可能是基于效率的考虑;不过它主要调用了 TPerlRegEx 类的功能。

TRegEx 的五个主要方法 IsMatch()、Match()、Matches()、Replace()、Split() 都有相应的 class 方法,
所以一般情况下根本不需要手动实例化对象,直接使用 class 方法就够了。

另:关于表达式语法可参加 Perl 5 的相关介绍。

uses RegularExpressions; //相关单元

const
  pattern = '[A-Z]+\d+';                      //测试用的表达式
  txt = 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA'; //测试用的目标文本

{是否匹配成功}
procedure TForm1.Button1Click(Sender: TObject);
begin
  if TRegEx.IsMatch(txt, pattern) then
  begin
    ShowMessage('有匹配到');
  end;
end;

{获取第一个匹配结果}
procedure TForm1.Button2Click(Sender: TObject);
var
  match: TMatch;
begin
  match := TRegEx.Match(txt, pattern);
  if match.Success then //或用一句话 if TRegEx.Match(txt, pattern).Success then
  begin
    ShowMessage(match.Value); //AAA1
  end;
end;

{获取所有匹配结果}
procedure TForm1.Button3Click(Sender: TObject);
var
  matchs: TMatchCollection;
  match: TMatch;
  i: Integer;
begin
  matchs := TRegEx.Matches(txt, pattern);

  Memo1.Clear;
  for match in matchs do
  begin
    Memo1.Lines.Add(match.Value);
  end;

  Memo1.Lines.Add('----------');
  for i := 0 to matchs.Count - 1 do
  begin
    Memo1.Lines.Add(matchs[i].Value);
  end;
end;

{使用 TMatch 对象的 NextMatch 遍历匹配结果时,需实例化对象}
procedure TForm1.Button4Click(Sender: TObject);
var
  reg: TRegEx;
  match: TMatch;
begin
  reg := TRegEx.Create(pattern);
  match := reg.Match(txt);

  Memo1.Clear;
  while match.Success do
  begin
    Memo1.Lines.Add(match.Value);
    match := match.NextMatch;
  end;
end;

{替换}
procedure TForm1.Button6Click(Sender: TObject);
begin
  Memo1.Text := TRegEx.Replace(txt, pattern, 'xxx'); //xxx xxx xxx xxx xxx xxx AAAA
end;

{分割}
procedure TForm1.Button7Click(Sender: TObject);
var
  rArr: TArray<string>;
  s: string;
begin
  rArr := TRegEx.Split('AAA,BBB;CCC,DDD EEE', '[,; ]');

  Memo1.Clear;
  for s in rArr do
  begin
    Memo1.Lines.Add(s); //AAA/BBB/CCC/DDD/EEE
  end;
end;

{TRegEx 还有一个 class 方法 Escape, 用于给特殊字符转义}
procedure TForm1.Button8Click(Sender: TObject);
begin
  Memo1.Text := TRegEx.Escape('\[]^$.|?*+(){}'); //: \\\[\]\^\$\.\|\?\*\+\(\)\{\}
end;

本文转载自:http://www.cnblogs.com/del/archive/2011/03/28/1998100.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
正则表达式的初体验:分析字符串数据

在程序中,对于数据的分析是非常重要及常见的。对于字符串数据的分析,往往就是对字符串的内容提取,捕获和替换。除非你要做的分析是简单的要求,否则你就不要再使用string的IndexOf、LastI...

彭博
2012/03/09
71
0
c#中分割字符串的几种方法

最近经常看到论坛中许多帖子询问如何使用split来分割字符串,我这里对split做一些简单的总结,希望能够对大家有所帮助。下面介绍几种方法: 第一种方法:打开vs.net新建一个控制台项目。然后...

晨曦之光
2012/03/09
18
0
正则表达式 捕获组语法

捕获组 语法: 字符 描述 示例 (pattern) 匹配pattern并捕获结果,自动设置组号。 (abc)+d 匹配abcd或者abcabcd (?<name>pattern) 或 (?'name'pattern) 匹配pattern并捕获结果,设置name为组...

aiaa5505
2016/03/07
29
0
在ASP.NET中自动给URL地址加上超链接

作为一个程序员,在完成设计后还要根据程序的情况以及用户的反映不断对程序进行改进,这样才能不断地完善自己的作品。我在制作完软件商务网 http://www.bizsofts.com 的论坛后,发现人们总喜...

晨曦之光
2012/03/09
75
0
关于正则MatchCollection.Count属性严重影响执行效率问题

我是做数据采集的 对HTML页面的数据分析一直使用正则表达式去解决 昨天突然发现一个很纠结的问题 MatchCollection.Count在解析不同页面后计算数量时 执行效率不一 甚至需要500毫秒以上 这种情...

落幕残情
2014/08/29
265
2

没有更多内容

加载失败,请刷新页面

加载更多

初识flask

文档 0.10.1版本 http://www.pythondoc.com/flask/index.html 1.0.2版本 https://dormousehole.readthedocs.io/en/latest/ 安装flask $ pip3 install flaskCollecting flask Downloading......

yimingkeji
昨天
1
0
Akka系统《sixteen》译

Actor是一个封装状态(state)和行为(behavior)的对象,它们只通过交换消息通信(放入收件人邮箱的邮件)。从某种意义上说,Actor是最严格的面向对象编程形式,但它更适合将他们视为人:在与Act...

woshixin
昨天
1
0
技术工坊|如何开发一款以太坊钱包(深圳)

【好消息!】HiBlock区块链技术工坊已经成功举办了26期,其中北京1期,西安1期,成都2期,上海22期。经常有社区的小伙伴问定期举办技术工坊的除了上海以外,其他城市有没有?现在区块链技术工...

HiBlock
昨天
1
0
Redis 梳理笔记

安装 安装gccyum install gcc-c++下载传输到服务器上解压tar -xzvf *.tar.gzcd redis-3.2.9编译make安装 make PREFIX=/usr/local/redis install将配置文件拷贝出来cp redis...

晨猫
昨天
0
0
聊聊storm TridentWindowManager的pendingTriggers

序 本文主要研究一下storm TridentWindowManager的pendingTriggers TridentBoltExecutor.finishBatch storm-core-1.2.2-sources.jar!/org/apache/storm/trident/topology/TridentBoltExecut......

go4it
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部