1. // | 号的使用, | 是或者的意思
  2. var
  3.   reg: TPerlRegEx;
  4. begin
  5.   reg := TPerlRegEx.Create(nil);
  6.  
  7.   reg.Subject := 'CodeGear Delphi 2007';
  8.   reg.RegEx  := 'e|Delphi|0'; //使用了 | 记号
  9.   reg.Replacement := '◆';
  10.   reg.ReplaceAll;
  11.  
  12.   ShowMessage(reg.Subject); //返回: Cod◆G◆ar ◆ 2◆◆7
  13.  
  14.   FreeAndNil(reg);
  15. end;

  1. // + 的使用, + 是重复 1 个或多个
  2. var
  3.   reg: TPerlRegEx;
  4. begin
  5.   reg := TPerlRegEx.Create(nil);
  6.  
  7.   reg.Subject := 'a aa aaa aaaa ab abb abbba a呀a';
  8.   reg.RegEx  := 'ab+'; //使用了 + 记号, 这里是允许 a 后面有 1 个或多个 b
  9.   reg.Replacement := '◆';
  10.   reg.ReplaceAll;
  11.  
  12.   ShowMessage(reg.Subject); //返回: a aa aaa aaaa ◆ ◆ ◆a a呀a
  13.  
  14.   FreeAndNil(reg);
  15. end;

  1. // * 的使用, * 是重复 0 个或多个
  2. var
  3.   reg: TPerlRegEx;
  4. begin
  5.   reg := TPerlRegEx.Create(nil);
  6.  
  7.   reg.Subject := 'a aa aaa aaaa ab abb abbba a呀a';
  8.   reg.RegEx  := 'ab*'; //使用了 * 记号, 这里是允许 a 后面有多个或者没有 b
  9.   reg.Replacement := '◆';
  10.   reg.ReplaceAll;
  11.  
  12.   ShowMessage(reg.Subject); //返回: ◆ ◆◆ ◆◆◆ ◆◆◆◆ ◆ ◆ ◆◆ ◆呀◆
  13.  
  14.   FreeAndNil(reg);
  15. end;

  1. // ? 的使用, ? 是重复 0 个或 1 个
  2. var
  3.   reg: TPerlRegEx;
  4. begin
  5.   reg := TPerlRegEx.Create(nil);
  6.  
  7.   reg.Subject := 'a aa aaa aaaa ab abb abbba a呀a';
  8.   reg.RegEx  := 'a?'; //使用了 ? 记号
  9.   reg.Replacement := '◆';
  10.   reg.ReplaceAll;
  11.  
  12.   ShowMessage(reg.Subject); //返回: ◆ ◆◆ ◆◆◆ ◆◆◆◆ ◆b ◆bb ◆bbb◆ ◆呀◆
  13.  
  14.   FreeAndNil(reg);
  15. end;

  1. //大括号的使用<1>, 指定重复数
  2. var
  3.   reg: TPerlRegEx;
  4. begin
  5.   reg := TPerlRegEx.Create(nil);
  6.  
  7.   reg.Subject := 'a aa aaa aaaa ab abb abbba a呀a';
  8.   reg.RegEx  := 'a{3}'; //这里指定重复 3 次
  9.   reg.Replacement := '◆';
  10.   reg.ReplaceAll;
  11.  
  12.   ShowMessage(reg.Subject); //返回: a aa ◆ ◆a ab abb abbba a呀a
  13.  
  14.   FreeAndNil(reg);
  15. end;

  1. //大括号的使用<2>
  2. var
  3.   reg: TPerlRegEx;
  4. begin
  5.   reg := TPerlRegEx.Create(nil);
  6.  
  7.   reg.Subject := 'a aa aaa aaaa ab abb abbba a呀a';
  8.   reg.RegEx  := 'a{2,4}'; //这里指定重复 2-4 次
  9.   reg.Replacement := '◆';
  10.   reg.ReplaceAll;
  11.  
  12.   ShowMessage(reg.Subject); //返回: a ◆ ◆ ◆ ab abb abbba a呀a
  13.  
  14.   FreeAndNil(reg);
  15. end;

  1. //大括号的使用<3>
  2. var
  3.   reg: TPerlRegEx;
  4. begin
  5.   reg := TPerlRegEx.Create(nil);
  6.  
  7.   reg.Subject := 'a aa aaa aaaa ab abb abbba a呀a';
  8.   reg.RegEx  := 'a{1,}'; //n 个或多个, 这里是 1 个或多个
  9.   reg.Replacement := '◆';
  10.   reg.ReplaceAll;
  11.  
  12.   ShowMessage(reg.Subject); //返回: ◆ ◆ ◆ ◆ ◆b ◆bb ◆bbb◆ ◆呀◆
  13.  
  14.   FreeAndNil(reg);
  15. end;
  16.  
  17. //上面这个 {1,} 和 + 是等效的;
  18. //还有 {0,1} 与 ? 是等效的;
  19. //{0,} 和 * 是等效的

