Delphi中正则表达式之TPerlRegEx类的属性与方法(2) 关于子表达式

// MatchedExpression 与 SubExpressions[0]

var
 reg: TPerlRegEx;
begin
 reg := TPerlRegEx.Create(nil);
 reg.Subject := 'CodeGear Delphi 2007';
 reg.RegEx  := 'Delphi';
 while reg.MatchAgain do
 begin
  ShowMessage(reg.MatchedExpression); //Delphi; 这是匹配到的内容
  ShowMessage(reg.SubExpressions[0]); //Delphi; 也可以这样显示匹配到 的内容
 end;
{
 SubExpressions 是一个数组:
 SubExpressions[1] 储存第 1 个表达式匹配的内容;
 SubExpressions[2] 储存第 2 个表达式匹配的内容;
 SubExpressions[n] 储存第 n 个表达式匹配的内容;
 SubExpressions[0] 储存整个表达式匹配的内容;
 MatchedExpression 表示的不过是 SubExpressions[0].
}
 FreeAndNil(reg);
end;

//提取子表达式匹配到的内容

var
 reg: TPerlRegEx;
begin
 reg := TPerlRegEx.Create(nil);
 reg.Subject := 'abc A1111 BB222 CCC33 DDDD4';
 reg.RegEx  := '\b([A-D]+)([1-4]+)\b'; //这个表达式有两个子表达式构成
 while reg.MatchAgain do
 begin
  ShowMessage(reg.SubExpressions[0]); //将分别显示: A1111 BB222 CCC33 DDDD4
  ShowMessage(reg.SubExpressions[1]); //将分别显示: A BB CCC DDDD
  ShowMessage(reg.SubExpressions[2]); //将分别显示: 1111 222 33 4
  {另外:
   reg.SubExpressionCount   是子表达式的个数;
   reg.SubExpressionLengths[n] 是第 n 个表达式返回的字符串的长度;
   reg.SubExpressionOffsets[n] 是第 n 个表达式返回的字符串在源字符串 中的位置
  }
 end;
 FreeAndNil(reg);
end;

//子表达式不能超过 MAX_SUBEXPRESSIONS = 99 个, MAX_SUBEXPRESSIONS 是 TPerlRegEx 的内置常数.

时间: 2024-08-03 19:17:34

Delphi中正则表达式之TPerlRegEx类的属性与方法(2) 关于子表达式的相关文章

Delphi中正则表达式之TPerlRegEx类的属性与方法(1) 查找

//查找是否存在 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'CodeGear Delphi 2007 for Win32'; reg.RegEx := '\d'; if reg.Match then ShowMessage('找到了') else ShowMessage('没找到'); FreeAndNil(reg); end; //查找是否存在(方法2) var reg: TPerlReg

Delphi中正则表达式之TPerlRegEx类的属性与方法(7) Split函数

//字符串分割: Split var reg: TPerlRegEx; List: TStrings; begin List := TStringList.Create; reg := TPerlRegEx.Create(nil); reg.Subject := 'aaa,bbb,ccc,ddd'; reg.RegEx := ','; {这里可是运行相当复杂的分割符啊} reg.Split(List,MaxInt); {第一个参数读入的是 Subject; 第二个参数是分成 多少份} { 输入一

Delphi中正则表达式之TPerlRegEx类的属性与方法(6) EscapeRegExChars函数

// EscapeRegExChars 函数可以自动为特殊字符加转义符号 \ var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'C++Builer'; reg.RegEx := reg.EscapeRegExChars('C+') + '{2}'; {相当于 'C\+{2}'} reg.Replacement := '◆'; reg.ReplaceAll; ShowMessage(reg.Subje

Delphi中正则表达式之TPerlRegEx类的属性与方法(5) Compile、Study

// Compile.Study var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.RegEx := 'ab'; reg.Options := [preCaseLess]; reg.Compile; {编译表达式} reg.Study; {Study 方法会检查是否编译, 如果没有编译则执行 Compile} reg.Replacement := '◆'; reg.Subject := 'abAbaB'; reg.Repl

Delphi中正则表达式之TPerlRegEx类的属性与方法(4) Replace

// Replace var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.RegEx := 'ab'; reg.Replacement := '◆'; reg.Subject := 'ababab'; reg.ReplaceAll; ShowMessage(reg.Subject); //返回: ◆◆◆ reg.Subject := 'ababab'; //下面四行程序, 相当于 reg.ReplaceAll; while

Delphi中正则表达式之TPerlRegEx类的属性与方法(3) Start、Stop

//设定搜索范围: Start.Stop var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'ababab'; reg.RegEx := 'ab'; reg.Replacement := '◆'; reg.Start := 1; reg.Stop := 2; while reg.MatchAgain do begin reg.Replace; end; ShowMessage(reg.Subject)

在delphi中如何动态建立类的实例

本文为原创,如需转载,请注明作者和出处,谢谢!     在面向对象语言中,用两种方法建立类的实例:静态建立和动态建立.静态建立就是在程序中显式地建立类的实例,如c1 = TClass1.Create().而动态建立是在只知道类名的前题下建立类的实例.动态建立在实现上要比静态建立更灵活,因为动态建立无需引用被建立 类,并且更容易实现如多态等面向对象特性. 一.    动态建立类的实例 在delphi中动态建立类的实例可分为4步. 1. 声明一个从TPersistent继承的类.因为在注册类时要求必

Delphi中正则表达式语法(8) 引用子表达式

//准备: 我们先写一个搜索所有英文单词的表达式 var reg: TPerlRegEx; begin reg := TPerlRegEx.Create(nil); reg.Subject := 'one two three four five six seven eight nine ten'; reg.RegEx := '\b[A-Za-z]+\b'; //这个表达式就可以找到所有的英文单词 reg.Replacement := '◆'; reg.ReplaceAll; ShowMessag

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.ReplaceAll; ShowMessage(reg.Subject);