1 uses RegularExpressions; //相关单元 2 3 const 4 pattern = '[A-Z]+d+'; //测试用的表达式 5 txt = 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA'; //测试用的目标文本 6 7 {是否匹配成功} 8 procedure TForm1.Button1Click(Sender: TObject); 9 begin 10 if TRegEx.IsMatch(txt, pattern) then 11 begin 12 ShowMessage('有匹配到'); 13 end; 14 end; 15 16 {获取第一个匹配结果} 17 procedure TForm1.Button2Click(Sender: TObject); 18 var 19 match: TMatch; 20 begin 21 match := TRegEx.Match(txt, pattern); 22 if match.Success then //或用一句话 if TRegEx.Match(txt, pattern).Success then 23 begin 24 ShowMessage(match.Value); //AAA1 25 end; 26 end; 27 28 {获取所有匹配结果} 29 procedure TForm1.Button3Click(Sender: TObject); 30 var 31 matchs: TMatchCollection; 32 match: TMatch; 33 i: Integer; 34 begin 35 matchs := TRegEx.Matches(txt, pattern); 36 37 Memo1.Clear; 38 for match in matchs do 39 begin 40 Memo1.Lines.Add(match.Value); 41 end; 42 43 Memo1.Lines.Add('----------'); 44 for i := 0 to matchs.Count - 1 do 45 begin 46 Memo1.Lines.Add(matchs[i].Value); 47 end; 48 end; 49 50 {使用 TMatch 对象的 NextMatch 遍历匹配结果时,需实例化对象} 51 procedure TForm1.Button4Click(Sender: TObject); 52 var 53 reg: TRegEx; 54 match: TMatch; 55 begin 56 reg := TRegEx.Create(pattern); 57 match := reg.Match(txt); 58 59 Memo1.Clear; 60 while match.Success do 61 begin 62 Memo1.Lines.Add(match.Value); 63 match := match.NextMatch; 64 end; 65 end; 66 67 {替换} 68 procedure TForm1.Button6Click(Sender: TObject); 69 begin 70 Memo1.Text := TRegEx.Replace(txt, pattern, 'xxx'); //xxx xxx xxx xxx xxx xxx AAAA 71 end; 72 73 {分割} 74 procedure TForm1.Button7Click(Sender: TObject); 75 var 76 rArr: TArray<string>; 77 s: string; 78 begin 79 rArr := TRegEx.Split('AAA,BBB;CCC,DDD EEE', '[,; ]'); 80 81 Memo1.Clear; 82 for s in rArr do 83 begin 84 Memo1.Lines.Add(s); //AAA/BBB/CCC/DDD/EEE 85 end; 86 end; 87 88 {TRegEx 还有一个 class 方法 Escape, 用于给特殊字符转义} 89 procedure TForm1.Button8Click(Sender: TObject); 90 begin 91 Memo1.Text := TRegEx.Escape('[]^$.|?*+(){}'); //: \[]^$.|?*+(){} 92 end; 93 94 uses RegularExpressions; 95 96 const 97 pattern = '([A-Z]+)(d+)'; //其三个子表达式分别是:[A-Z]+d+ [A-Z]+ d+ 98 txt = 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA'; //测试用的目标文本 99 100 procedure TForm1.Button1Click(Sender: TObject); 101 var 102 match: TMatch; 103 group: TGroup; 104 groups: TGroupCollection; 105 begin 106 match := TRegEx.Match(txt, pattern); 107 groups := match.Groups; 108 109 Memo1.Clear; 110 for group in groups do 111 begin 112 Memo1.Lines.Add(group.Value); //AAA1/AAA/1 113 end; 114 end; 115 116 procedure TForm1.Button2Click(Sender: TObject); 117 var 118 match: TMatch; 119 group: TGroup; 120 begin 121 Memo1.Clear; 122 for match in TRegEx.Matches(txt, pattern) do 123 begin 124 for group in match.Groups do 125 begin 126 Memo1.Lines.Add(group.Value); 127 end; 128 Memo1.Lines.Add(''); 129 end; 130 end; 131 {************** 132 AA11 133 AA 134 11 135 136 BB22 137 BB 138 22 139 140 A111 141 A 142 111 143 144 B222 145 B 146 222 147 **************} 148 149 procedure TForm1.Button3Click(Sender: TObject); 150 var 151 rStr: string; 152 begin 153 Memo1.Clear; 154 rStr := TRegEx.Replace(txt, pattern, '$1'); //AAA BBB AA BB A B AAAA 155 Memo1.Lines.Add(rStr); 156 157 rStr := TRegEx.Replace(txt, pattern, '$2'); //1 2 11 22 111 222 AAAA 158 Memo1.Lines.Add(rStr); 159 160 rStr := TRegEx.Replace(txt, pattern, '$2$1'); //1AAA 2BBB 11AA 22BB 111A 222B AAAA 161 Memo1.Lines.Add(rStr); 162 end; 163 {********************************** 164 AAA BBB AA BB A B AAAA 165 1 2 11 22 111 222 AAAA 166 1AAA 2BBB 11AA 22BB 111A 222B AAAA 167 ***********************************} 168 169 170 unit Unit1; 171 172 interface 173 174 uses 175 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 176 Dialogs, StdCtrls, RegularExpressions; 177 178 type 179 TForm1 = class(TForm) 180 Memo1: TMemo; 181 Button1: TButton; 182 procedure Button1Click(Sender: TObject); 183 private 184 function MyMatchEvaluator(const Match: TMatch): string; //TMatchEvaluator = function(const Match: TMatch): string of object; 185 public 186 end; 187 188 var 189 Form1: TForm1; 190 191 implementation 192 193 {$R *.dfm} 194 195 const 196 pattern = '[A-Z]+d+'; 197 txt = 'AAA1 BBB2 AA11 BB22 A111 B222 AAAA'; 198 199 procedure TForm1.Button1Click(Sender: TObject); 200 begin 201 Memo1.Text := TRegEx.Replace(txt, pattern, MyMatchEvaluator); //aaa1 bbb2 aa11 bb22 a111 b222 AAAA 202 end; 203 204 function TForm1.MyMatchEvaluator(const Match: TMatch): string; 205 begin 206 Result := LowerCase(Match.Value); 207 end; 208 209 end. 210 211 212 TRegExOption = ( 213 roNone, //无 214 roIgnoreCase, //不区分大小写 215 roMultiLine, //多行模式; 可使 ^ 和 $ 匹配每个行首或行尾 216 roExplicitCapture, //只捕获指定了名称或编号的子表达式 217 roCompiled, //预编译表达式; 这在反复使用更有效率 218 roSingleLine, //单行模式; 使 . 也可匹配换行符 219 roIgnorePatternSpace //忽略注释和未经转义的空白 220 ); 221 222 uses RegularExpressions; 223 224 {roIgnoreCase} 225 procedure TForm1.Button1Click(Sender: TObject); 226 const 227 pattern = '[A-Z]+d+'; 228 txt = 'AAA1 bbb2 aa11 bb22 A111 B222 AAAA'; 229 var 230 match: TMatch; 231 begin 232 Memo1.Clear; 233 for match in TRegEx.Matches(txt, pattern, [roIgnoreCase]) do 234 begin 235 Memo1.Lines.Add(match.Value); 236 end; 237 238 Memo1.Lines.Add('----------'); 239 240 for match in TRegEx.Matches(txt, pattern) do 241 begin 242 Memo1.Lines.Add(match.Value); 243 end; 244 end; 245 {********************* 246 AAA1 247 bbb2 248 aa11 249 bb22 250 A111 251 B222 252 ---------- 253 AAA1 254 A111 255 B222 256 **********************} 257 258 {roMultiLine} 259 procedure TForm1.Button2Click(Sender: TObject); 260 const 261 txt = 'Delphi Delphi Delphi'#13#10'Delphi Delphi Delphi'; 262 var 263 rStr: string; 264 begin 265 Memo1.Clear; 266 {行首} 267 rStr := TRegEx.Replace(txt, '^Delphi', '......', [roMultiLine]); 268 Memo1.Lines.Add(rStr); 269 Memo1.Lines.Add('--------------------'); 270 rStr := TRegEx.Replace(txt, '^Delphi', '......'); 271 Memo1.Lines.Add(rStr); 272 273 Memo1.Lines.Add('--------------------'); 274 {行尾} 275 rStr := TRegEx.Replace(txt, 'Delphi$', '......', [roMultiLine]); 276 Memo1.Lines.Add(rStr); 277 Memo1.Lines.Add('--------------------'); 278 rStr := TRegEx.Replace(txt, 'Delphi$', '......'); 279 Memo1.Lines.Add(rStr); 280 end; 281 {********************* 282 ...... Delphi Delphi 283 ...... Delphi Delphi 284 -------------------- 285 ...... Delphi Delphi 286 Delphi Delphi Delphi 287 -------------------- 288 Delphi Delphi ...... 289 Delphi Delphi ...... 290 -------------------- 291 Delphi Delphi Delphi 292 Delphi Delphi ...... 293 **********************} 294 295 {roExplicitCapture} 296 procedure TForm1.Button3Click(Sender: TObject); 297 const 298 pattern1 = '([A-Z]+)(d+)'; 299 pattern2 = '(?<name1>[A-Z]+)(d+)'; 300 pattern3 = '([A-Z]+)(?<3>d+)'; 301 txt = 'AA11 BB22'; 302 var 303 match: TMatch; 304 group: TGroup; 305 begin 306 Memo1.Clear; 307 308 for match in TRegEx.Matches(txt, pattern1, [roExplicitCapture]) do 309 begin 310 for group in match.Groups do 311 begin 312 Memo1.Lines.Add(group.Value); 313 end; 314 end; 315 Memo1.Lines.Add('--------------------'); 316 317 for match in TRegEx.Matches(txt, pattern1) do //此处把 pattern1 换做 pattern2 或 pattern3 均可 318 begin 319 for group in match.Groups do 320 begin 321 Memo1.Lines.Add(group.Value); 322 end; 323 end; 324 Memo1.Lines.Add('--------------------'); 325 326 for match in TRegEx.Matches(txt, pattern2, [roExplicitCapture]) do 327 begin 328 for group in match.Groups do 329 begin 330 Memo1.Lines.Add(group.Value); 331 end; 332 end; 333 Memo1.Lines.Add('--------------------'); 334 335 for match in TRegEx.Matches(txt, pattern3, [roExplicitCapture]) do 336 begin 337 for group in match.Groups do 338 begin 339 Memo1.Lines.Add(group.Value); 340 end; 341 end; 342 end; 343 {********************* 344 AA11 345 BB22 346 -------------------- 347 AA11 348 AA 349 11 350 BB22 351 BB 352 22 353 -------------------- 354 AA11 355 AA 356 BB22 357 BB 358 -------------------- 359 AA11 360 11 361 BB22 362 22 363 **********************} 364 365 {roCompiled} 366 procedure TForm1.Button4Click(Sender: TObject); 367 var 368 reg: TRegEx; 369 begin 370 reg := TRegEx.Create('d+', [roCompiled]); 371 Memo1.Text := reg.Replace('AA11 BB22', '..'); //AA.. BB.. 372 end; 373 374 {roSingleLine} 375 procedure TForm1.Button5Click(Sender: TObject); 376 const 377 pattern = '[A-Z]{1}.{1}'; 378 txt = 'A B C D'#13#10'A B C D'#13#10'A B C D'; 379 var 380 rStr: string; 381 begin 382 Memo1.Clear; 383 rStr := TRegEx.Replace(txt, pattern, '11', [roSingleLine]); 384 Memo1.Lines.Add(rStr); 385 Memo1.Lines.Add('--------------------'); 386 387 rStr := TRegEx.Replace(txt, pattern, '11'); 388 Memo1.Lines.Add(rStr); 389 end; 390 {********************* 391 11111111 392 11111111 393 111111D 394 -------------------- 395 111111D 396 111111D 397 111111D 398 **********************} 399 400 {roIgnorePatternSpace} 401 procedure TForm1.Button6Click(Sender: TObject); 402 var 403 rStr: string; 404 begin 405 Memo1.Clear; 406 {忽略空白} 407 rStr := TRegEx.Replace('ABC,A B C,AB C', 'AB C', '...', [roIgnorePatternSpace]); 408 Memo1.Lines.Add(rStr); //...,A B C,AB C 409 rStr := TRegEx.Replace('ABC,A B C,AB C', 'AB C', '...'); 410 Memo1.Lines.Add(rStr); //ABC,A B C,... 411 Memo1.Lines.Add('--------------------'); 412 413 {使用注释} 414 rStr := TRegEx.Replace('ABC123', 'ABC#*123', '...', [roIgnorePatternSpace]); 415 Memo1.Lines.Add(rStr); //...123 416 rStr := TRegEx.Replace('ABC123', 'ABC#*123', '...'); 417 Memo1.Lines.Add(rStr); //... 418 end; 419 {********************* 420 ...,A B C,AB C 421 ABC,A B C,... 422 -------------------- 423 ...123 424 ... 425 **********************} 426 427 {选项集合} 428 procedure TForm1.Button7Click(Sender: TObject); 429 const 430 pattern = '^Delphi'; 431 txt = 'DELPHI DELPHI DELPHI'#13#10'delphi delphi delphi'; 432 begin 433 Memo1.Text := TRegEx.Replace(txt, pattern, '......', [roIgnoreCase, roMultiLine]); 434 end; 435 {********************* 436 ...... DELPHI DELPHI 437 ...... delphi delphi 438 **********************}
转载于:https://www.cnblogs.com/derun/archive/2012/05/19/2508561.html