文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 455
阅读 12
收藏 0
点赞 0
评论 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
博文 2004
码字总数 14107
作品 0
深圳
程序员
正则表达式的初体验:分析字符串数据

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

彭博 ⋅ 2012/03/09 ⋅ 0

C#分割字符串的几种方法

单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab deab deab de 多个字符分割 ......

postdep ⋅ 2012/11/29 ⋅ 0

c#中分割字符串的几种方法

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

晨曦之光 ⋅ 2012/03/09 ⋅ 0

C#正则表达式

使用到的类 C#中使用正则表达式需要如下几个类(类所在的命名空间为:System.Text.RegularExpressions): Regex 编译后的表达式的实例 RegexOptions 提供用于设置正则表达式的枚举值 RegexC...

云颖 ⋅ 2013/12/14 ⋅ 1

正则表达式 捕获组语法

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

aiaa5505 ⋅ 2016/03/07 ⋅ 0

在ASP.NET中自动给URL地址加上超链接

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

晨曦之光 ⋅ 2012/03/09 ⋅ 0

最全的常用正则表达式

https://www.cnblogs.com/weishuanbao/p/5382516.html 一、校验数字的表达式数字:^[0-9]*$n位的数字:^d{n}$至少n位的数字:^d{n,}$m-n位的数字:^d{m,n}$零和非零开头的数字:^(0|[1-9][0...

ahl123 ⋅ 01/02 ⋅ 0

iOS中正则表达式的使用

正则表达式在iOS开发中的应用 正则表达式在字符串查找,替换,检测中的应用非常广泛,正则表达式是什么,有怎样的语法,我的另一篇博客中有详细的介绍:http://my.oschina.net/u/2340880/blo...

珲少 ⋅ 2015/04/19 ⋅ 1

正则表达式测试工具 Regex Tester 的使用方法

正则表达式测试工具“RegexTester”,下载地址:http://www.oschina.net/p/regex+tester 一、关于本文 今天的工作中遇到了一些正则表达式,我需要检验它们是否正确,不过我对自己目测的结果又...

北风其凉 ⋅ 2015/07/28 ⋅ 0

关于正则MatchCollection.Count属性严重影响执行效率问题

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

落幕残情 ⋅ 2014/08/29 ⋅ 2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

volatile和synchronized的区别

volatile和synchronized的区别 在讲这个之前需要先了解下JMM(Java memory Model :java内存模型):并发过程中如何处理可见性、原子性、有序性的问题--建立JMM模型 详情请看:https://baike.b...

MarinJ_Shao ⋅ 39分钟前 ⋅ 0

深入分析Kubernetes Critical Pod(一)

Author: xidianwangtao@gmail.com 摘要:大家在部署Kubernetes集群AddOn组件的时候,经常会看到Annotation scheduler.alpha.kubernetes.io/critical-pod"="",以表示这是一个关键服务,那你知...

WaltonWang ⋅ 47分钟前 ⋅ 0

原子性 - synchronized关键词

原子性概念 原子性提供了程序的互斥操作,同一时刻只能有一个线程能对某块代码进行操作。 原子性的实现方式 在jdk中,原子性的实现方式主要分为: synchronized:关键词,它依赖于JVM,保证了同...

dotleo ⋅ 53分钟前 ⋅ 0

【2018.06.22学习笔记】【linux高级知识 14.4-15.3】

14.4 exportfs命令 14.5 NFS客户端问题 15.1 FTP介绍 15.2/15.3 使用vsftpd搭建ftp

lgsxp ⋅ 今天 ⋅ 0

JeeSite 4.0 功能权限管理基础(Shiro)

Shiro是Apache的一个开源框架,是一个权限管理的框架,实现用户认证、用户授权等。 只要有用户参与一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户...

ThinkGem ⋅ 昨天 ⋅ 0

python f-string 字符串格式化

主要内容 从Python 3.6开始,f-string是格式化字符串的一种很好的新方法。与其他格式化方式相比,它们不仅更易读,更简洁,不易出错,而且速度更快! 在本文的最后,您将了解如何以及为什么今...

阿豪boy ⋅ 昨天 ⋅ 0

Python实现自动登录站点

如果我们想要实现自动登录,那么我们就需要能够驱动浏览器(比如谷歌浏览器)来实现操作,ChromeDriver 刚好能够帮助我们这一点(非谷歌浏览器的驱动有所不同)。 一、确认软件版本 首先我们...

blackfoxya ⋅ 昨天 ⋅ 0

线性回归原理和实现基本认识

一:介绍 定义:线性回归在假设特证满足线性关系,根据给定的训练数据训练一个模型,并用此模型进行预测。为了了解这个定义,我们先举个简单的例子;我们假设一个线性方程 Y=2x+1, x变量为商...

wangxuwei ⋅ 昨天 ⋅ 0

容器之查看minikue的environment——minikube的环境信息

执行如下命令 mjduan@mjduandeMacBook-Pro:~/Docker % minikube docker-envexport DOCKER_TLS_VERIFY="1"export DOCKER_HOST="tcp://192.168.99.100:2376"export DOCKER_CERT_PATH="/U......

汉斯-冯-拉特 ⋅ 昨天 ⋅ 0

mysql远程连接不上

设置了root所有hosts远程登录,可是远程登录还是失败,原因可能如下: 登录本地数据库 mysql -uroot -p123456 查询用户表 mysql> select user,host,password from mysql.user; 删除密码为空的...

冰公子 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部