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 有一个类型为 TGroupCollectionGroups 属性。

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 及更早版本