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

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

//贪婪匹配
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := ‘<html><head><title>标题</title></head><body>内容</body></html>‘;
  reg.RegEx   := ‘<.*>‘; //将会全部匹配, 因为两头分别是: < 和 >
  reg.Replacement := ‘◆‘;
  reg.ReplaceAll;

  ShowMessage(reg.Subject); //返回: ◆

  FreeAndNil(reg);
end;

//非贪婪匹配
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := ‘<html><head><title>标题</title></head><body>内容</body></html>‘;
  reg.RegEx   := ‘<.*?>‘; // *? 是非贪婪匹配方法之一, 将匹配每组 <>
  reg.Replacement := ‘◆‘;
  reg.ReplaceAll;

  ShowMessage(reg.Subject); //返回: ◆◆◆标题◆◆◆内容◆◆

  FreeAndNil(reg);
end;

//更多贪婪与非贪婪匹配对照:
 贪婪匹配   非贪婪匹配  描述
? ?? 0 个或 1 个
+ +? 1 个或多个
* *? 0 个或多个
{n} {n}? n 个
{n,m} {n,m}? n - m 个
{n,} {n,}? n 个或多个
时间: 2024-08-02 14:52:52

Delphi 正则表达式语法(6): 贪婪匹配与非贪婪匹配的相关文章

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

Delphi 正则表达式语法(3): 匹配范围 // [A-Z]: 匹配所有大写字母 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007 for Win32';   reg.RegEx  := '[A-Z]';   reg.Replacement := '◆';   reg.ReplaceAll;   ShowMessage(reg.Subject

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

Delphi 正则表达式语法(7): 匹配转义字符 // ? 号的意义是匹配 0-1 次, 如果需要匹配 ? 怎么办 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := '你好吗? 还行!';   reg.RegEx  := '\?|!'; // 加转义用的 \   reg.Replacement := '◆';   reg.ReplaceAll;   ShowMessage(reg.Sub

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

Delphi 正则表达式语法(9): 临界匹配 - 也叫"预搜索"与"反向预搜索" //匹配右边 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'Delphi 6; Delphi 7; Delphi 2007; Delphi Net';   reg.RegEx  := 'Delphi (?=2007)'; // ?=   reg.Replacement :

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

Delphi 正则表达式语法(10): 选项 // preCaseLess: 不区分大小写, 相当于其他语言中的 i var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'abc ABC aBc';   reg.RegEx  := 'abc';   reg.Replacement := '◆';   reg.Options := [preCaseLess]; //选项是集合类型的   reg

正则表达式中的贪婪模式与非贪婪模式详解

1 概述 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配.非贪婪模式只被部分NFA引擎所支持. 属于贪婪模式的量词,也叫做匹配优先量词,包括: “{m,n}”.“{m,}”.“?”.“*”和“+”. 在一些使用NFA引擎的语言中,在匹配优先量词后加上“?”,即变成属于非贪婪模式的量词,也叫做忽略优先量词,包括: “{m,n}?”.“{m,}?”.“??”.“*?”和“+?”.

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

Delphi 正则表达式语法(5): 边界 // \b 单词边界 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'Delphi Delphi2007 MyDelphi';   reg.RegEx  := '\bDelphi\b'; //前后边界   reg.Replacement := '◆';   reg.ReplaceAll;   ShowMessage(reg.Subject);

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

Delphi 正则表达式语法(4): 常用转义字符与 . // \d 匹配所有数字, 相当于 [0-9] var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := '期待Delphi 2008 for Win32!';   reg.RegEx  := '\d';   reg.Replacement := '◆';   reg.ReplaceAll;   ShowMessage(reg.Subjec

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

Delphi 正则表达式语法(1): 关于大小写与中文 //替换一般字符串 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := '我爱DELPHI, 但Delphi不爱我!';   reg.RegEx  := 'Delphi';   reg.Replacement := '◆';   reg.ReplaceAll;   ShowMessage(reg.Subject); //返回: 我爱DE

Delphi 正则表达式语法(2): 或者与重复

Delphi 正则表达式语法(2): 或者与重复 // | 号的使用, | 是或者的意思 var   reg: TPerlRegEx; begin   reg := TPerlRegEx.Create(nil);   reg.Subject := 'CodeGear Delphi 2007';   reg.RegEx  := 'e|Delphi|0'; //使用了 | 记号   reg.Replacement := '◆';   reg.ReplaceAll;   ShowMessage(reg