Delphi 正则表达式语法(2): 或者与重复的更多相关文章

  1. Delphi 正则表达式语法(10): 选项

    Delphi 正则表达式语法(10): 选项 // preCaseLess: 不区分大小写, 相当于其他语言中的 i var   reg: TPerlRegEx; begin   reg := TPe ...

  2. Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索"

    Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 var   reg: TPerlRegEx; begin   ...

  3. Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用

    Delphi 正则表达式语法(8): 引用子表达式 - 也叫反向引用 //准备: 我们先写一个搜索所有英文单词的表达式 var   reg: TPerlRegEx; begin   reg := TP ...

  4. Delphi 正则表达式语法(7): 匹配转义字符

    Delphi 正则表达式语法(7): 匹配转义字符 // ? 号的意义是匹配 0-1 次, 如果需要匹配 ? 怎么办 var   reg: TPerlRegEx; begin   reg := TPe ...

  5. Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配

    Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配 //贪婪匹配 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   ...

  6. Delphi 正则表达式语法(5): 边界

    Delphi 正则表达式语法(5): 边界 // \b 单词边界 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg ...

  7. Delphi 正则表达式语法(4): 常用转义字符与 .

    Delphi 正则表达式语法(4): 常用转义字符与 . // \d 匹配所有数字, 相当于 [0-9] var   reg: TPerlRegEx; begin   reg := TPerlRegE ...

  8. Delphi 正则表达式语法(3): 匹配范围

    Delphi 正则表达式语法(3): 匹配范围 // [A-Z]: 匹配所有大写字母 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(n ...

  9. Delphi 正则表达式语法(1): 关于大小写与中文

    Delphi 正则表达式语法(1): 关于大小写与中文 //替换一般字符串 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil); ...

随机推荐

  1. TCP超时重传、滑动窗口、拥塞控制、快重传和快恢复

    TCP超时重传 原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止. 影响超时重传机制协议效率的一个关键参数是重传超时时 ...

  2. Storm实战

    需求: spout输出一些手机品牌小写名称,第一个bolt将手机名称转成大写,第二个bolt在手机名称的后面再追加上时间. 项目目录: 导入相关的jar包. RandomWordSpout.java: ...

  3. pl/sql 实例精解 06

    1. 简单循环 1: LOOP 2: statement1; 3: statement2; 4: EXIT WHEN condition; 5: END LOOP; 6: statement3; 也可 ...

  4. Oracle 计算两个时间的差值

    有两个日期数据START_DATE,END_DATE,欲得到这两个日期的时间差(以天,小时,分钟,秒,毫秒):天:ROUND(TO_NUMBER(END_DATE - START_DATE))小时:R ...

  5. 第二百四十一节,Bootstrap进度条媒体对象和 Well 组件

    第二百四十一节,Bootstrap进度条媒体对象和 Well 组件 学习要点: 1.Well 组件 2.进度条组件 3.媒体对象组件 本节课我们主要学习一下 Bootstrap 的三个组件功能:Wel ...

  6. Disillusioning #1 水题+原题赛(被虐瞎)

    https://vijos.org/tests/542c04dc17f3ca2064fe7718 好一场 水题 比赛啊 t1直接上暴力费用流10分QAQ,虽然一开始我觉得可以不用的,直接dfs可以得出 ...

  7. 关于CoInitialize和CoUninitialize调用的有关问题

    本人封装了一个类,里面需要用到ADO连接数据库, 所以需要初始化COM环境以及释放COM环境, 我打算在构造函数里面执行CoInitialize,在析构函数里面执行CoUninitialize 但是程 ...

  8. 69、ViewPagerIndicator+ViewPager实现Tab

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  9. github删除已经push到服务器上的commit的方法

    使用两条指令: git reset --hard <commit_id> git push origin HEAD --force 其中commit_id是你想回到的commit的id(即 ...

  10. python框架Scrapy中crawlSpider的使用——爬取内容写进MySQL

    一.先在MySQL中创建test数据库,和相应的site数据表 二.创建Scrapy工程 #scrapy startproject 工程名 scrapy startproject demo4 三.进入 ...