delphi 正则表达式

发布时间 2023-06-13 16:06:51作者: txgh

正则表达式

代码

匹配

uses
  System.RegularExpressions;

procedure TForm1.Button1Click(Sender: TObject);
var
  vMatch: TMatch;
begin
  //匹配正则表达式
  vMatch := TRegEx.Match('abc123def456', '[0-9]+');
  //匹配成功输出匹配内容
  if vMatch.Success then
  begin
    Memo1.Lines.Add(vMatch.Value);
    //再次匹配
    vMatch := vMatch.NextMatch;
    if vMatch.Success then
      Memo1.Lines.Add(vMatch.Value);
  end;
end;

替换

uses
  System.RegularExpressions;
  
function TForm1.ReplaceNumber(const Match: TMatch): string;
begin
  if Match.Value = '123' then
    Result := '!'
  else if Match.Value = '456' then
    Result := '$'
  else
    Result := '-';
end;  

procedure TForm1.Button2Click(Sender: TObject);
begin
  //替换全部匹配内容
  Memo1.Lines.Add(TRegEx.Replace('abc123def456', '[0-9]+', '-'));
  //复杂替换
  Memo1.Lines.Add(TRegEx.Replace('abc123def456', '[0-9]+', ReplaceNumber));
end;

判断匹配

uses
  System.RegularExpressions;
  
procedure TForm1.Button3Click(Sender: TObject);
begin
  //判断是否存在匹配项
  if TRegEx.IsMatch('abc123def456', '[0-9]+') then
    Memo1.Lines.Add('存在')
  else
    Memo1.Lines.Add('不存在');
end;

拆分字符串

uses
  System.RegularExpressions;
  
procedure TForm1.Button4Click(Sender: TObject);
var
  vArr: TArray<string>;
  I: Integer;
begin
  //根据正则表达式拆分字符串
  vArr := TRegEx.Split('1a2b3c4d5e6f', '[0-9]+');
  for I := 0 to Length(vArr) - 1 do
    Memo1.Lines.Add(vArr[I]);
end;

方法

System.RegularExpressions.TRegEx.Match

class function Match(const Input, Pattern: string): TMatch;
class function Match(const Input, Pattern: string; Options: TRegExOptions): TMatch;

unit

System.RegularExpressions

在输入字符串中搜索第一次出现的正则表达式。

参数

Input 输入字符串。

Pattern 正则表达式。

Options 影响匹配操作。

返回值

一个TMatch实例。

System.RegularExpressions.TMatch

unit

System.RegularExpressions

包含单个正则表达式匹配结果的记录。

没有公共构造函数。由 System.RegularExpressions.TRegEx.Match 等方法构造为返回值,表示字符串中的第一个模式匹配。

Success 属性表示匹配是否成功。

NextMatch 返回下一个匹配项。返回类型也是 TMatch 。

如果模式匹配成功,Value 属性包含匹配的子字符串,Index 属性包含输入字符串中匹配子字符串从零开始的起始位置,Length 属性包含输入字符串中匹配子字符串的长度。

因为单个匹配可能涉及多个捕获组,所以 TMatch 有一个类型为 TGroupCollection 的 Groups 属性。

System.RegularExpressions.TRegExOptions

type TRegExOptions = set of TRegExOption;

unit

System.RegularExpressions

正则表达式的规则和功能的选项。是TRegExOption类型的集合。

  • roNone 指定不设置任何选项。

  • roIgnoreCase 指定不区分大小写的匹配。

  • roMultiLine 多行模式。改变^和$的含义,使它们分别匹配任何一行的开头和结尾,而不仅仅是整个字符串的开头和结尾。

  • roExplicitCapture 指定唯一有效的捕获是显式命名或编号形式为(?<name>…)的组。这允许未命名的括号充当非捕获组,而不像表达式(?:…)那样语法笨拙。

  • roCompiled 指定将正则表达式编译成一个汇编。这会产生更快的执行速度,但会增加启动时间。调用 CompileToAssembly 方法时,不应将此值分配给 Options 属性。

  • roSingleLine 指定单行模式。改变点(.)的含义,使其与每个字符相匹配(而不是除\n外的每个字符)。

  • roIgnorePatternSpace 消除模式中未转义的空白,并启用标有 # 的注释。但是,忽略模式空白值不会影响或消除字符类中的空白。

System.RegularExpressions.TRegEx.Replace

class function Replace(const Input, Pattern, Replacement: string): string; overload;
class function Replace(const Input, Pattern: string; Evaluator: TMatchEvaluator): string; overload;
class function Replace(const Input, Pattern, Replacement: string; Options: TRegExOptions): string; overload; 
class function Replace(const Input, Pattern: string; Evaluator: TMatchEvaluator; Options: TRegExOptions): string; overload;

unit

System.RegularExpressions

将 Input 字符串中的所有匹配项替换为 Replacement 字符串或 Evaluator 委托的返回值。

参数

Input 输入字符串。

Pattern 正则表达式。

Replacement 替换字符串。

Evaluator 委托的返回值函数。

Options 影响匹配操作。

返回值

替换后的字符串。

System.RegularExpressions.TRegEx.IsMatch

class function IsMatch(const Input, Pattern: string): Boolean;overload;
class function IsMatch(const Input, Pattern: string; Options: TRegExOptions): Boolean; overload;

unit

System.RegularExpressions

表示输入字符串中是否存在匹配项。

参数

Input 输入字符串。

Pattern 正则表达式。

Options 影响匹配操作。

System.RegularExpressions.TRegEx.Split

class function Split(const Input, Pattern: string): TArray<string>; overload;
class function Split(const Input, Pattern: string; Options: TRegExOptions): TArray<string>; overload;

根据正则表达式的匹配来拆分输入字符串。

参数

Input 输入字符串。

Pattern 正则表达式。

Options 影响匹配操作。

返回值

拆分结果在字符串数组中返回。

参考

Delphi正则表达式类

TPerlRegEx

用于 Delphi 2010 及更早版本