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,'......'); 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,'11',[roSingleLine]); Memo1.Lines.Add(rStr); Memo1.Lines.Add('--------------------'); rStr := TRegEx.Replace(txt,'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); //...,AB C rStr := TRegEx.Replace('ABC,'...'); Memo1.Lines.Add(rStr); //ABC,... Memo1.Lines.Add('--------------------'); {使用注释} rStr := TRegEx.Replace('ABC123','ABC#*123',[roIgnorePatternSpace]); Memo1.Lines.Add(rStr); //...123 rStr := TRegEx.Replace('ABC123','...'); Memo1.Lines.Add(rStr); //... end; {********************* ...,AB C ABC,... -------------------- ...123 ... **********************} {选项集合} procedure TForm1.Button7Click(Sender: TObject); const pattern = '^Delphi'; txt = 'DELPHI DELPHI DELPHI'#13#10'delphi delphi delphi'; begin Memo1.Text := TRegEx.Replace(txt,[roIgnoreCase,roMultiLine]); end; {********************* ...... DELPHI DELPHI ...... delphi delphi **********************}