
1: # PCRE version 4.4 21-August-2003 2: 3: # Tests taken from PCRE and modified to suit glibc regex. 4: # 5: # PCRE LICENCE 6: # ------------ 7: # 8: # PCRE is a library of functions to support regular expressions whose syntax 9: # and semantics are as close as possible to those of the Perl 5 language. 10: # 11: # Written by: Philip Hazel <ph10@cam.ac.uk> 12: # 13: # University of Cambridge Computing Service, 14: # Cambridge, England. Phone: +44 1223 334714. 15: # 16: # Copyright (c) 1997-2003 University of Cambridge 17: # 18: # Permission is granted to anyone to use this software for any purpose on any 19: # computer system, and to redistribute it freely, subject to the following 20: # restrictions: 21: # 22: # 1. This software is distributed in the hope that it will be useful, 23: # but WITHOUT ANY WARRANTY; without even the implied warranty of 24: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 25: # 26: # 2. The origin of this software must not be misrepresented, either by 27: # explicit claim or by omission. In practice, this means that if you use 28: # PCRE in software that you distribute to others, commercially or 29: # otherwise, you must put a sentence like this 30: # 31: # Regular expression support is provided by the PCRE library package, 32: # which is open source software, written by Philip Hazel, and copyright 33: # by the University of Cambridge, England. 34: # 35: # somewhere reasonably visible in your documentation and in any relevant 36: # files or online help data or similar. A reference to the ftp site for 37: # the source, that is, to 38: # 39: # ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ 40: # 41: # should also be given in the documentation. However, this condition is not 42: # intended to apply to whole chains of software. If package A includes PCRE, 43: # it must acknowledge it, but if package B is software that includes package 44: # A, the condition is not imposed on package B (unless it uses PCRE 45: # independently). 46: # 47: # 3. Altered versions must be plainly marked as such, and must not be 48: # misrepresented as being the original software. 49: # 50: # 4. If PCRE is embedded in any software that is released under the GNU 51: # General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL), 52: # then the terms of that licence shall supersede any condition above with 53: # which it is incompatible. 54: # 55: # The documentation for PCRE, supplied in the "doc" directory, is distributed 56: # under the same terms as the software itself. 57: # 58: # End 59: # 60: 61: /the quick brown fox/ 62: the quick brown fox 63: 0: the quick brown fox 64: The quick brown FOX 65: No match 66: What do you know about the quick brown fox? 67: 0: the quick brown fox 68: What do you know about THE QUICK BROWN FOX? 69: No match 70: 71: /The quick brown fox/i 72: the quick brown fox 73: 0: the quick brown fox 74: The quick brown FOX 75: 0: The quick brown FOX 76: What do you know about the quick brown fox? 77: 0: the quick brown fox 78: What do you know about THE QUICK BROWN FOX? 79: 0: THE QUICK BROWN FOX 80: 81: /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/ 82: abxyzpqrrrabbxyyyypqAzz 83: 0: abxyzpqrrrabbxyyyypqAzz 84: abxyzpqrrrabbxyyyypqAzz 85: 0: abxyzpqrrrabbxyyyypqAzz 86: aabxyzpqrrrabbxyyyypqAzz 87: 0: aabxyzpqrrrabbxyyyypqAzz 88: aaabxyzpqrrrabbxyyyypqAzz 89: 0: aaabxyzpqrrrabbxyyyypqAzz 90: aaaabxyzpqrrrabbxyyyypqAzz 91: 0: aaaabxyzpqrrrabbxyyyypqAzz 92: abcxyzpqrrrabbxyyyypqAzz 93: 0: abcxyzpqrrrabbxyyyypqAzz 94: aabcxyzpqrrrabbxyyyypqAzz 95: 0: aabcxyzpqrrrabbxyyyypqAzz 96: aaabcxyzpqrrrabbxyyyypAzz 97: 0: aaabcxyzpqrrrabbxyyyypAzz 98: aaabcxyzpqrrrabbxyyyypqAzz 99: 0: aaabcxyzpqrrrabbxyyyypqAzz 100: aaabcxyzpqrrrabbxyyyypqqAzz 101: 0: aaabcxyzpqrrrabbxyyyypqqAzz 102: aaabcxyzpqrrrabbxyyyypqqqAzz 103: 0: aaabcxyzpqrrrabbxyyyypqqqAzz 104: aaabcxyzpqrrrabbxyyyypqqqqAzz 105: 0: aaabcxyzpqrrrabbxyyyypqqqqAzz 106: aaabcxyzpqrrrabbxyyyypqqqqqAzz 107: 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz 108: aaabcxyzpqrrrabbxyyyypqqqqqqAzz 109: 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz 110: aaaabcxyzpqrrrabbxyyyypqAzz 111: 0: aaaabcxyzpqrrrabbxyyyypqAzz 112: abxyzzpqrrrabbxyyyypqAzz 113: 0: abxyzzpqrrrabbxyyyypqAzz 114: aabxyzzzpqrrrabbxyyyypqAzz 115: 0: aabxyzzzpqrrrabbxyyyypqAzz 116: aaabxyzzzzpqrrrabbxyyyypqAzz 117: 0: aaabxyzzzzpqrrrabbxyyyypqAzz 118: aaaabxyzzzzpqrrrabbxyyyypqAzz 119: 0: aaaabxyzzzzpqrrrabbxyyyypqAzz 120: abcxyzzpqrrrabbxyyyypqAzz 121: 0: abcxyzzpqrrrabbxyyyypqAzz 122: aabcxyzzzpqrrrabbxyyyypqAzz 123: 0: aabcxyzzzpqrrrabbxyyyypqAzz 124: aaabcxyzzzzpqrrrabbxyyyypqAzz 125: 0: aaabcxyzzzzpqrrrabbxyyyypqAzz 126: aaaabcxyzzzzpqrrrabbxyyyypqAzz 127: 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz 128: aaaabcxyzzzzpqrrrabbbxyyyypqAzz 129: 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz 130: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz 131: 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz 132: aaabcxyzpqrrrabbxyyyypABzz 133: 0: aaabcxyzpqrrrabbxyyyypABzz 134: aaabcxyzpqrrrabbxyyyypABBzz 135: 0: aaabcxyzpqrrrabbxyyyypABBzz 136: >>>aaabxyzpqrrrabbxyyyypqAzz 137: 0: aaabxyzpqrrrabbxyyyypqAzz 138: >aaaabxyzpqrrrabbxyyyypqAzz 139: 0: aaaabxyzpqrrrabbxyyyypqAzz 140: >>>>abcxyzpqrrrabbxyyyypqAzz 141: 0: abcxyzpqrrrabbxyyyypqAzz 142: *** Failers 143: No match 144: abxyzpqrrabbxyyyypqAzz 145: No match 146: abxyzpqrrrrabbxyyyypqAzz 147: No match 148: abxyzpqrrrabxyyyypqAzz 149: No match 150: aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz 151: No match 152: aaaabcxyzzzzpqrrrabbbxyyypqAzz 153: No match 154: aaabcxyzpqrrrabbxyyyypqqqqqqqAzz 155: No match 156: 157: /^(abc){1,2}zz/ 158: abczz 159: 0: abczz 160: 1: abc 161: abcabczz 162: 0: abcabczz 163: 1: abc 164: *** Failers 165: No match 166: zz 167: No match 168: abcabcabczz 169: No match 170: >>abczz 171: No match 172: 173: /^(b+|a){1,2}c/ 174: bc 175: 0: bc 176: 1: b 177: bbc 178: 0: bbc 179: 1: bb 180: bbbc 181: 0: bbbc 182: 1: bbb 183: bac 184: 0: bac 185: 1: a 186: bbac 187: 0: bbac 188: 1: a 189: aac 190: 0: aac 191: 1: a 192: abbbbbbbbbbbc 193: 0: abbbbbbbbbbbc 194: 1: bbbbbbbbbbb 195: bbbbbbbbbbbac 196: 0: bbbbbbbbbbbac 197: 1: a 198: *** Failers 199: No match 200: aaac 201: No match 202: abbbbbbbbbbbac 203: No match 204: 205: /^[]cde]/ 206: ]thing 207: 0: ] 208: cthing 209: 0: c 210: dthing 211: 0: d 212: ething 213: 0: e 214: *** Failers 215: No match 216: athing 217: No match 218: fthing 219: No match 220: 221: /^[^]cde]/ 222: athing 223: 0: a 224: fthing 225: 0: f 226: *** Failers 227: 0: * 228: ]thing 229: No match 230: cthing 231: No match 232: dthing 233: No match 234: ething 235: No match 236: 237: /^[0-9]+$/ 238: 0 239: 0: 0 240: 1 241: 0: 1 242: 2 243: 0: 2 244: 3 245: 0: 3 246: 4 247: 0: 4 248: 5 249: 0: 5 250: 6 251: 0: 6 252: 7 253: 0: 7 254: 8 255: 0: 8 256: 9 257: 0: 9 258: 10 259: 0: 10 260: 100 261: 0: 100 262: *** Failers 263: No match 264: abc 265: No match 266: 267: /^.*nter/ 268: enter 269: 0: enter 270: inter 271: 0: inter 272: uponter 273: 0: uponter 274: 275: /^xxx[0-9]+$/ 276: xxx0 277: 0: xxx0 278: xxx1234 279: 0: xxx1234 280: *** Failers 281: No match 282: xxx 283: No match 284: 285: /^.+[0-9][0-9][0-9]$/ 286: x123 287: 0: x123 288: xx123 289: 0: xx123 290: 123456 291: 0: 123456 292: *** Failers 293: No match 294: 123 295: No match 296: x1234 297: 0: x1234 298: 299: /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/ 300: abc!pqr=apquxz.ixr.zzz.ac.uk 301: 0: abc!pqr=apquxz.ixr.zzz.ac.uk 302: 1: abc 303: 2: pqr 304: *** Failers 305: No match 306: !pqr=apquxz.ixr.zzz.ac.uk 307: No match 308: abc!=apquxz.ixr.zzz.ac.uk 309: No match 310: abc!pqr=apquxz:ixr.zzz.ac.uk 311: No match 312: abc!pqr=apquxz.ixr.zzz.ac.ukk 313: No match 314: 315: /:/ 316: Well, we need a colon: somewhere 317: 0: : 318: *** Fail if we don't 319: No match 320: 321: /([0-9a-f:]+)$/i 322: 0abc 323: 0: 0abc 324: 1: 0abc 325: abc 326: 0: abc 327: 1: abc 328: fed 329: 0: fed 330: 1: fed 331: E 332: 0: E 333: 1: E 334: :: 335: 0: :: 336: 1: :: 337: 5f03:12C0::932e 338: 0: 5f03:12C0::932e 339: 1: 5f03:12C0::932e 340: fed def 341: 0: def 342: 1: def 343: Any old stuff 344: 0: ff 345: 1: ff 346: *** Failers 347: No match 348: 0zzz 349: No match 350: gzzz 351: No match 352: Any old rubbish 353: No match 354: 355: /^.*\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/ 356: .1.2.3 357: 0: .1.2.3 358: 1: 1 359: 2: 2 360: 3: 3 361: A.12.123.0 362: 0: A.12.123.0 363: 1: 12 364: 2: 123 365: 3: 0 366: *** Failers 367: No match 368: .1.2.3333 369: No match 370: 1.2.3 371: No match 372: 1234.2.3 373: No match 374: 375: /^([0-9]+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/ 376: 1 IN SOA non-sp1 non-sp2( 377: 0: 1 IN SOA non-sp1 non-sp2( 378: 1: 1 379: 2: non-sp1 380: 3: non-sp2 381: 1 IN SOA non-sp1 non-sp2 ( 382: 0: 1 IN SOA non-sp1 non-sp2 ( 383: 1: 1 384: 2: non-sp1 385: 3: non-sp2 386: *** Failers 387: No match 388: 1IN SOA non-sp1 non-sp2( 389: No match 390: 391: /^[a-zA-Z0-9][a-zA-Z0-9-]*(\.[a-zA-Z0-9][a-zA-z0-9-]*)*\.$/ 392: a. 393: 0: a. 394: Z. 395: 0: Z. 396: 2. 397: 0: 2. 398: ab-c.pq-r. 399: 0: ab-c.pq-r. 400: 1: .pq-r 401: sxk.zzz.ac.uk. 402: 0: sxk.zzz.ac.uk. 403: 1: .uk 404: x-.y-. 405: 0: x-.y-. 406: 1: .y- 407: *** Failers 408: No match 409: -abc.peq. 410: No match 411: 412: /^\*\.[a-z]([a-z0-9-]*[a-z0-9]+)?(\.[a-z]([a-z0-9-]*[a-z0-9]+)?)*$/ 413: *.a 414: 0: *.a 415: *.b0-a 416: 0: *.b0-a 417: 1: 0-a 418: *.c3-b.c 419: 0: *.c3-b.c 420: 1: 3-b 421: 2: .c 422: *.c-a.b-c 423: 0: *.c-a.b-c 424: 1: -a 425: 2: .b-c 426: 3: -c 427: *** Failers 428: No match 429: *.0 430: No match 431: *.a- 432: No match 433: *.a-b.c- 434: No match 435: *.c-a.0-c 436: No match 437: 438: /^[0-9a-f](\.[0-9a-f])*$/i 439: a.b.c.d 440: 0: a.b.c.d 441: 1: .d 442: A.B.C.D 443: 0: A.B.C.D 444: 1: .D 445: a.b.c.1.2.3.C 446: 0: a.b.c.1.2.3.C 447: 1: .C 448: 449: /^".*"\s*(;.*)?$/ 450: "1234" 451: 0: "1234" 452: "abcd" ; 453: 0: "abcd" ; 454: 1: ; 455: "" ; rhubarb 456: 0: "" ; rhubarb 457: 1: ; rhubarb 458: *** Failers 459: No match 460: "1234" : things 461: No match 462: 463: /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/ 464: abcdefhijklm 465: 0: abcdefhijklm 466: 1: abc 467: 2: bc 468: 3: c 469: 4: def 470: 5: ef 471: 6: f 472: 7: hij 473: 8: ij 474: 9: j 475: 10: klm 476: 11: lm 477: 12: m 478: 479: /^a*\w/ 480: z 481: 0: z 482: az 483: 0: az 484: aaaz 485: 0: aaaz 486: a 487: 0: a 488: aa 489: 0: aa 490: aaaa 491: 0: aaaa 492: a+ 493: 0: a 494: aa+ 495: 0: aa 496: 497: /^a+\w/ 498: az 499: 0: az 500: aaaz 501: 0: aaaz 502: aa 503: 0: aa 504: aaaa 505: 0: aaaa 506: aa+ 507: 0: aa 508: 509: /^[0-9]{8}\w{2,}/ 510: 1234567890 511: 0: 1234567890 512: 12345678ab 513: 0: 12345678ab 514: 12345678__ 515: 0: 12345678__ 516: *** Failers 517: No match 518: 1234567 519: No match 520: 521: /^[aeiou0-9]{4,5}$/ 522: uoie 523: 0: uoie 524: 1234 525: 0: 1234 526: 12345 527: 0: 12345 528: aaaaa 529: 0: aaaaa 530: *** Failers 531: No match 532: 123456 533: No match 534: 535: /\`(abc|def)=(\1){2,3}\'/ 536: abc=abcabc 537: 0: abc=abcabc 538: 1: abc 539: 2: abc 540: def=defdefdef 541: 0: def=defdefdef 542: 1: def 543: 2: def 544: *** Failers 545: No match 546: abc=defdef 547: No match 548: 549: /(cat(a(ract|tonic)|erpillar)) \1()2(3)/ 550: cataract cataract23 551: 0: cataract cataract23 552: 1: cataract 553: 2: aract 554: 3: ract 555: 4: 556: 5: 3 557: catatonic catatonic23 558: 0: catatonic catatonic23 559: 1: catatonic 560: 2: atonic 561: 3: tonic 562: 4: 563: 5: 3 564: caterpillar caterpillar23 565: 0: caterpillar caterpillar23 566: 1: caterpillar 567: 2: erpillar 568: 3: <unset> 569: 4: 570: 5: 3 571: 572: 573: /^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/ 574: From abcd Mon Sep 01 12:33:02 1997 575: 0: From abcd Mon Sep 01 12:33 576: 1: abcd 577: 578: /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}[0-9]{1,2}\s+[0-9][0-9]:[0-9][0-9]/ 579: From abcd Mon Sep 01 12:33:02 1997 580: 0: From abcd Mon Sep 01 12:33 581: 1: Sep 582: From abcd Mon Sep 1 12:33:02 1997 583: 0: From abcd Mon Sep 1 12:33 584: 1: Sep 585: *** Failers 586: No match 587: From abcd Sep 01 12:33:02 1997 588: No match 589: 590: /^(a)\1{2,3}(.)/ 591: aaab 592: 0: aaab 593: 1: a 594: 2: b 595: aaaab 596: 0: aaaab 597: 1: a 598: 2: b 599: aaaaab 600: 0: aaaaa 601: 1: a 602: 2: a 603: aaaaaab 604: 0: aaaaa 605: 1: a 606: 2: a 607: 608: /^[ab]{1,3}(ab*|b)/ 609: aabbbbb 610: 0: aabbbbb 611: 1: abbbbb 612: 613: /^(cow|)\1(bell)/ 614: cowcowbell 615: 0: cowcowbell 616: 1: cow 617: 2: bell 618: bell 619: 0: bell 620: 1: 621: 2: bell 622: *** Failers 623: No match 624: cowbell 625: No match 626: 627: /^(a|)\1+b/ 628: aab 629: 0: aab 630: 1: a 631: aaaab 632: 0: aaaab 633: 1: a 634: b 635: 0: b 636: 1: 637: *** Failers 638: No match 639: ab 640: No match 641: 642: /^(a|)\1{2}b/ 643: aaab 644: 0: aaab 645: 1: a 646: b 647: 0: b 648: 1: 649: *** Failers 650: No match 651: ab 652: No match 653: aab 654: No match 655: aaaab 656: No match 657: 658: /^(a|)\1{2,3}b/ 659: aaab 660: 0: aaab 661: 1: a 662: aaaab 663: 0: aaaab 664: 1: a 665: b 666: 0: b 667: 1: 668: *** Failers 669: No match 670: ab 671: No match 672: aab 673: No match 674: aaaaab 675: No match 676: 677: /ab{1,3}bc/ 678: abbbbc 679: 0: abbbbc 680: abbbc 681: 0: abbbc 682: abbc 683: 0: abbc 684: *** Failers 685: No match 686: abc 687: No match 688: abbbbbc 689: No match 690: 691: /([^.]*)\.([^:]*):[T ]+(.*)/ 692: track1.title:TBlah blah blah 693: 0: track1.title:TBlah blah blah 694: 1: track1 695: 2: title 696: 3: Blah blah blah 697: 698: /([^.]*)\.([^:]*):[T ]+(.*)/i 699: track1.title:TBlah blah blah 700: 0: track1.title:TBlah blah blah 701: 1: track1 702: 2: title 703: 3: Blah blah blah 704: 705: /([^.]*)\.([^:]*):[t ]+(.*)/i 706: track1.title:TBlah blah blah 707: 0: track1.title:TBlah blah blah 708: 1: track1 709: 2: title 710: 3: Blah blah blah 711: 712: /^abc$/ 713: abc 714: 0: abc 715: *** Failers 716: No match 717: 718: /[-az]+/ 719: az- 720: 0: az- 721: *** Failers 722: 0: a 723: b 724: No match 725: 726: /[az-]+/ 727: za- 728: 0: za- 729: *** Failers 730: 0: a 731: b 732: No match 733: 734: /[a-z]+/ 735: abcdxyz 736: 0: abcdxyz 737: 738: /[0-9-]+/ 739: 12-34 740: 0: 12-34 741: *** Failers 742: No match 743: aaa 744: No match 745: 746: /(abc)\1/i 747: abcabc 748: 0: abcabc 749: 1: abc 750: ABCabc 751: 0: ABCabc 752: 1: ABC 753: abcABC 754: 0: abcABC 755: 1: abc 756: 757: /a{0}bc/ 758: bc 759: 0: bc 760: 761: /^([^a])([^b])([^c]*)([^d]{3,4})/ 762: baNOTccccd 763: 0: baNOTcccc 764: 1: b 765: 2: a 766: 3: NOT 767: 4: cccc 768: baNOTcccd 769: 0: baNOTccc 770: 1: b 771: 2: a 772: 3: NOT 773: 4: ccc 774: baNOTccd 775: 0: baNOTcc 776: 1: b 777: 2: a 778: 3: NO 779: 4: Tcc 780: bacccd 781: 0: baccc 782: 1: b 783: 2: a 784: 3: 785: 4: ccc 786: *** Failers 787: 0: *** Failers 788: 1: * 789: 2: * 790: 3: * Fail 791: 4: ers 792: anything 793: No match 794: baccd 795: No match 796: 797: /[^a]/ 798: Abc 799: 0: A 800: 801: /[^a]/i 802: Abc 803: 0: b 804: 805: /[^a]+/ 806: AAAaAbc 807: 0: AAA 808: 809: /[^a]+/i 810: AAAaAbc 811: 0: bc 812: 813: /[^k]$/ 814: abc 815: 0: c 816: *** Failers 817: 0: s 818: abk 819: No match 820: 821: /[^k]{2,3}$/ 822: abc 823: 0: abc 824: kbc 825: 0: bc 826: kabc 827: 0: abc 828: *** Failers 829: 0: ers 830: abk 831: No match 832: akb 833: No match 834: akk 835: No match 836: 837: /^[0-9]{8,}@.+[^k]$/ 838: 12345678@a.b.c.d 839: 0: 12345678@a.b.c.d 840: 123456789@x.y.z 841: 0: 123456789@x.y.z 842: *** Failers 843: No match 844: 12345678@x.y.uk 845: No match 846: 1234567@a.b.c.d 847: No match 848: 849: /(a)\1{8,}/ 850: aaaaaaaaa 851: 0: aaaaaaaaa 852: 1: a 853: aaaaaaaaaa 854: 0: aaaaaaaaaa 855: 1: a 856: *** Failers 857: No match 858: aaaaaaa 859: No match 860: 861: /[^a]/ 862: aaaabcd 863: 0: b 864: aaAabcd 865: 0: A 866: 867: /[^a]/i 868: aaaabcd 869: 0: b 870: aaAabcd 871: 0: b 872: 873: /[^az]/ 874: aaaabcd 875: 0: b 876: aaAabcd 877: 0: A 878: 879: /[^az]/i 880: aaaabcd 881: 0: b 882: aaAabcd 883: 0: b 884: 885: /P[^*]TAIRE[^*]{1,6}LL/ 886: xxxxxxxxxxxPSTAIREISLLxxxxxxxxx 887: 0: PSTAIREISLL 888: 889: /P[^*]TAIRE[^*]{1,}LL/ 890: xxxxxxxxxxxPSTAIREISLLxxxxxxxxx 891: 0: PSTAIREISLL 892: