TRegExOption = ( roNone, //无 roIgnoreCase, //不区分大小写 roMultiLine, //多行模式; 可使 ^ 和 $ 匹配每个行首或行尾 roExplicitCapture, //只捕获指定了名称或编号的子表达式 roCompiled, //预编译表达式; 这在反复使用更有效率 roSingleLine, //单行模式; 使 . 也可匹配换行符 roIgnorePatternSpace //忽略注释和未经转义的空白 );
uses RegularExpressions; {roIgnoreCase} procedure TForm1.Button1Click(Sender: TObject); const pattern = '[A-Z]+\d+'; txt = 'AAA1 bbb2 aa11 bb22 A111 B222 AAAA'; var match: TMatch; begin Memo1.Clear; for match in TRegEx.Matches(txt, pattern, [roIgnoreCase]) do begin Memo1.Lines.Add(match.Value); end; Memo1.Lines.Add('----------'); for match in TRegEx.Matches(txt, pattern) do begin Memo1.Lines.Add(match.Value); end; end; {********************* AAA1 bbb2 aa11 bb22 A111 B222 ---------- AAA1 A111 B222 **********************} {roMultiLine} procedure TForm1.Button2Click(Sender: TObject); const txt = 'Delphi Delphi Delphi'#13#10'Delphi Delphi Delphi'; var rStr: string; begin Memo1.Clear; {行首} rStr := TRegEx.Replace(txt, '^Delphi', '......', [roMultiLine]); Memo1.Lines.Add(rStr); Memo1.Lines.Add('--------------------'); rStr := TRegEx.Replace(txt, '^Delphi', '......'); Memo1.Lines.Add(rStr); Memo1.Lines.Add('--------------------'); {行尾} rStr := TRegEx.Replace(txt, 'Delphi$', '......', [roMultiLine]); Memo1.Lines.Add(rStr); Memo1.Lines.Add('--------------------'); rStr := TRegEx.Replace(txt, 'Delphi$', '......'); Memo1.Lines.Add(rStr); end; {********************* ...... Delphi Delphi ...... Delphi Delphi -------------------- ...... Delphi Delphi Delphi Delphi Delphi -------------------- Delphi Delphi ...... Delphi Delphi ...... -------------------- Delphi Delphi Delphi Delphi Delphi ...... **********************} {roExplicitCapture} procedure TForm1.Button3Click(Sender: TObject); const pattern1 = '([A-Z]+)(\d+)'; pattern2 = '(?<name1>[A-Z]+)(\d+)'; pattern3 = '([A-Z]+)(?<3>\d+)'; txt = 'AA11 BB22'; var match: TMatch; group: TGroup; begin Memo1.Clear; for match in TRegEx.Matches(txt, pattern1, [roExplicitCapture]) do begin for group in match.Groups do begin Memo1.Lines.Add(group.Value); end; end; Memo1.Lines.Add('--------------------'); for match in TRegEx.Matches(txt, pattern1) do //此处把 pattern1 换做 pattern2 或 pattern3 均可 begin for group in match.Groups do begin Memo1.Lines.Add(group.Value); end; end; Memo1.Lines.Add('--------------------'); for match in TRegEx.Matches(txt, pattern2, [roExplicitCapture]) do begin for group in match.Groups do begin Memo1.Lines.Add(group.Value); end; end; Memo1.Lines.Add('--------------------'); for match in TRegEx.Matches(txt, pattern3, [roExplicitCapture]) do begin for group in match.Groups do begin Memo1.Lines.Add(group.Value); end; end; end; {********************* AA11 BB22 -------------------- AA11 AA 11 BB22 BB 22 -------------------- AA11 AA BB22 BB -------------------- AA11 11 BB22 22 **********************} {roCompiled} procedure TForm1.Button4Click(Sender: TObject); var reg: TRegEx; begin reg := TRegEx.Create('\d+', [roCompiled]); Memo1.Text := reg.Replace('AA11 BB22', '..'); //AA.. BB.. end; {roSingleLine} procedure TForm1.Button5Click(Sender: TObject); const pattern = '[A-Z]{1}.{1}'; txt = 'A B C D'#13#10'A B C D'#13#10'A B C D'; var rStr: string; begin Memo1.Clear; rStr := TRegEx.Replace(txt, pattern, '11', [roSingleLine]); Memo1.Lines.Add(rStr); Memo1.Lines.Add('--------------------'); rStr := TRegEx.Replace(txt, pattern, '11'); Memo1.Lines.Add(rStr); end; {********************* 11111111 11111111 111111D -------------------- 111111D 111111D 111111D **********************} {roIgnorePatternSpace} procedure TForm1.Button6Click(Sender: TObject); var rStr: string; begin Memo1.Clear; {忽略空白} rStr := TRegEx.Replace('ABC,A B C,AB C', 'AB C', '...', [roIgnorePatternSpace]); Memo1.Lines.Add(rStr); //...,A B C,AB C rStr := TRegEx.Replace('ABC,A B C,AB C', 'AB C', '...'); Memo1.Lines.Add(rStr); //ABC,A B C,... Memo1.Lines.Add('--------------------'); {使用注释} rStr := TRegEx.Replace('ABC123', 'ABC#*123', '...', [roIgnorePatternSpace]); Memo1.Lines.Add(rStr); //...123 rStr := TRegEx.Replace('ABC123', 'ABC#*123', '...'); Memo1.Lines.Add(rStr); //... end; {********************* ...,A B C,AB C ABC,A B C,... -------------------- ...123 ... **********************} {选项集合} procedure TForm1.Button7Click(Sender: TObject); const pattern = '^Delphi'; txt = 'DELPHI DELPHI DELPHI'#13#10'delphi delphi delphi'; begin Memo1.Text := TRegEx.Replace(txt, pattern, '......', [roIgnoreCase, roMultiLine]); end; {********************* ...... DELPHI DELPHI ...... delphi delphi **********************}
分类:
Delphi 与正则表达式
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2008-03-29 System.SetString - 获取字符串
2008-03-29 System.Val - 将字符串转换为数字
2008-03-29 System.Str - 将数字格式化为字符串
2008-03-29 System.FillChar - 填充字节
2008-03-29 System.StringOfChar - 反复字符
2008-03-29 System.Pos - 搜索子串的位置
2008-03-29 System.Concat - 连接字符串