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

//准备: 我们先写一个搜索所有英文单词的表达式
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'one two three four five six seven eight nine ten';
  reg.RegEx   := '[A-Za-z]+'; //这个表达式就可以找到所有的英文单词
  reg.Replacement := '◆';
  reg.ReplaceAll;

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

  FreeAndNil(reg);
end;

//假如我们只需要每个单词的第一个字母呢? 这要用到子表达式
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'one two three four five six seven eight nine ten';
  reg.RegEx   := '([A-Za-z])[A-Za-z]*'; //注意表达式中有子表达式, 在 () 中
  reg.Replacement := '1'; // 1 引用了第一个子表达式
  reg.ReplaceAll;

  ShowMessage(reg.Subject); //返回: o t t f f s s e n t

  FreeAndNil(reg);
end;

//表达式中可以有多个子表达式
var
  reg: TPerlRegEx;
begin
  reg := TPerlRegEx.Create(nil);

  reg.Subject := 'one two three ten';
  reg.RegEx   := '(t)(w+)';
  reg.Replacement := '[1-2:]'; // 12 分别引用对应的子表达式;  引用整个表达式
  reg.ReplaceAll;

  ShowMessage(reg.Subject); //返回: one [t-wo:two] [t-hree:three] [t-en:ten]

  FreeAndNil(reg);
end;

//在后面介绍 TPerlRegEx 类的方法时, 关于对 (子表达式) 的引用还有更多话题.
原文地址:https://www.cnblogs.com/honeynm/p/4058711.html