正则表达式
代码
匹配
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
在输入字符串中搜索第一次出现的正则表达式。
参数
Input 输入字符串。
Pattern 正则表达式。
Options 影响匹配操作。
返回值
一个TMatch
实例。
System.RegularExpressions.TMatch
unit
包含单个正则表达式匹配结果的记录。
没有公共构造函数。由 System.RegularExpressions.TRegEx.Match
等方法构造为返回值,表示字符串中的第一个模式匹配。
Success
属性表示匹配是否成功。
NextMatch
返回下一个匹配项。返回类型也是 TMatch
。
如果模式匹配成功,Value
属性包含匹配的子字符串,Index
属性包含输入字符串中匹配子字符串从零开始的起始位置,Length
属性包含输入字符串中匹配子字符串的长度。
因为单个匹配可能涉及多个捕获组,所以 TMatch
有一个类型为 TGroupCollection
的 Groups
属性。
System.RegularExpressions.TRegExOptions
type TRegExOptions = set of TRegExOption;
unit
正则表达式的规则和功能的选项。是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
将 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
表示输入字符串中是否存在匹配项。
参数
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 影响匹配操作。
返回值
拆分结果在字符串数组中返回。
参考
TPerlRegEx
用于 Delphi 2010 及更早版本
标签:匹配,string,正则表达式,delphi,System,RegularExpressions,字符串,Input From: https://www.cnblogs.com/txgh/p/17477833.html