文档章节

RegularExpressions(5) RegularExpressions 成员(二) IRegex

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 577
阅读 2
收藏 0
点赞 0
评论 0

//IRegex 的属性与方法 
IRegex.GetGroupNames;         { 子表达式编号数组, 譬如有两个子表达式, 会得到 0,1,2; 这基本无用 }
IRegex.GetGroupNumbers;       { 同上, 只是获取的是整数数组 }
IRegex.GroupNameFromNumber(); { 应该是从子表达式编号获取子表达式的名称; 但没有实现, 来回都是编号 }
IRegex.GroupNumberFromName(); { 同上一个是反着的; 基本都无用 }
IRegex.IsMatch();             { 判断是否有所匹配; 如果只想知道是否匹配到, 用它应该最快 }
IRegex.Match();               { 获取一个 IMatch 对象, 这是第一个匹配结果 }
IRegex.Matches();             { 获取一个 IMatchCollection 对象; 这是匹配到的 IMatch 的集合 }
IRegex.Replace();             { 替换 }
IRegex.Split();               { 根据表达式分割字符串; 当前版本没有实现好, 暂时无用 }
IRegex.ToString;              { 获取表达式文本 }
IRegex.Save();                { 把表达式保存到流 }
IRegex.Load();                { 从流中取回由 Save 保存的表达式 }
IRegex.Options;               { 选项集合, 是只读的; 要设置只能从 Create 方法中 }
{这其中需要重新看看的只有 Replace}

//IRegex 是通过 TRegex 实现的, TRegex 还有下面几个静态类方法:
TRegex.Escape();    { 编码需要转义的字符 }
TRegex.Unescape();  { 还原 Escape 的编码 }
TRegex.IsMatch();   { 同 IRegex.IsMatch }
TRegex.Match();     { 同 IRegex.Match }
TRegex.Matches();   { 同 IRegex.Matches }
TRegex.Replace();   { 同 IRegex.Replace }
TRegex.Split();     { 同 IRegex.Split }
{ 使用这些个类方法会让代码更简单 }

 
 
 
 
 

 

 

  

下面是使用类方法简化程序的例子:
uses RegularExpressions;

procedure TForm1.FormCreate(Sender: TObject);
var
  Match: IMatch;
  MatchCollection: IMatchCollection;
  Pattern, Input, str: string;
begin
  Pattern := '([A-Za-z]+)(\d+)';
  Input := 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA';

  //
  Match := TRegex.Match(Input, Pattern);
  ShowMessage(Match.Value); { AAA1 }

  //
  MatchCollection := TRegex.Matches(Input, Pattern);
  ShowMessage(IntToStr(MatchCollection.Count)); { 4 }
  
  //
  str := TRegex.Replace(Input, Pattern, '◆');
  ShowMessage(str); { ◆ ◆ ◆ ◆ ◆ ◆ AAAA }
end;

 
 
 
 
 

 

 

  

Escape 与 Unescape 测试:
uses RegularExpressions;

procedure TForm1.FormCreate(Sender: TObject);
var
  str: string;
