• 官方的正则表达式组件 RegularExpressions (4) : 表达式选项



    TRegExOption = (
      roNone,              //无
      roIgnoreCase,        //不区分大小写
      roMultiLine,         //多行模式; 可使 ^ 和 $ 匹配每个行首或行尾
      roExplicitCapture,   //只捕获指定了名称或编号的子表达式
      roCompiled,          //预编译表达式; 这在反复使用更有效率
      roSingleLine,        //单行模式; 使 . 也可匹配换行符
      roIgnorePatternSpace //忽略注释和未经转义的空白
    );
    


    uses RegularExpressions;
    
    {roIgnoreCase}
    procedure TForm1.Button1Click(Sender: TObject);
    const
      pattern = '[A-Z]+\d+';
      txt = 'AAA1 bbb2 aa11 bb22 A111 B222 AAAA';
    var
      match: TMatch;
    begin
      Memo1.Clear;
      for match in TRegEx.Matches(txt, pattern, [roIgnoreCase]) do
      begin
        Memo1.Lines.Add(match.Value);
      end;
    
      Memo1.Lines.Add('----------');
    
      for match in TRegEx.Matches(txt, pattern) do
      begin
        Memo1.Lines.Add(match.Value);
      end;
    end;
    {*********************
    AAA1
    bbb2
    aa11
    bb22
    A111
    B222
    ----------
    AAA1
    A111
    B222
    **********************}
    
    {roMultiLine}
    procedure TForm1.Button2Click(Sender: TObject);
    const
      txt = 'Delphi Delphi Delphi'#13#10'Delphi Delphi Delphi';
    var
      rStr: string;
    begin
      Memo1.Clear;
      {行首}
      rStr := TRegEx.Replace(txt, '^Delphi', '......', [roMultiLine]);
      Memo1.Lines.Add(rStr);
      Memo1.Lines.Add('--------------------');
      rStr := TRegEx.Replace(txt, '^Delphi', '......');
      Memo1.Lines.Add(rStr);
    
      Memo1.Lines.Add('--------------------');
      {行尾}
      rStr := TRegEx.Replace(txt, 'Delphi$', '......', [roMultiLine]);
      Memo1.Lines.Add(rStr);
      Memo1.Lines.Add('--------------------');
      rStr := TRegEx.Replace(txt, 'Delphi$', '......');
      Memo1.Lines.Add(rStr);
    end;
    {*********************
    ...... Delphi Delphi
    ...... Delphi Delphi
    --------------------
    ...... Delphi Delphi
    Delphi Delphi Delphi
    --------------------
    Delphi Delphi ......
    Delphi Delphi ......
    --------------------
    Delphi Delphi Delphi
    Delphi Delphi ......
    **********************}
    
    {roExplicitCapture}
    procedure TForm1.Button3Click(Sender: TObject);
    const
      pattern1 = '([A-Z]+)(\d+)';
      pattern2 = '(?<name1>[A-Z]+)(\d+)';
      pattern3 = '([A-Z]+)(?<3>\d+)';
      txt = 'AA11 BB22';
    var
      match: TMatch;
      group: TGroup;
    begin
      Memo1.Clear;
    
      for match in TRegEx.Matches(txt, pattern1, [roExplicitCapture]) do 
      begin
        for group in match.Groups do
        begin
          Memo1.Lines.Add(group.Value);
        end;
      end;
      Memo1.Lines.Add('--------------------');
    
      for match in TRegEx.Matches(txt, pattern1) do //此处把 pattern1 换做 pattern2 或 pattern3 均可
      begin
        for group in match.Groups do
        begin
          Memo1.Lines.Add(group.Value);
        end;
      end;
      Memo1.Lines.Add('--------------------');
      
      for match in TRegEx.Matches(txt, pattern2, [roExplicitCapture]) do 
      begin
        for group in match.Groups do
        begin
          Memo1.Lines.Add(group.Value);
        end;
      end;
      Memo1.Lines.Add('--------------------');
      
      for match in TRegEx.Matches(txt, pattern3, [roExplicitCapture]) do 
      begin
        for group in match.Groups do
        begin
          Memo1.Lines.Add(group.Value);
        end;
      end;
    end;
    {*********************
    AA11
    BB22
    --------------------
    AA11
    AA
    11
    BB22
    BB
    22
    --------------------
    AA11
    AA
    BB22
    BB
    --------------------
    AA11
    11
    BB22
    22
    **********************}
    
    {roCompiled}
    procedure TForm1.Button4Click(Sender: TObject);
    var
      reg: TRegEx;
    begin
      reg := TRegEx.Create('\d+', [roCompiled]);
      Memo1.Text := reg.Replace('AA11 BB22', '..');  //AA.. BB..
    end;
    
    {roSingleLine}
    procedure TForm1.Button5Click(Sender: TObject);
    const           
      pattern = '[A-Z]{1}.{1}';
      txt = 'A B C D'#13#10'A B C D'#13#10'A B C D';
    var
      rStr: string;
    begin
      Memo1.Clear;
      rStr := TRegEx.Replace(txt, pattern, '11', [roSingleLine]);
      Memo1.Lines.Add(rStr);
      Memo1.Lines.Add('--------------------');
      
      rStr := TRegEx.Replace(txt, pattern, '11');
      Memo1.Lines.Add(rStr);
    end;
    {*********************
    11111111
    11111111
    111111D
    --------------------
    111111D
    111111D
    111111D
    **********************}
    
    {roIgnorePatternSpace}
    procedure TForm1.Button6Click(Sender: TObject);
    var
      rStr: string;
    begin
      Memo1.Clear;
      {忽略空白}                                
      rStr := TRegEx.Replace('ABC,A B C,AB C', 'AB C', '...', [roIgnorePatternSpace]);
      Memo1.Lines.Add(rStr); //...,A B C,AB C
      rStr := TRegEx.Replace('ABC,A B C,AB C', 'AB C', '...');
      Memo1.Lines.Add(rStr); //ABC,A B C,...
      Memo1.Lines.Add('--------------------');
    
      {使用注释}
      rStr := TRegEx.Replace('ABC123', 'ABC#*123', '...', [roIgnorePatternSpace]);
      Memo1.Lines.Add(rStr); //...123
      rStr := TRegEx.Replace('ABC123', 'ABC#*123', '...');
      Memo1.Lines.Add(rStr); //...
    end;
    {*********************
    ...,A B C,AB C
    ABC,A B C,...
    --------------------
    ...123
    ...
    **********************}
    
    {选项集合}
    procedure TForm1.Button7Click(Sender: TObject);
    const
      pattern = '^Delphi';
      txt = 'DELPHI DELPHI DELPHI'#13#10'delphi delphi delphi';
    begin
      Memo1.Text := TRegEx.Replace(txt, pattern, '......', [roIgnoreCase, roMultiLine]);
    end;
    {*********************
    ...... DELPHI DELPHI
    ...... delphi delphi
    **********************}
    

  • 相关阅读:
    Redis过期机制
    vim使用
    ex command in Linux with examples
    【转】Linux 文档编辑 : ex 命令详解
    vscode go语言环境搭建
    golang slice a 的地址和a[0]的地址不一样
    文件加锁,作用是用来做什么?以及使用细节
    文件锁
    go创建指定大小的文件,获取文件大小
    go 实现内存映射和进程间通信
  • 原文地址:https://www.cnblogs.com/del/p/1998460.html
Copyright © 2020-2023  润新知