System.RegularExpressions.pas 单元的调用示例,涵盖所有公开方法及常见使用场景

System.RegularExpressions.pas 单元的调用示例,涵盖所有公开方法及常见使用场景:

1. 检查是否匹配(IsMatch)

// 类方法:直接调用
if TRegEx.IsMatch('Hello World', 'World') then
ShowMessage('匹配成功'); // 输出:匹配成功

// 实例方法:创建对象后调用
var
Regex: TRegEx;
begin
Regex := TRegEx.Create('\d+'); // 匹配数字
if Regex.IsMatch('abc123') then
ShowMessage('包含数字'); // 输出:包含数字
end;

// 带选项的匹配(忽略大小写)
if TRegEx.IsMatch('Hello', 'HELLO', [roIgnoreCase]) then
ShowMessage('忽略大小写匹配成功'); // 输出:匹配成功

 



2. 获取单个匹配(Match)

var
Match: TMatch;
begin
// 类方法调用
Match := TRegEx.Match('2023-12-25', '(\d{4})-(\d{2})-(\d{2})');
if Match.Success then
begin
ShowMessage('完整匹配值: ' + Match.Value); // 输出:2023-12-25
ShowMessage('年: ' + Match.Groups[1].Value); // 输出:2023
ShowMessage('月: ' + Match.Groups[2].Value); // 输出:12
ShowMessage('日: ' + Match.Groups[3].Value); // 输出:25
end;

// 实例方法调用(带起始位置)
var Regex := TRegEx.Create('world');
Match := Regex.Match('Hello World', 7); // 从第7个字符开始匹配
if Match.Success then
ShowMessage(Match.Value); // 输出:World
end;

 

3. 获取所有匹配(Matches)

var
Matches: TMatchCollection;
M: TMatch;
begin
Matches := TRegEx.Matches('a1 b2 c3', '\d+'); // 匹配所有数字
for M in Matches do
ShowMessage(M.Value); // 依次输出:1, 2, 3
end;

 


4. 替换文本(Replace)

// 简单替换
var
Result1: string;
begin
Result1 := TRegEx.Replace('Hello World', 'World', 'Delphi');
ShowMessage(Result1); // 输出:Hello Delphi
end;

// 使用回调函数动态替换
function Evaluator(const Match: TMatch): string;
begin
Result := IntToStr(Match.Value.Length);
end;

var
Result2: string;
begin
Result2 := TRegEx.Replace('Hello World', '\b\w+\b', Evaluator);
ShowMessage(Result2); // 输出:5 5
end;

 

5. 分割字符串(Split)

var
Parts: TArray<string>;
S: string;
begin
Parts := TRegEx.Split('one,two;three', '[,;]'); // 按逗号或分号分割
for S in Parts do
ShowMessage(S); // 输出:one, two, three
end;

 


6. 转义特殊字符(Escape)

var
Escaped: string;
begin
Escaped := TRegEx.Escape('Hello (World)');
ShowMessage(Escaped); // 输出:Hello\ \(World\)
end;

7. 使用分组名称访问

var
Match: TMatch;
begin
Match := TRegEx.Match('Name: John', 'Name:\s+(?<Name>\w+)');
if Match.Success then
ShowMessage(Match.Groups['Name'].Value); // 输出:John
end;

 


8. 遍历所有匹配(NextMatch)

var
Regex: TRegEx;
CurrentMatch: TMatch;
begin
Regex := TRegEx.Create('\d+');
CurrentMatch := Regex.Match('a1 b2 c3');
while CurrentMatch.Success do
begin
ShowMessage(CurrentMatch.Value);
CurrentMatch := CurrentMatch.NextMatch;
end;
// 输出:1, 2, 3
end;

 

9. 高级选项(roIgnoreCase 和 roMultiLine)

var
Regex: TRegEx;
begin
// 忽略大小写 + 多行模式
Regex := TRegEx.Create('^hello', [roIgnoreCase, roMultiLine]);
if Regex.IsMatch('Hello' + sLineBreak + 'HELLO') then
ShowMessage('多行匹配成功'); // 输出:匹配成功
end;

 


10. 编译正则表达式(Study 和 roCompiled)

var
Regex: TRegEx;
begin
Regex := TRegEx.Create('\d+', [roCompiled]); // 预编译提升性能
Regex.Study; // 进一步优化
if Regex.IsMatch('abc123') then
ShowMessage('匹配成功');
end;

 



以上示例覆盖了 TRegEx 的所有公开方法及常见场景,包括匹配、替换、分割、分组访问和高级选项配置。

1,正则匹配 子字符串,采集合并出 真实地址
2,正则提取内容

uses RegularExpressions;
{使用 TMatch 对象的 NextMatch 遍历匹配结果时,需实例化对象}
procedure TForm1.Button4Click(Sender: TObject);
var
reg: TRegEx;
match: TMatch;
begin
reg := TRegEx.Create(pattern);
match := reg.Match(txt);

Memo1.Clear;
while match.Success do
begin
Memo1.Lines.Add(match.Value);
match := match.NextMatch;
end;
end;

 

posted @ 2025-04-12 07:59  RulesOS  阅读(42)  评论(0)    收藏  举报