begin
  str := TRegex.Escape('.$^{[(|)*+?\');
  ShowMessage(str);  (* \.\$\^\{\[\(\|\)\*\+\?\\ *)
  str := TRegex.Unescape(str);
  ShowMessage(str);  (* .$^{[(|)*+?\ *)
end;

 
 
 
 
 

 

 

  

Replace 函数有很多重载, 如:
uses RegularExpressions;

procedure TForm1.FormCreate(Sender: TObject);
var
  Regex: IRegex;
  Match: IMatch;
  Pattern, Input, str: string;
begin
  Pattern := '([A-Za-z]+)(\d+)';
  Input := 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA';
  Regex := TRegex.Create(Pattern);

  { 替换全部 }
  str := Regex.Replace(Input, '◆'); 
  ShowMessage(str); { ◆ ◆ ◆ ◆ ◆ ◆ AAAA }

  { 只替换前两个匹配 }
  str := Regex.Replace(Input, '◆', 2);
  ShowMessage(str); { ◆ ◆ AA11 BB22 A111 B222 AAAA } 

  { 从第 10 个字符开始, 只替换两个匹配 }
  str := Regex.Replace(Input, '◆', 2, 10);
  ShowMessage(str); { AAA1 BBB2 ◆ ◆ A111 B222 AAAA } 
end;

 
 
 
 
 

 

 

  

Replace 函数中还应该有一个 TMatchEvaluator 事件参数, 它可以执行一些更高级的替换, 遗憾的是当前版本也没有实现.

尽管有不少东西还没实现, 但试用下来感觉还是蛮不错的, 可以放弃 PerlRegEx 了!

本文转载自:http://www.cnblogs.com/del/archive/2010/01/07/1641162.html

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

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

彭博
2012/03/09
71
0
winform联网查询

using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Windows.Forms; using System.Data.OleDb; using System.IO; using System.Net; usi......

宇不会停
2013/11/22
179
0
c#中分割字符串的几种方法

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

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

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

落幕残情
2014/08/29
265
2
c#判断输入文字是否是数字

c#判断输入文字是否是数字 方案一: /**//// /// 名称:IsNumberic /// 功能:判断输入的是否是数字 /// 参数:string oText:源文本 /// 返回值: bool true:是 false:否 /// public bool Is...

长平狐
2013/01/06
4.8K
0
c#中分割字符串的方法

c#中分割字符串的方法 ===================================================================== 转载声明:本文转自http://hi.baidu.com/ebook/blog/item/3c0cbe1cb67c898e86d6b63f.html =......

长平狐
2013/01/06
60
0
在ASP.NET中自动给URL地址加上超链接

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

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

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

aiaa5505
2016/03/07
29
0
C#优化字符串操作【月儿原创】

C#优化字符串操作 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.6.17 开发中可以说几乎随时会涉及到字符串处理,本人觉得很有必要把平时遇到的问题和大家一起讨论,如果...

晨曦之光
2012/03/09
48
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

前端基础

1. get请求传参长度的误区 误区:我们经常说get请求参数的大小存在限制,而post请求的参数大小是无限制的。 实际上HTTP 协议从未规定 GET/POST 的请求长度限制是多少。对get请求参数的限制是...

wenxingjun
今天
0
0
Android 复制和粘贴功能

做了一回搬运工,原文地址:https://blog.csdn.net/kennethyo/article/details/76602765 Android 复制和粘贴功能,需要调用系统服务ClipboardManager来实现。 ClipboardManager mClipboardM...

她叫我小渝
今天
0
0
拦截SQLSERVER的SSL加密通道替换传输过程中的用户名密码实现运维审计(一)

工作准备 •一台SQLSERVER 2005/SQLSERVER 2008服务 •SQLSERVER jdbc驱动程序 •Java开发环境eclipse + jdk1.8 •java反编译工具JD-Core 反编译JDBC分析SQLSERVER客户端与服务器通信原理 SQ...

紅顏為君笑
今天
6
0
jQuery零基础入门——(六)修改DOM结构

《jQuery零基础入门》系列博文是在廖雪峰老师的博文基础上,可能补充了个人的理解和日常遇到的点,用我的理解表述出来,主干出处来自廖雪峰老师的技术分享。 在《零基础入门JavaScript》的时...

JandenMa
今天
0
0
linux mint 1.9 qq 安装

转: https://www.jianshu.com/p/cdc3d03c144d 1. 下载 qq 轻聊版,可在百度搜索后下载 QQ7.9Light.exe 2. 去wine的官网(https://wiki.winehq.org/Ubuntu) 安装 wine . 提醒网页可以切换成中...

Canaan_
今天
0
0
PHP后台运行命令并管理运行程序

php后台运行命令并管理后台运行程序 class ProcessModel{ private $pid; private $command; private $resultToFile = ''; public function __construct($cl=false){......

colin_86
今天
1
0
数据结构与算法4

在此程序中,HighArray类中的find()方法用数据项的值作为参数传递,它的返回值决定是否找到此数据项。 insert()方法向数组下一个空位置放置一个新的数据项。一个名为nElems的字段跟踪记录着...

沉迷于编程的小菜菜
今天
1
1
fiddler安装和基本使用以及代理设置

项目需求 由于开发过程中客户端和服务器数据交互非常频繁,有时候服务端需要知道客户端调用接口传了哪些参数过来,这个时候就需要一个工具可以监听这些接口请求参数,已经接口的响应的数据,这种...

银装素裹
今天
0
0
Python分析《我不是药神》豆瓣评论

读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于 我不是药神 vs 达拉斯 的争论很热啊。关于词频统计就这些,代码中也会完成一些其它的分析任...

猫咪编程
今天
0
0
虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部