zoukankan      html  css  js  c++  java
  • 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 类的方法时, 关于对 (子表达式) 的引用还有更多话题.
  • 相关阅读:
    做统计图的好工具
    QueryBuildRange中的表达式
    四种方式话Equal
    QueryBuildRange的空值
    GetHashCode()初探
    X++中的字符串操作函数
    寻找缺陷的方法
    字程序级别的重构
    代码大全的方向
    多线程啊
  • 原文地址:https://www.cnblogs.com/honeynm/p/4058711.html
Copyright © 2011-2022 走看看