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;
浙公网安备 33010602011771号