文档章节

RegularExpressions(5) RegularExpressions 成员(二) IRegex

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 577
阅读 2
收藏 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
深圳
程序员
私信 提问
Android Studio - 第四十二期 几个经常用到的字符串的截取

string str="123abc456"; int i=3; 1 取字符串的前i个字符 str=str.Substring(0,i); // or str=str.Remove(i,str.Length-i); 2 去掉字符串的前i个字符: str=str.Remove(0,i); // or str=str......

吴雨声
2017/07/19
0
0
正则表达式 捕获组语法

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

aiaa5505
2016/03/07
29
0
《.Ne框架程序设计》随记(2)

CLR直接打交道的并不是托管模块,而是程序集(assembly). 程序集是一个或多个托管模块,以及一些资源文件的逻辑组合。其次,程序集是组件复用以及实施安全策略,版本策略的最小单位。它可以...

嗯哼9925
2017/12/19
0
0
将JSON转成DataSet(DataTable)

将JSON转成DataSet(DataTable) - hy31337 原文 http://www.cnblogs.com/elves/p/3604499.html主题 JSON方法1: /// 方法2:...

vga
2016/08/31
29
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(11.9)hive操作基础知识

上一篇博客分享了hive的简介和初体验,本节博主将继续分享一些hive的操作的基础知识。 DDL操作 (1)创建表 #建表语法CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name ...

em_aaron
今天
4
0
OSChina 周四乱弹 —— 我家猫真会后空翻

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @我没有抓狂 :#今天听这个# 我艇牛逼,百听不厌,太好听辣 分享 Led Zeppelin 的歌曲《Stairway To Heaven》 《Stairway To Heaven》- Led Z...

小小编辑
今天
47
3
node调用dll

先安装python2.7 安装node-gyp cnpm install node-gyp -g 新建一个Electron-vue项目(案例用Electron-vue) vue init simulatedgreg/electron-vue my-project 安装electron-rebuild cnpm ins......

Chason-洪
今天
3
0
scala学习(一)

学习Spark之前需要学习Scala。 参考学习的书籍:快学Scala

柠檬果过
今天
3
0
通俗易懂解释网络工程中的技术,如STP,HSRP等

导读 在面试时,比如被问到HSRP的主备切换时间时多久,STP几个状态的停留时间,自己知道有这些东西,但在工作中不会经常用到,就老是记不住,觉得可能还是自己基础不够牢固,知识掌握不够全面...

问题终结者
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部