文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 455
阅读 42
收藏 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;

涂孟超
粉丝 13
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
beego API开发以及自动化文档

beego API开发以及自动化文档 beego1.3版本已经在上个星期发布了,但是还是有很多人不了解如何来进行开发,也是在一步一步的测试中开发,期间QQ群里面很多人都问我如何开发,我的业余时间实在...

astaxie
2014/06/25
2.7W
21
极速博客引擎--Gor

gor 是使用 golang 实现的类Ruhoh静态博客引擎(Ruhoh like),基本兼容ruhoh 1.x规范. 相当于与ruhoh的官方实现(ruby实现), 有以下优点: 速度完胜 -- 编译wendal.net近200篇博客,仅需要1秒 安装...

wendal
2013/01/20
3.8K
0
Web开发组件管理器--Bower

Bower 是一个针对Web开发的包管理器。该工具主要用来帮助用户轻松安装CSS、JavaScript、图像等相关包,并管理这些包之间的依赖。 功能有些类似于Component。不同之处是,Component是围绕Git...

匿名
2013/02/01
1.2W
2

没有更多内容

加载失败,请刷新页面

加载更多

Python安装第三方库太慢??

今天在升级下载Python第三方库的时候特别慢,最后去升级pip的时候竟然还time out了,哇心态炸了。 问题想清楚了该怎么解决呢? 咱们可以用国内的镜像源啊,于是我在网上搜了一下国内的镜像源...

不卖萌的邓肯
今天
0
0
C语言与C++常见面试题

本篇根据各个公司的面试问的常见问题进行总结。 公众号回复“面试”,获取pdf答案 1 变量的声明和定义有什么区别 2 简述 #ifdef、#else、#endif和 #ifndef的作用 3 写出 int 、bool、 float、...

公众号C语言与CPP编程
今天
0
0
自定义CheckBox快速实现开发

在开发CheckBox过程中,经常感觉功能很简单,就是写了半天代码,尤其是设置监听和判断上,万一有10个以上的CheckBox,还会在复制时由于不小心,出现bug 天啦,这么简单常用的控件出BUG,简直没...

osc_gzy9w31p
15分钟前
0
0
写给小白看的线程和进程,高手勿入

计算机的核心是CPU,它承担了计算机的所有计算任务,CPU就像一个工厂,时刻在运行着,而操作系统管理着计算机,负责任务的调度、资源的分配和管理。 进程和线程都是计算机操作系统中的基本概...

hzjjames
今天
0
0
分布式锁,redisson是如何解决死锁问题

点击上方“小罗技术笔记”,关注公众号 第一时间送达实用干货 作者:雨点的名字 来源:http://suo.im/6748UQ 使用redis做分布式锁时大家可能都知道使用setnx容易发生死锁情况,大多数都会推荐...

javaNode
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部