1# This set of tests is for features that are compatible with all versions of 2# Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and 3# 32-bit PCRE libraries, and also using the perltest.pl script. 4 5#forbid_utf 6#newline_default lf any anycrlf 7#perltest 8 9/the quick brown fox/ 10 the quick brown fox 11 0: the quick brown fox 12 What do you know about the quick brown fox? 13 0: the quick brown fox 14\= Expect no match 15 The quick brown FOX 16No match 17 What do you know about THE QUICK BROWN FOX? 18No match 19 20/The quick brown fox/i 21 the quick brown fox 22 0: the quick brown fox 23 The quick brown FOX 24 0: The quick brown FOX 25 What do you know about the quick brown fox? 26 0: the quick brown fox 27 What do you know about THE QUICK BROWN FOX? 28 0: THE QUICK BROWN FOX 29 30/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/ 31 abcd\t\n\r\f\a\e9;\$\\?caxyz 32 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz 33 34/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/ 35 abxyzpqrrrabbxyyyypqAzz 36 0: abxyzpqrrrabbxyyyypqAzz 37 abxyzpqrrrabbxyyyypqAzz 38 0: abxyzpqrrrabbxyyyypqAzz 39 aabxyzpqrrrabbxyyyypqAzz 40 0: aabxyzpqrrrabbxyyyypqAzz 41 aaabxyzpqrrrabbxyyyypqAzz 42 0: aaabxyzpqrrrabbxyyyypqAzz 43 aaaabxyzpqrrrabbxyyyypqAzz 44 0: aaaabxyzpqrrrabbxyyyypqAzz 45 abcxyzpqrrrabbxyyyypqAzz 46 0: abcxyzpqrrrabbxyyyypqAzz 47 aabcxyzpqrrrabbxyyyypqAzz 48 0: aabcxyzpqrrrabbxyyyypqAzz 49 aaabcxyzpqrrrabbxyyyypAzz 50 0: aaabcxyzpqrrrabbxyyyypAzz 51 aaabcxyzpqrrrabbxyyyypqAzz 52 0: aaabcxyzpqrrrabbxyyyypqAzz 53 aaabcxyzpqrrrabbxyyyypqqAzz 54 0: aaabcxyzpqrrrabbxyyyypqqAzz 55 aaabcxyzpqrrrabbxyyyypqqqAzz 56 0: aaabcxyzpqrrrabbxyyyypqqqAzz 57 aaabcxyzpqrrrabbxyyyypqqqqAzz 58 0: aaabcxyzpqrrrabbxyyyypqqqqAzz 59 aaabcxyzpqrrrabbxyyyypqqqqqAzz 60 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz 61 aaabcxyzpqrrrabbxyyyypqqqqqqAzz 62 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz 63 aaaabcxyzpqrrrabbxyyyypqAzz 64 0: aaaabcxyzpqrrrabbxyyyypqAzz 65 abxyzzpqrrrabbxyyyypqAzz 66 0: abxyzzpqrrrabbxyyyypqAzz 67 aabxyzzzpqrrrabbxyyyypqAzz 68 0: aabxyzzzpqrrrabbxyyyypqAzz 69 aaabxyzzzzpqrrrabbxyyyypqAzz 70 0: aaabxyzzzzpqrrrabbxyyyypqAzz 71 aaaabxyzzzzpqrrrabbxyyyypqAzz 72 0: aaaabxyzzzzpqrrrabbxyyyypqAzz 73 abcxyzzpqrrrabbxyyyypqAzz 74 0: abcxyzzpqrrrabbxyyyypqAzz 75 aabcxyzzzpqrrrabbxyyyypqAzz 76 0: aabcxyzzzpqrrrabbxyyyypqAzz 77 aaabcxyzzzzpqrrrabbxyyyypqAzz 78 0: aaabcxyzzzzpqrrrabbxyyyypqAzz 79 aaaabcxyzzzzpqrrrabbxyyyypqAzz 80 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz 81 aaaabcxyzzzzpqrrrabbbxyyyypqAzz 82 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz 83 aaaabcxyzzzzpqrrrabbbxyyyyypqAzz 84 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz 85 aaabcxyzpqrrrabbxyyyypABzz 86 0: aaabcxyzpqrrrabbxyyyypABzz 87 aaabcxyzpqrrrabbxyyyypABBzz 88 0: aaabcxyzpqrrrabbxyyyypABBzz 89 >>>aaabxyzpqrrrabbxyyyypqAzz 90 0: aaabxyzpqrrrabbxyyyypqAzz 91 >aaaabxyzpqrrrabbxyyyypqAzz 92 0: aaaabxyzpqrrrabbxyyyypqAzz 93 >>>>abcxyzpqrrrabbxyyyypqAzz 94 0: abcxyzpqrrrabbxyyyypqAzz 95\= Expect no match 96 abxyzpqrrabbxyyyypqAzz 97No match 98 abxyzpqrrrrabbxyyyypqAzz 99No match 100 abxyzpqrrrabxyyyypqAzz 101No match 102 aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz 103No match 104 aaaabcxyzzzzpqrrrabbbxyyypqAzz 105No match 106 aaabcxyzpqrrrabbxyyyypqqqqqqqAzz 107No match 108 109/^(abc){1,2}zz/ 110 abczz 111 0: abczz 112 1: abc 113 abcabczz 114 0: abcabczz 115 1: abc 116\= Expect no match 117 zz 118No match 119 abcabcabczz 120No match 121 >>abczz 122No match 123 124/^(b+?|a){1,2}?c/ 125 bc 126 0: bc 127 1: b 128 bbc 129 0: bbc 130 1: b 131 bbbc 132 0: bbbc 133 1: bb 134 bac 135 0: bac 136 1: a 137 bbac 138 0: bbac 139 1: a 140 aac 141 0: aac 142 1: a 143 abbbbbbbbbbbc 144 0: abbbbbbbbbbbc 145 1: bbbbbbbbbbb 146 bbbbbbbbbbbac 147 0: bbbbbbbbbbbac 148 1: a 149\= Expect no match 150 aaac 151No match 152 abbbbbbbbbbbac 153No match 154 155/^(b+|a){1,2}c/ 156 bc 157 0: bc 158 1: b 159 bbc 160 0: bbc 161 1: bb 162 bbbc 163 0: bbbc 164 1: bbb 165 bac 166 0: bac 167 1: a 168 bbac 169 0: bbac 170 1: a 171 aac 172 0: aac 173 1: a 174 abbbbbbbbbbbc 175 0: abbbbbbbbbbbc 176 1: bbbbbbbbbbb 177 bbbbbbbbbbbac 178 0: bbbbbbbbbbbac 179 1: a 180\= Expect no match 181 aaac 182No match 183 abbbbbbbbbbbac 184No match 185 186/^(b+|a){1,2}?bc/ 187 bbc 188 0: bbc 189 1: b 190 191/^(b*|ba){1,2}?bc/ 192 babc 193 0: babc 194 1: ba 195 bbabc 196 0: bbabc 197 1: ba 198 bababc 199 0: bababc 200 1: ba 201\= Expect no match 202 bababbc 203No match 204 babababc 205No match 206 207/^(ba|b*){1,2}?bc/ 208 babc 209 0: babc 210 1: ba 211 bbabc 212 0: bbabc 213 1: ba 214 bababc 215 0: bababc 216 1: ba 217\= Expect no match 218 bababbc 219No match 220 babababc 221No match 222 223/^\ca\cA\c[;\c:/ 224 \x01\x01\e;z 225 0: \x01\x01\x1b;z 226 227/^[ab\]cde]/ 228 athing 229 0: a 230 bthing 231 0: b 232 ]thing 233 0: ] 234 cthing 235 0: c 236 dthing 237 0: d 238 ething 239 0: e 240\= Expect no match 241 fthing 242No match 243 [thing 244No match 245 \\thing 246No match 247 248/^[]cde]/ 249 ]thing 250 0: ] 251 cthing 252 0: c 253 dthing 254 0: d 255 ething 256 0: e 257\= Expect no match 258 athing 259No match 260 fthing 261No match 262 263/^[^ab\]cde]/ 264 fthing 265 0: f 266 [thing 267 0: [ 268 \\thing 269 0: \ 270\= Expect no match 271 athing 272No match 273 bthing 274No match 275 ]thing 276No match 277 cthing 278No match 279 dthing 280No match 281 ething 282No match 283 284/^[^]cde]/ 285 athing 286 0: a 287 fthing 288 0: f 289\= Expect no match 290 ]thing 291No match 292 cthing 293No match 294 dthing 295No match 296 ething 297No match 298 299/^\�/ 300 � 301 0: \x81 302 303/^�/ 304 � 305 0: \xff 306 307/^[0-9]+$/ 308 0 309 0: 0 310 1 311 0: 1 312 2 313 0: 2 314 3 315 0: 3 316 4 317 0: 4 318 5 319 0: 5 320 6 321 0: 6 322 7 323 0: 7 324 8 325 0: 8 326 9 327 0: 9 328 10 329 0: 10 330 100 331 0: 100 332\= Expect no match 333 abc 334No match 335 336/^.*nter/ 337 enter 338 0: enter 339 inter 340 0: inter 341 uponter 342 0: uponter 343 344/^xxx[0-9]+$/ 345 xxx0 346 0: xxx0 347 xxx1234 348 0: xxx1234 349\= Expect no match 350 xxx 351No match 352 353/^.+[0-9][0-9][0-9]$/ 354 x123 355 0: x123 356 x1234 357 0: x1234 358 xx123 359 0: xx123 360 123456 361 0: 123456 362\= Expect no match 363 123 364No match 365 366/^.+?[0-9][0-9][0-9]$/ 367 x123 368 0: x123 369 x1234 370 0: x1234 371 xx123 372 0: xx123 373 123456 374 0: 123456 375\= Expect no match 376 123 377No match 378 379/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/ 380 abc!pqr=apquxz.ixr.zzz.ac.uk 381 0: abc!pqr=apquxz.ixr.zzz.ac.uk 382 1: abc 383 2: pqr 384\= Expect no match 385 !pqr=apquxz.ixr.zzz.ac.uk 386No match 387 abc!=apquxz.ixr.zzz.ac.uk 388No match 389 abc!pqr=apquxz:ixr.zzz.ac.uk 390No match 391 abc!pqr=apquxz.ixr.zzz.ac.ukk 392No match 393 394/:/ 395 Well, we need a colon: somewhere 396 0: : 397\= Expect no match 398 Fail without a colon 399No match 400 401/([\da-f:]+)$/i 402 0abc 403 0: 0abc 404 1: 0abc 405 abc 406 0: abc 407 1: abc 408 fed 409 0: fed 410 1: fed 411 E 412 0: E 413 1: E 414 :: 415 0: :: 416 1: :: 417 5f03:12C0::932e 418 0: 5f03:12C0::932e 419 1: 5f03:12C0::932e 420 fed def 421 0: def 422 1: def 423 Any old stuff 424 0: ff 425 1: ff 426\= Expect no match 427 0zzz 428No match 429 gzzz 430No match 431 fed\x20 432No match 433 Any old rubbish 434No match 435 436/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/ 437 .1.2.3 438 0: .1.2.3 439 1: 1 440 2: 2 441 3: 3 442 A.12.123.0 443 0: A.12.123.0 444 1: 12 445 2: 123 446 3: 0 447\= Expect no match 448 .1.2.3333 449No match 450 1.2.3 451No match 452 1234.2.3 453No match 454 455/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/ 456 1 IN SOA non-sp1 non-sp2( 457 0: 1 IN SOA non-sp1 non-sp2( 458 1: 1 459 2: non-sp1 460 3: non-sp2 461 1 IN SOA non-sp1 non-sp2 ( 462 0: 1 IN SOA non-sp1 non-sp2 ( 463 1: 1 464 2: non-sp1 465 3: non-sp2 466\= Expect no match 467 1IN SOA non-sp1 non-sp2( 468No match 469 470/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/ 471 a. 472 0: a. 473 Z. 474 0: Z. 475 2. 476 0: 2. 477 ab-c.pq-r. 478 0: ab-c.pq-r. 479 1: .pq-r 480 sxk.zzz.ac.uk. 481 0: sxk.zzz.ac.uk. 482 1: .uk 483 x-.y-. 484 0: x-.y-. 485 1: .y- 486\= Expect no match 487 -abc.peq. 488No match 489 490/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/ 491 *.a 492 0: *.a 493 *.b0-a 494 0: *.b0-a 495 1: 0-a 496 *.c3-b.c 497 0: *.c3-b.c 498 1: 3-b 499 2: .c 500 *.c-a.b-c 501 0: *.c-a.b-c 502 1: -a 503 2: .b-c 504 3: -c 505\= Expect no match 506 *.0 507No match 508 *.a- 509No match 510 *.a-b.c- 511No match 512 *.c-a.0-c 513No match 514 515/^(?=ab(de))(abd)(e)/ 516 abde 517 0: abde 518 1: de 519 2: abd 520 3: e 521 522/^(?!(ab)de|x)(abd)(f)/ 523 abdf 524 0: abdf 525 1: <unset> 526 2: abd 527 3: f 528 529/^(?=(ab(cd)))(ab)/ 530 abcd 531 0: ab 532 1: abcd 533 2: cd 534 3: ab 535 536/^[\da-f](\.[\da-f])*$/i 537 a.b.c.d 538 0: a.b.c.d 539 1: .d 540 A.B.C.D 541 0: A.B.C.D 542 1: .D 543 a.b.c.1.2.3.C 544 0: a.b.c.1.2.3.C 545 1: .C 546 547/^\".*\"\s*(;.*)?$/ 548 \"1234\" 549 0: "1234" 550 \"abcd\" ; 551 0: "abcd" ; 552 1: ; 553 \"\" ; rhubarb 554 0: "" ; rhubarb 555 1: ; rhubarb 556\= Expect no match 557 \"1234\" : things 558No match 559 560/^$/ 561 \ 562 0: 563\= Expect no match 564 A non-empty line 565No match 566 567/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x 568 ab c 569 0: ab c 570\= Expect no match 571 abc 572No match 573 ab cde 574No match 575 576/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/ 577 ab c 578 0: ab c 579\= Expect no match 580 abc 581No match 582 ab cde 583No match 584 585/^ a\ b[c ]d $/x 586 a bcd 587 0: a bcd 588 a b d 589 0: a b d 590\= Expect no match 591 abcd 592No match 593 ab d 594No match 595 596/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/ 597 abcdefhijklm 598 0: abcdefhijklm 599 1: abc 600 2: bc 601 3: c 602 4: def 603 5: ef 604 6: f 605 7: hij 606 8: ij 607 9: j 60810: klm 60911: lm 61012: m 611 612/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/ 613 abcdefhijklm 614 0: abcdefhijklm 615 1: bc 616 2: c 617 3: ef 618 4: f 619 5: ij 620 6: j 621 7: lm 622 8: m 623 624/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/ 625 a+ Z0+\x08\n\x1d\x12 626 0: a+ Z0+\x08\x0a\x1d\x12 627 628/^[.^$|()*+?{,}]+/ 629 .^\$(*+)|{?,?} 630 0: .^$(*+)|{?,?} 631 632/^a*\w/ 633 z 634 0: z 635 az 636 0: az 637 aaaz 638 0: aaaz 639 a 640 0: a 641 aa 642 0: aa 643 aaaa 644 0: aaaa 645 a+ 646 0: a 647 aa+ 648 0: aa 649 650/^a*?\w/ 651 z 652 0: z 653 az 654 0: a 655 aaaz 656 0: a 657 a 658 0: a 659 aa 660 0: a 661 aaaa 662 0: a 663 a+ 664 0: a 665 aa+ 666 0: a 667 668/^a+\w/ 669 az 670 0: az 671 aaaz 672 0: aaaz 673 aa 674 0: aa 675 aaaa 676 0: aaaa 677 aa+ 678 0: aa 679 680/^a+?\w/ 681 az 682 0: az 683 aaaz 684 0: aa 685 aa 686 0: aa 687 aaaa 688 0: aa 689 aa+ 690 0: aa 691 692/^\d{8}\w{2,}/ 693 1234567890 694 0: 1234567890 695 12345678ab 696 0: 12345678ab 697 12345678__ 698 0: 12345678__ 699\= Expect no match 700 1234567 701No match 702 703/^[aeiou\d]{4,5}$/ 704 uoie 705 0: uoie 706 1234 707 0: 1234 708 12345 709 0: 12345 710 aaaaa 711 0: aaaaa 712\= Expect no match 713 123456 714No match 715 716/^[aeiou\d]{4,5}?/ 717 uoie 718 0: uoie 719 1234 720 0: 1234 721 12345 722 0: 1234 723 aaaaa 724 0: aaaa 725 123456 726 0: 1234 727 728/\A(abc|def)=(\1){2,3}\Z/ 729 abc=abcabc 730 0: abc=abcabc 731 1: abc 732 2: abc 733 def=defdefdef 734 0: def=defdefdef 735 1: def 736 2: def 737\= Expect no match 738 abc=defdef 739No match 740 741/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/ 742 abcdefghijkcda2 743 0: abcdefghijkcda2 744 1: a 745 2: b 746 3: c 747 4: d 748 5: e 749 6: f 750 7: g 751 8: h 752 9: i 75310: j 75411: k 75512: cd 756 abcdefghijkkkkcda2 757 0: abcdefghijkkkkcda2 758 1: a 759 2: b 760 3: c 761 4: d 762 5: e 763 6: f 764 7: g 765 8: h 766 9: i 76710: j 76811: k 76912: cd 770 771/(cat(a(ract|tonic)|erpillar)) \1()2(3)/ 772 cataract cataract23 773 0: cataract cataract23 774 1: cataract 775 2: aract 776 3: ract 777 4: 778 5: 3 779 catatonic catatonic23 780 0: catatonic catatonic23 781 1: catatonic 782 2: atonic 783 3: tonic 784 4: 785 5: 3 786 caterpillar caterpillar23 787 0: caterpillar caterpillar23 788 1: caterpillar 789 2: erpillar 790 3: <unset> 791 4: 792 5: 3 793 794 795/^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]/ 796 From abcd Mon Sep 01 12:33:02 1997 797 0: From abcd Mon Sep 01 12:33 798 1: abcd 799 800/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/ 801 From abcd Mon Sep 01 12:33:02 1997 802 0: From abcd Mon Sep 01 12:33 803 1: Sep 804 From abcd Mon Sep 1 12:33:02 1997 805 0: From abcd Mon Sep 1 12:33 806 1: Sep 807\= Expect no match 808 From abcd Sep 01 12:33:02 1997 809No match 810 811/^12.34/s 812 12\n34 813 0: 12\x0a34 814 12\r34 815 0: 12\x0d34 816 817/\w+(?=\t)/ 818 the quick brown\t fox 819 0: brown 820 821/foo(?!bar)(.*)/ 822 foobar is foolish see? 823 0: foolish see? 824 1: lish see? 825 826/(?:(?!foo)...|^.{0,2})bar(.*)/ 827 foobar crowbar etc 828 0: rowbar etc 829 1: etc 830 barrel 831 0: barrel 832 1: rel 833 2barrel 834 0: 2barrel 835 1: rel 836 A barrel 837 0: A barrel 838 1: rel 839 840/^(\D*)(?=\d)(?!123)/ 841 abc456 842 0: abc 843 1: abc 844\= Expect no match 845 abc123 846No match 847 848/^1234(?# test newlines 849 inside)/ 850 1234 851 0: 1234 852 853/^1234 #comment in extended re 854 /x 855 1234 856 0: 1234 857 858/#rhubarb 859 abcd/x 860 abcd 861 0: abcd 862 863/^abcd#rhubarb/x 864 abcd 865 0: abcd 866 867/^(a)\1{2,3}(.)/ 868 aaab 869 0: aaab 870 1: a 871 2: b 872 aaaab 873 0: aaaab 874 1: a 875 2: b 876 aaaaab 877 0: aaaaa 878 1: a 879 2: a 880 aaaaaab 881 0: aaaaa 882 1: a 883 2: a 884 885/(?!^)abc/ 886 the abc 887 0: abc 888\= Expect no match 889 abc 890No match 891 892/(?=^)abc/ 893 abc 894 0: abc 895\= Expect no match 896 the abc 897No match 898 899/^[ab]{1,3}(ab*|b)/ 900 aabbbbb 901 0: aabb 902 1: b 903 904/^[ab]{1,3}?(ab*|b)/ 905 aabbbbb 906 0: aabbbbb 907 1: abbbbb 908 909/^[ab]{1,3}?(ab*?|b)/ 910 aabbbbb 911 0: aa 912 1: a 913 914/^[ab]{1,3}(ab*?|b)/ 915 aabbbbb 916 0: aabb 917 1: b 918 919/ (?: [\040\t] | \( 920(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 921\) )* # optional leading comment 922(?: (?: 923[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 924(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 925| 926" (?: # opening quote... 927[^\\\x80-\xff\n\015"] # Anything except backslash and quote 928| # or 929\\ [^\x80-\xff] # Escaped something (something != CR) 930)* " # closing quote 931) # initial word 932(?: (?: [\040\t] | \( 933(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 934\) )* \. (?: [\040\t] | \( 935(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 936\) )* (?: 937[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 938(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 939| 940" (?: # opening quote... 941[^\\\x80-\xff\n\015"] # Anything except backslash and quote 942| # or 943\\ [^\x80-\xff] # Escaped something (something != CR) 944)* " # closing quote 945) )* # further okay, if led by a period 946(?: [\040\t] | \( 947(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 948\) )* @ (?: [\040\t] | \( 949(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 950\) )* (?: 951[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 952(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 953| \[ # [ 954(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 955\] # ] 956) # initial subdomain 957(?: # 958(?: [\040\t] | \( 959(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 960\) )* \. # if led by a period... 961(?: [\040\t] | \( 962(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 963\) )* (?: 964[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 965(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 966| \[ # [ 967(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 968\] # ] 969) # ...further okay 970)* 971# address 972| # or 973(?: 974[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 975(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 976| 977" (?: # opening quote... 978[^\\\x80-\xff\n\015"] # Anything except backslash and quote 979| # or 980\\ [^\x80-\xff] # Escaped something (something != CR) 981)* " # closing quote 982) # one word, optionally followed by.... 983(?: 984[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or... 985\( 986(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 987\) | # comments, or... 988 989" (?: # opening quote... 990[^\\\x80-\xff\n\015"] # Anything except backslash and quote 991| # or 992\\ [^\x80-\xff] # Escaped something (something != CR) 993)* " # closing quote 994# quoted strings 995)* 996< (?: [\040\t] | \( 997(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 998\) )* # leading < 999(?: @ (?: [\040\t] | \( 1000(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1001\) )* (?: 1002[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1003(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1004| \[ # [ 1005(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1006\] # ] 1007) # initial subdomain 1008(?: # 1009(?: [\040\t] | \( 1010(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1011\) )* \. # if led by a period... 1012(?: [\040\t] | \( 1013(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1014\) )* (?: 1015[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1016(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1017| \[ # [ 1018(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1019\] # ] 1020) # ...further okay 1021)* 1022 1023(?: (?: [\040\t] | \( 1024(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1025\) )* , (?: [\040\t] | \( 1026(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1027\) )* @ (?: [\040\t] | \( 1028(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1029\) )* (?: 1030[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1031(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1032| \[ # [ 1033(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1034\] # ] 1035) # initial subdomain 1036(?: # 1037(?: [\040\t] | \( 1038(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1039\) )* \. # if led by a period... 1040(?: [\040\t] | \( 1041(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1042\) )* (?: 1043[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1044(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1045| \[ # [ 1046(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1047\] # ] 1048) # ...further okay 1049)* 1050)* # further okay, if led by comma 1051: # closing colon 1052(?: [\040\t] | \( 1053(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1054\) )* )? # optional route 1055(?: 1056[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1057(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1058| 1059" (?: # opening quote... 1060[^\\\x80-\xff\n\015"] # Anything except backslash and quote 1061| # or 1062\\ [^\x80-\xff] # Escaped something (something != CR) 1063)* " # closing quote 1064) # initial word 1065(?: (?: [\040\t] | \( 1066(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1067\) )* \. (?: [\040\t] | \( 1068(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1069\) )* (?: 1070[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1071(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1072| 1073" (?: # opening quote... 1074[^\\\x80-\xff\n\015"] # Anything except backslash and quote 1075| # or 1076\\ [^\x80-\xff] # Escaped something (something != CR) 1077)* " # closing quote 1078) )* # further okay, if led by a period 1079(?: [\040\t] | \( 1080(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1081\) )* @ (?: [\040\t] | \( 1082(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1083\) )* (?: 1084[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1085(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1086| \[ # [ 1087(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1088\] # ] 1089) # initial subdomain 1090(?: # 1091(?: [\040\t] | \( 1092(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1093\) )* \. # if led by a period... 1094(?: [\040\t] | \( 1095(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1096\) )* (?: 1097[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1098(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1099| \[ # [ 1100(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1101\] # ] 1102) # ...further okay 1103)* 1104# address spec 1105(?: [\040\t] | \( 1106(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1107\) )* > # trailing > 1108# name and address 1109) (?: [\040\t] | \( 1110(?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )* 1111\) )* # optional trailing comment 1112/x 1113 Alan Other <user\@dom.ain> 1114 0: Alan Other <user@dom.ain> 1115 <user\@dom.ain> 1116 0: user@dom.ain 1117 user\@dom.ain 1118 0: user@dom.ain 1119 \"A. Other\" <user.1234\@dom.ain> (a comment) 1120 0: "A. Other" <user.1234@dom.ain> (a comment) 1121 A. Other <user.1234\@dom.ain> (a comment) 1122 0: Other <user.1234@dom.ain> (a comment) 1123 \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay 1124 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay 1125 A missing angle <user\@some.where 1126 0: user@some.where 1127\= Expect no match 1128 The quick brown fox 1129No match 1130 1131/[\040\t]* # Nab whitespace. 1132(?: 1133\( # ( 1134[^\\\x80-\xff\n\015()] * # normal* 1135(?: # ( 1136(?: \\ [^\x80-\xff] | 1137\( # ( 1138[^\\\x80-\xff\n\015()] * # normal* 1139(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1140\) # ) 1141) # special 1142[^\\\x80-\xff\n\015()] * # normal* 1143)* # )* 1144\) # ) 1145[\040\t]* )* # If comment found, allow more spaces. 1146# optional leading comment 1147(?: 1148(?: 1149[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1150(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1151# Atom 1152| # or 1153" # " 1154[^\\\x80-\xff\n\015"] * # normal 1155(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* 1156" # " 1157# Quoted string 1158) 1159[\040\t]* # Nab whitespace. 1160(?: 1161\( # ( 1162[^\\\x80-\xff\n\015()] * # normal* 1163(?: # ( 1164(?: \\ [^\x80-\xff] | 1165\( # ( 1166[^\\\x80-\xff\n\015()] * # normal* 1167(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1168\) # ) 1169) # special 1170[^\\\x80-\xff\n\015()] * # normal* 1171)* # )* 1172\) # ) 1173[\040\t]* )* # If comment found, allow more spaces. 1174(?: 1175\. 1176[\040\t]* # Nab whitespace. 1177(?: 1178\( # ( 1179[^\\\x80-\xff\n\015()] * # normal* 1180(?: # ( 1181(?: \\ [^\x80-\xff] | 1182\( # ( 1183[^\\\x80-\xff\n\015()] * # normal* 1184(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1185\) # ) 1186) # special 1187[^\\\x80-\xff\n\015()] * # normal* 1188)* # )* 1189\) # ) 1190[\040\t]* )* # If comment found, allow more spaces. 1191(?: 1192[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1193(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1194# Atom 1195| # or 1196" # " 1197[^\\\x80-\xff\n\015"] * # normal 1198(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* 1199" # " 1200# Quoted string 1201) 1202[\040\t]* # Nab whitespace. 1203(?: 1204\( # ( 1205[^\\\x80-\xff\n\015()] * # normal* 1206(?: # ( 1207(?: \\ [^\x80-\xff] | 1208\( # ( 1209[^\\\x80-\xff\n\015()] * # normal* 1210(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1211\) # ) 1212) # special 1213[^\\\x80-\xff\n\015()] * # normal* 1214)* # )* 1215\) # ) 1216[\040\t]* )* # If comment found, allow more spaces. 1217# additional words 1218)* 1219@ 1220[\040\t]* # Nab whitespace. 1221(?: 1222\( # ( 1223[^\\\x80-\xff\n\015()] * # normal* 1224(?: # ( 1225(?: \\ [^\x80-\xff] | 1226\( # ( 1227[^\\\x80-\xff\n\015()] * # normal* 1228(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1229\) # ) 1230) # special 1231[^\\\x80-\xff\n\015()] * # normal* 1232)* # )* 1233\) # ) 1234[\040\t]* )* # If comment found, allow more spaces. 1235(?: 1236[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1237(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1238| 1239\[ # [ 1240(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1241\] # ] 1242) 1243[\040\t]* # Nab whitespace. 1244(?: 1245\( # ( 1246[^\\\x80-\xff\n\015()] * # normal* 1247(?: # ( 1248(?: \\ [^\x80-\xff] | 1249\( # ( 1250[^\\\x80-\xff\n\015()] * # normal* 1251(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1252\) # ) 1253) # special 1254[^\\\x80-\xff\n\015()] * # normal* 1255)* # )* 1256\) # ) 1257[\040\t]* )* # If comment found, allow more spaces. 1258# optional trailing comments 1259(?: 1260\. 1261[\040\t]* # Nab whitespace. 1262(?: 1263\( # ( 1264[^\\\x80-\xff\n\015()] * # normal* 1265(?: # ( 1266(?: \\ [^\x80-\xff] | 1267\( # ( 1268[^\\\x80-\xff\n\015()] * # normal* 1269(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1270\) # ) 1271) # special 1272[^\\\x80-\xff\n\015()] * # normal* 1273)* # )* 1274\) # ) 1275[\040\t]* )* # If comment found, allow more spaces. 1276(?: 1277[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1278(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1279| 1280\[ # [ 1281(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1282\] # ] 1283) 1284[\040\t]* # Nab whitespace. 1285(?: 1286\( # ( 1287[^\\\x80-\xff\n\015()] * # normal* 1288(?: # ( 1289(?: \\ [^\x80-\xff] | 1290\( # ( 1291[^\\\x80-\xff\n\015()] * # normal* 1292(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1293\) # ) 1294) # special 1295[^\\\x80-\xff\n\015()] * # normal* 1296)* # )* 1297\) # ) 1298[\040\t]* )* # If comment found, allow more spaces. 1299# optional trailing comments 1300)* 1301# address 1302| # or 1303(?: 1304[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1305(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1306# Atom 1307| # or 1308" # " 1309[^\\\x80-\xff\n\015"] * # normal 1310(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* 1311" # " 1312# Quoted string 1313) 1314# leading word 1315[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces 1316(?: 1317(?: 1318\( # ( 1319[^\\\x80-\xff\n\015()] * # normal* 1320(?: # ( 1321(?: \\ [^\x80-\xff] | 1322\( # ( 1323[^\\\x80-\xff\n\015()] * # normal* 1324(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1325\) # ) 1326) # special 1327[^\\\x80-\xff\n\015()] * # normal* 1328)* # )* 1329\) # ) 1330| 1331" # " 1332[^\\\x80-\xff\n\015"] * # normal 1333(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* 1334" # " 1335) # "special" comment or quoted string 1336[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal" 1337)* 1338< 1339[\040\t]* # Nab whitespace. 1340(?: 1341\( # ( 1342[^\\\x80-\xff\n\015()] * # normal* 1343(?: # ( 1344(?: \\ [^\x80-\xff] | 1345\( # ( 1346[^\\\x80-\xff\n\015()] * # normal* 1347(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1348\) # ) 1349) # special 1350[^\\\x80-\xff\n\015()] * # normal* 1351)* # )* 1352\) # ) 1353[\040\t]* )* # If comment found, allow more spaces. 1354# < 1355(?: 1356@ 1357[\040\t]* # Nab whitespace. 1358(?: 1359\( # ( 1360[^\\\x80-\xff\n\015()] * # normal* 1361(?: # ( 1362(?: \\ [^\x80-\xff] | 1363\( # ( 1364[^\\\x80-\xff\n\015()] * # normal* 1365(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1366\) # ) 1367) # special 1368[^\\\x80-\xff\n\015()] * # normal* 1369)* # )* 1370\) # ) 1371[\040\t]* )* # If comment found, allow more spaces. 1372(?: 1373[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1374(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1375| 1376\[ # [ 1377(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1378\] # ] 1379) 1380[\040\t]* # Nab whitespace. 1381(?: 1382\( # ( 1383[^\\\x80-\xff\n\015()] * # normal* 1384(?: # ( 1385(?: \\ [^\x80-\xff] | 1386\( # ( 1387[^\\\x80-\xff\n\015()] * # normal* 1388(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1389\) # ) 1390) # special 1391[^\\\x80-\xff\n\015()] * # normal* 1392)* # )* 1393\) # ) 1394[\040\t]* )* # If comment found, allow more spaces. 1395# optional trailing comments 1396(?: 1397\. 1398[\040\t]* # Nab whitespace. 1399(?: 1400\( # ( 1401[^\\\x80-\xff\n\015()] * # normal* 1402(?: # ( 1403(?: \\ [^\x80-\xff] | 1404\( # ( 1405[^\\\x80-\xff\n\015()] * # normal* 1406(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1407\) # ) 1408) # special 1409[^\\\x80-\xff\n\015()] * # normal* 1410)* # )* 1411\) # ) 1412[\040\t]* )* # If comment found, allow more spaces. 1413(?: 1414[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1415(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1416| 1417\[ # [ 1418(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1419\] # ] 1420) 1421[\040\t]* # Nab whitespace. 1422(?: 1423\( # ( 1424[^\\\x80-\xff\n\015()] * # normal* 1425(?: # ( 1426(?: \\ [^\x80-\xff] | 1427\( # ( 1428[^\\\x80-\xff\n\015()] * # normal* 1429(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1430\) # ) 1431) # special 1432[^\\\x80-\xff\n\015()] * # normal* 1433)* # )* 1434\) # ) 1435[\040\t]* )* # If comment found, allow more spaces. 1436# optional trailing comments 1437)* 1438(?: , 1439[\040\t]* # Nab whitespace. 1440(?: 1441\( # ( 1442[^\\\x80-\xff\n\015()] * # normal* 1443(?: # ( 1444(?: \\ [^\x80-\xff] | 1445\( # ( 1446[^\\\x80-\xff\n\015()] * # normal* 1447(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1448\) # ) 1449) # special 1450[^\\\x80-\xff\n\015()] * # normal* 1451)* # )* 1452\) # ) 1453[\040\t]* )* # If comment found, allow more spaces. 1454@ 1455[\040\t]* # Nab whitespace. 1456(?: 1457\( # ( 1458[^\\\x80-\xff\n\015()] * # normal* 1459(?: # ( 1460(?: \\ [^\x80-\xff] | 1461\( # ( 1462[^\\\x80-\xff\n\015()] * # normal* 1463(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1464\) # ) 1465) # special 1466[^\\\x80-\xff\n\015()] * # normal* 1467)* # )* 1468\) # ) 1469[\040\t]* )* # If comment found, allow more spaces. 1470(?: 1471[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1472(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1473| 1474\[ # [ 1475(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1476\] # ] 1477) 1478[\040\t]* # Nab whitespace. 1479(?: 1480\( # ( 1481[^\\\x80-\xff\n\015()] * # normal* 1482(?: # ( 1483(?: \\ [^\x80-\xff] | 1484\( # ( 1485[^\\\x80-\xff\n\015()] * # normal* 1486(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1487\) # ) 1488) # special 1489[^\\\x80-\xff\n\015()] * # normal* 1490)* # )* 1491\) # ) 1492[\040\t]* )* # If comment found, allow more spaces. 1493# optional trailing comments 1494(?: 1495\. 1496[\040\t]* # Nab whitespace. 1497(?: 1498\( # ( 1499[^\\\x80-\xff\n\015()] * # normal* 1500(?: # ( 1501(?: \\ [^\x80-\xff] | 1502\( # ( 1503[^\\\x80-\xff\n\015()] * # normal* 1504(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1505\) # ) 1506) # special 1507[^\\\x80-\xff\n\015()] * # normal* 1508)* # )* 1509\) # ) 1510[\040\t]* )* # If comment found, allow more spaces. 1511(?: 1512[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1513(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1514| 1515\[ # [ 1516(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1517\] # ] 1518) 1519[\040\t]* # Nab whitespace. 1520(?: 1521\( # ( 1522[^\\\x80-\xff\n\015()] * # normal* 1523(?: # ( 1524(?: \\ [^\x80-\xff] | 1525\( # ( 1526[^\\\x80-\xff\n\015()] * # normal* 1527(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1528\) # ) 1529) # special 1530[^\\\x80-\xff\n\015()] * # normal* 1531)* # )* 1532\) # ) 1533[\040\t]* )* # If comment found, allow more spaces. 1534# optional trailing comments 1535)* 1536)* # additional domains 1537: 1538[\040\t]* # Nab whitespace. 1539(?: 1540\( # ( 1541[^\\\x80-\xff\n\015()] * # normal* 1542(?: # ( 1543(?: \\ [^\x80-\xff] | 1544\( # ( 1545[^\\\x80-\xff\n\015()] * # normal* 1546(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1547\) # ) 1548) # special 1549[^\\\x80-\xff\n\015()] * # normal* 1550)* # )* 1551\) # ) 1552[\040\t]* )* # If comment found, allow more spaces. 1553# optional trailing comments 1554)? # optional route 1555(?: 1556[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1557(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1558# Atom 1559| # or 1560" # " 1561[^\\\x80-\xff\n\015"] * # normal 1562(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* 1563" # " 1564# Quoted string 1565) 1566[\040\t]* # Nab whitespace. 1567(?: 1568\( # ( 1569[^\\\x80-\xff\n\015()] * # normal* 1570(?: # ( 1571(?: \\ [^\x80-\xff] | 1572\( # ( 1573[^\\\x80-\xff\n\015()] * # normal* 1574(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1575\) # ) 1576) # special 1577[^\\\x80-\xff\n\015()] * # normal* 1578)* # )* 1579\) # ) 1580[\040\t]* )* # If comment found, allow more spaces. 1581(?: 1582\. 1583[\040\t]* # Nab whitespace. 1584(?: 1585\( # ( 1586[^\\\x80-\xff\n\015()] * # normal* 1587(?: # ( 1588(?: \\ [^\x80-\xff] | 1589\( # ( 1590[^\\\x80-\xff\n\015()] * # normal* 1591(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1592\) # ) 1593) # special 1594[^\\\x80-\xff\n\015()] * # normal* 1595)* # )* 1596\) # ) 1597[\040\t]* )* # If comment found, allow more spaces. 1598(?: 1599[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1600(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1601# Atom 1602| # or 1603" # " 1604[^\\\x80-\xff\n\015"] * # normal 1605(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )* 1606" # " 1607# Quoted string 1608) 1609[\040\t]* # Nab whitespace. 1610(?: 1611\( # ( 1612[^\\\x80-\xff\n\015()] * # normal* 1613(?: # ( 1614(?: \\ [^\x80-\xff] | 1615\( # ( 1616[^\\\x80-\xff\n\015()] * # normal* 1617(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1618\) # ) 1619) # special 1620[^\\\x80-\xff\n\015()] * # normal* 1621)* # )* 1622\) # ) 1623[\040\t]* )* # If comment found, allow more spaces. 1624# additional words 1625)* 1626@ 1627[\040\t]* # Nab whitespace. 1628(?: 1629\( # ( 1630[^\\\x80-\xff\n\015()] * # normal* 1631(?: # ( 1632(?: \\ [^\x80-\xff] | 1633\( # ( 1634[^\\\x80-\xff\n\015()] * # normal* 1635(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1636\) # ) 1637) # special 1638[^\\\x80-\xff\n\015()] * # normal* 1639)* # )* 1640\) # ) 1641[\040\t]* )* # If comment found, allow more spaces. 1642(?: 1643[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1644(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1645| 1646\[ # [ 1647(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1648\] # ] 1649) 1650[\040\t]* # Nab whitespace. 1651(?: 1652\( # ( 1653[^\\\x80-\xff\n\015()] * # normal* 1654(?: # ( 1655(?: \\ [^\x80-\xff] | 1656\( # ( 1657[^\\\x80-\xff\n\015()] * # normal* 1658(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1659\) # ) 1660) # special 1661[^\\\x80-\xff\n\015()] * # normal* 1662)* # )* 1663\) # ) 1664[\040\t]* )* # If comment found, allow more spaces. 1665# optional trailing comments 1666(?: 1667\. 1668[\040\t]* # Nab whitespace. 1669(?: 1670\( # ( 1671[^\\\x80-\xff\n\015()] * # normal* 1672(?: # ( 1673(?: \\ [^\x80-\xff] | 1674\( # ( 1675[^\\\x80-\xff\n\015()] * # normal* 1676(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1677\) # ) 1678) # special 1679[^\\\x80-\xff\n\015()] * # normal* 1680)* # )* 1681\) # ) 1682[\040\t]* )* # If comment found, allow more spaces. 1683(?: 1684[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters... 1685(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom 1686| 1687\[ # [ 1688(?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff 1689\] # ] 1690) 1691[\040\t]* # Nab whitespace. 1692(?: 1693\( # ( 1694[^\\\x80-\xff\n\015()] * # normal* 1695(?: # ( 1696(?: \\ [^\x80-\xff] | 1697\( # ( 1698[^\\\x80-\xff\n\015()] * # normal* 1699(?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)* 1700\) # ) 1701) # special 1702[^\\\x80-\xff\n\015()] * # normal* 1703)* # )* 1704\) # ) 1705[\040\t]* )* # If comment found, allow more spaces. 1706# optional trailing comments 1707)* 1708# address spec 1709> # > 1710# name and address 1711) 1712/x 1713 Alan Other <user\@dom.ain> 1714 0: Alan Other <user@dom.ain> 1715 <user\@dom.ain> 1716 0: user@dom.ain 1717 user\@dom.ain 1718 0: user@dom.ain 1719 \"A. Other\" <user.1234\@dom.ain> (a comment) 1720 0: "A. Other" <user.1234@dom.ain> 1721 A. Other <user.1234\@dom.ain> (a comment) 1722 0: Other <user.1234@dom.ain> 1723 \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay 1724 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay 1725 A missing angle <user\@some.where 1726 0: user@some.where 1727\= Expect no match 1728 The quick brown fox 1729No match 1730 1731/abc\0def\00pqr\000xyz\0000AB/ 1732 abc\0def\00pqr\000xyz\0000AB 1733 0: abc\x00def\x00pqr\x00xyz\x000AB 1734 abc456 abc\0def\00pqr\000xyz\0000ABCDE 1735 0: abc\x00def\x00pqr\x00xyz\x000AB 1736 1737/abc\x0def\x00pqr\x000xyz\x0000AB/ 1738 abc\x0def\x00pqr\x000xyz\x0000AB 1739 0: abc\x0def\x00pqr\x000xyz\x0000AB 1740 abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE 1741 0: abc\x0def\x00pqr\x000xyz\x0000AB 1742 1743/^[\000-\037]/ 1744 \0A 1745 0: \x00 1746 \01B 1747 0: \x01 1748 \037C 1749 0: \x1f 1750 1751/\0*/ 1752 \0\0\0\0 1753 0: \x00\x00\x00\x00 1754 1755/A\x0{2,3}Z/ 1756 The A\x0\x0Z 1757 0: A\x00\x00Z 1758 An A\0\x0\0Z 1759 0: A\x00\x00\x00Z 1760\= Expect no match 1761 A\0Z 1762No match 1763 A\0\x0\0\x0Z 1764No match 1765 1766/^(cow|)\1(bell)/ 1767 cowcowbell 1768 0: cowcowbell 1769 1: cow 1770 2: bell 1771 bell 1772 0: bell 1773 1: 1774 2: bell 1775\= Expect no match 1776 cowbell 1777No match 1778 1779/^\s/ 1780 \040abc 1781 0: 1782 \x0cabc 1783 0: \x0c 1784 \nabc 1785 0: \x0a 1786 \rabc 1787 0: \x0d 1788 \tabc 1789 0: \x09 1790\= Expect no match 1791 abc 1792No match 1793 1794/^a b 1795 c/x 1796 abc 1797 0: abc 1798 1799/^(a|)\1*b/ 1800 ab 1801 0: ab 1802 1: a 1803 aaaab 1804 0: aaaab 1805 1: a 1806 b 1807 0: b 1808 1: 1809\= Expect no match 1810 acb 1811No match 1812 1813/^(a|)\1+b/ 1814 aab 1815 0: aab 1816 1: a 1817 aaaab 1818 0: aaaab 1819 1: a 1820 b 1821 0: b 1822 1: 1823\= Expect no match 1824 ab 1825No match 1826 1827/^(a|)\1?b/ 1828 ab 1829 0: ab 1830 1: a 1831 aab 1832 0: aab 1833 1: a 1834 b 1835 0: b 1836 1: 1837\= Expect no match 1838 acb 1839No match 1840 1841/^(a|)\1{2}b/ 1842 aaab 1843 0: aaab 1844 1: a 1845 b 1846 0: b 1847 1: 1848\= Expect no match 1849 ab 1850No match 1851 aab 1852No match 1853 aaaab 1854No match 1855 1856/^(a|)\1{2,3}b/ 1857 aaab 1858 0: aaab 1859 1: a 1860 aaaab 1861 0: aaaab 1862 1: a 1863 b 1864 0: b 1865 1: 1866\= Expect no match 1867 ab 1868No match 1869 aab 1870No match 1871 aaaaab 1872No match 1873 1874/ab{1,3}bc/ 1875 abbbbc 1876 0: abbbbc 1877 abbbc 1878 0: abbbc 1879 abbc 1880 0: abbc 1881\= Expect no match 1882 abc 1883No match 1884 abbbbbc 1885No match 1886 1887/([^.]*)\.([^:]*):[T ]+(.*)/ 1888 track1.title:TBlah blah blah 1889 0: track1.title:TBlah blah blah 1890 1: track1 1891 2: title 1892 3: Blah blah blah 1893 1894/([^.]*)\.([^:]*):[T ]+(.*)/i 1895 track1.title:TBlah blah blah 1896 0: track1.title:TBlah blah blah 1897 1: track1 1898 2: title 1899 3: Blah blah blah 1900 1901/([^.]*)\.([^:]*):[t ]+(.*)/i 1902 track1.title:TBlah blah blah 1903 0: track1.title:TBlah blah blah 1904 1: track1 1905 2: title 1906 3: Blah blah blah 1907 1908/^[W-c]+$/ 1909 WXY_^abc 1910 0: WXY_^abc 1911\= Expect no match 1912 wxy 1913No match 1914 1915/^[W-c]+$/i 1916 WXY_^abc 1917 0: WXY_^abc 1918 wxy_^ABC 1919 0: wxy_^ABC 1920 1921/^[\x3f-\x5F]+$/i 1922 WXY_^abc 1923 0: WXY_^abc 1924 wxy_^ABC 1925 0: wxy_^ABC 1926 1927/^abc$/m 1928 abc 1929 0: abc 1930 qqq\nabc 1931 0: abc 1932 abc\nzzz 1933 0: abc 1934 qqq\nabc\nzzz 1935 0: abc 1936 1937/^abc$/ 1938 abc 1939 0: abc 1940\= Expect no match 1941 qqq\nabc 1942No match 1943 abc\nzzz 1944No match 1945 qqq\nabc\nzzz 1946No match 1947 1948/\Aabc\Z/m 1949 abc 1950 0: abc 1951 abc\n 1952 0: abc 1953\= Expect no match 1954 qqq\nabc 1955No match 1956 abc\nzzz 1957No match 1958 qqq\nabc\nzzz 1959No match 1960 1961/\A(.)*\Z/s 1962 abc\ndef 1963 0: abc\x0adef 1964 1: f 1965 1966/\A(.)*\Z/m 1967\= Expect no match 1968 abc\ndef 1969No match 1970 1971/(?:b)|(?::+)/ 1972 b::c 1973 0: b 1974 c::b 1975 0: :: 1976 1977/[-az]+/ 1978 az- 1979 0: az- 1980\= Expect no match 1981 b 1982No match 1983 1984/[az-]+/ 1985 za- 1986 0: za- 1987\= Expect no match 1988 b 1989No match 1990 1991/[a\-z]+/ 1992 a-z 1993 0: a-z 1994\= Expect no match 1995 b 1996No match 1997 1998/[a-z]+/ 1999 abcdxyz 2000 0: abcdxyz 2001 2002/[\d-]+/ 2003 12-34 2004 0: 12-34 2005\= Expect no match 2006 aaa 2007No match 2008 2009/[\d-z]+/ 2010 12-34z 2011 0: 12-34z 2012\= Expect no match 2013 aaa 2014No match 2015 2016/\x5c/ 2017 \\ 2018 0: \ 2019 2020/\x20Z/ 2021 the Zoo 2022 0: Z 2023\= Expect no match 2024 Zulu 2025No match 2026 2027/(abc)\1/i 2028 abcabc 2029 0: abcabc 2030 1: abc 2031 ABCabc 2032 0: ABCabc 2033 1: ABC 2034 abcABC 2035 0: abcABC 2036 1: abc 2037 2038/abc$/ 2039 abc 2040 0: abc 2041 abc\n 2042 0: abc 2043\= Expect no match 2044 abc\ndef 2045No match 2046 2047/(abc)\123/ 2048 abc\x53 2049 0: abcS 2050 1: abc 2051 2052/(abc)\223/ 2053 abc\x93 2054 0: abc\x93 2055 1: abc 2056 2057/(abc)\323/ 2058 abc\xd3 2059 0: abc\xd3 2060 1: abc 2061 2062/(abc)\100/ 2063 abc\x40 2064 0: abc@ 2065 1: abc 2066 abc\100 2067 0: abc@ 2068 1: abc 2069 2070/(abc)\1000/ 2071 abc\x400 2072 0: abc@0 2073 1: abc 2074 abc\x40\x30 2075 0: abc@0 2076 1: abc 2077 abc\1000 2078 0: abc@0 2079 1: abc 2080 abc\100\x30 2081 0: abc@0 2082 1: abc 2083 abc\100\060 2084 0: abc@0 2085 1: abc 2086 abc\100\60 2087 0: abc@0 2088 1: abc 2089 2090/^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/ 2091 ABCDEFGHIHI 2092 0: ABCDEFGHIHI 2093 1: A 2094 2: B 2095 3: C 2096 4: D 2097 5: E 2098 6: F 2099 7: G 2100 8: H 2101 9: I 2102 2103/^[A\8B\9C]+$/ 2104 A8B9C 2105 0: A8B9C 2106\= Expect no match 2107 A8B9C\x00 2108No match 2109 2110/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/ 2111 abcdefghijkllS 2112 0: abcdefghijkllS 2113 1: a 2114 2: b 2115 3: c 2116 4: d 2117 5: e 2118 6: f 2119 7: g 2120 8: h 2121 9: i 212210: j 212311: k 212412: l 2125 2126/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/ 2127 abcdefghijk\12S 2128 0: abcdefghijk\x0aS 2129 1: a 2130 2: b 2131 3: c 2132 4: d 2133 5: e 2134 6: f 2135 7: g 2136 8: h 2137 9: i 213810: j 213911: k 2140 2141/a{0}bc/ 2142 bc 2143 0: bc 2144 2145/(a|(bc)){0,0}?xyz/ 2146 xyz 2147 0: xyz 2148 2149/abc[\10]de/ 2150 abc\010de 2151 0: abc\x08de 2152 2153/abc[\1]de/ 2154 abc\1de 2155 0: abc\x01de 2156 2157/(abc)[\1]de/ 2158 abc\1de 2159 0: abc\x01de 2160 1: abc 2161 2162/(?s)a.b/ 2163 a\nb 2164 0: a\x0ab 2165 2166/^([^a])([^\b])([^c]*)([^d]{3,4})/ 2167 baNOTccccd 2168 0: baNOTcccc 2169 1: b 2170 2: a 2171 3: NOT 2172 4: cccc 2173 baNOTcccd 2174 0: baNOTccc 2175 1: b 2176 2: a 2177 3: NOT 2178 4: ccc 2179 baNOTccd 2180 0: baNOTcc 2181 1: b 2182 2: a 2183 3: NO 2184 4: Tcc 2185 bacccd 2186 0: baccc 2187 1: b 2188 2: a 2189 3: 2190 4: ccc 2191\= Expect no match 2192 anything 2193No match 2194 b\bc 2195No match 2196 baccd 2197No match 2198 2199/[^a]/ 2200 Abc 2201 0: A 2202 2203/[^a]/i 2204 Abc 2205 0: b 2206 2207/[^a]+/ 2208 AAAaAbc 2209 0: AAA 2210 2211/[^a]+/i 2212 AAAaAbc 2213 0: bc 2214 2215/[^a]+/ 2216 bbb\nccc 2217 0: bbb\x0accc 2218 2219/[^k]$/ 2220 abc 2221 0: c 2222\= Expect no match 2223 abk 2224No match 2225 2226/[^k]{2,3}$/ 2227 abc 2228 0: abc 2229 kbc 2230 0: bc 2231 kabc 2232 0: abc 2233\= Expect no match 2234 abk 2235No match 2236 akb 2237No match 2238 akk 2239No match 2240 2241/^\d{8,}\@.+[^k]$/ 2242 12345678\@a.b.c.d 2243 0: 12345678@a.b.c.d 2244 123456789\@x.y.z 2245 0: 123456789@x.y.z 2246\= Expect no match 2247 12345678\@x.y.uk 2248No match 2249 1234567\@a.b.c.d 2250No match 2251 2252/(a)\1{8,}/ 2253 aaaaaaaaa 2254 0: aaaaaaaaa 2255 1: a 2256 aaaaaaaaaa 2257 0: aaaaaaaaaa 2258 1: a 2259\= Expect no match 2260 aaaaaaa 2261No match 2262 2263/[^a]/ 2264 aaaabcd 2265 0: b 2266 aaAabcd 2267 0: A 2268 2269/[^a]/i 2270 aaaabcd 2271 0: b 2272 aaAabcd 2273 0: b 2274 2275/[^az]/ 2276 aaaabcd 2277 0: b 2278 aaAabcd 2279 0: A 2280 2281/[^az]/i 2282 aaaabcd 2283 0: b 2284 aaAabcd 2285 0: b 2286 2287/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/ 2288 \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377 2289 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff 2290 2291/P[^*]TAIRE[^*]{1,6}?LL/ 2292 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx 2293 0: PSTAIREISLL 2294 2295/P[^*]TAIRE[^*]{1,}?LL/ 2296 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx 2297 0: PSTAIREISLL 2298 2299/(\.\d\d[1-9]?)\d+/ 2300 1.230003938 2301 0: .230003938 2302 1: .23 2303 1.875000282 2304 0: .875000282 2305 1: .875 2306 1.235 2307 0: .235 2308 1: .23 2309 2310/(\.\d\d((?=0)|\d(?=\d)))/ 2311 1.230003938 2312 0: .23 2313 1: .23 2314 2: 2315 1.875000282 2316 0: .875 2317 1: .875 2318 2: 5 2319\= Expect no match 2320 1.235 2321No match 2322 2323/a(?)b/ 2324 ab 2325 0: ab 2326 2327/\b(foo)\s+(\w+)/i 2328 Food is on the foo table 2329 0: foo table 2330 1: foo 2331 2: table 2332 2333/foo(.*)bar/ 2334 The food is under the bar in the barn. 2335 0: food is under the bar in the bar 2336 1: d is under the bar in the 2337 2338/foo(.*?)bar/ 2339 The food is under the bar in the barn. 2340 0: food is under the bar 2341 1: d is under the 2342 2343/(.*)(\d*)/ 2344 I have 2 numbers: 53147 2345 0: I have 2 numbers: 53147 2346 1: I have 2 numbers: 53147 2347 2: 2348 2349/(.*)(\d+)/ 2350 I have 2 numbers: 53147 2351 0: I have 2 numbers: 53147 2352 1: I have 2 numbers: 5314 2353 2: 7 2354 2355/(.*?)(\d*)/ 2356 I have 2 numbers: 53147 2357 0: 2358 1: 2359 2: 2360 2361/(.*?)(\d+)/ 2362 I have 2 numbers: 53147 2363 0: I have 2 2364 1: I have 2365 2: 2 2366 2367/(.*)(\d+)$/ 2368 I have 2 numbers: 53147 2369 0: I have 2 numbers: 53147 2370 1: I have 2 numbers: 5314 2371 2: 7 2372 2373/(.*?)(\d+)$/ 2374 I have 2 numbers: 53147 2375 0: I have 2 numbers: 53147 2376 1: I have 2 numbers: 2377 2: 53147 2378 2379/(.*)\b(\d+)$/ 2380 I have 2 numbers: 53147 2381 0: I have 2 numbers: 53147 2382 1: I have 2 numbers: 2383 2: 53147 2384 2385/(.*\D)(\d+)$/ 2386 I have 2 numbers: 53147 2387 0: I have 2 numbers: 53147 2388 1: I have 2 numbers: 2389 2: 53147 2390 2391/^\D*(?!123)/ 2392 ABC123 2393 0: AB 2394 2395/^(\D*)(?=\d)(?!123)/ 2396 ABC445 2397 0: ABC 2398 1: ABC 2399\= Expect no match 2400 ABC123 2401No match 2402 2403/^[W-]46]/ 2404 W46]789 2405 0: W46] 2406 -46]789 2407 0: -46] 2408\= Expect no match 2409 Wall 2410No match 2411 Zebra 2412No match 2413 42 2414No match 2415 [abcd] 2416No match 2417 ]abcd[ 2418No match 2419 2420/^[W-\]46]/ 2421 W46]789 2422 0: W 2423 Wall 2424 0: W 2425 Zebra 2426 0: Z 2427 Xylophone 2428 0: X 2429 42 2430 0: 4 2431 [abcd] 2432 0: [ 2433 ]abcd[ 2434 0: ] 2435 \\backslash 2436 0: \ 2437\= Expect no match 2438 -46]789 2439No match 2440 well 2441No match 2442 2443/\d\d\/\d\d\/\d\d\d\d/ 2444 01/01/2000 2445 0: 01/01/2000 2446 2447/word (?:[a-zA-Z0-9]+ ){0,10}otherword/ 2448 word cat dog elephant mussel cow horse canary baboon snake shark otherword 2449 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword 2450\= Expect no match 2451 word cat dog elephant mussel cow horse canary baboon snake shark 2452No match 2453 2454/word (?:[a-zA-Z0-9]+ ){0,300}otherword/ 2455\= Expect no match 2456 word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope 2457No match 2458 2459/^(a){0,0}/ 2460 bcd 2461 0: 2462 abc 2463 0: 2464 aab 2465 0: 2466 2467/^(a){0,1}/ 2468 bcd 2469 0: 2470 abc 2471 0: a 2472 1: a 2473 aab 2474 0: a 2475 1: a 2476 2477/^(a){0,2}/ 2478 bcd 2479 0: 2480 abc 2481 0: a 2482 1: a 2483 aab 2484 0: aa 2485 1: a 2486 2487/^(a){0,3}/ 2488 bcd 2489 0: 2490 abc 2491 0: a 2492 1: a 2493 aab 2494 0: aa 2495 1: a 2496 aaa 2497 0: aaa 2498 1: a 2499 2500/^(a){0,}/ 2501 bcd 2502 0: 2503 abc 2504 0: a 2505 1: a 2506 aab 2507 0: aa 2508 1: a 2509 aaa 2510 0: aaa 2511 1: a 2512 aaaaaaaa 2513 0: aaaaaaaa 2514 1: a 2515 2516/^(a){1,1}/ 2517 abc 2518 0: a 2519 1: a 2520 aab 2521 0: a 2522 1: a 2523\= Expect no match 2524 bcd 2525No match 2526 2527/^(a){1,2}/ 2528 abc 2529 0: a 2530 1: a 2531 aab 2532 0: aa 2533 1: a 2534\= Expect no match 2535 bcd 2536No match 2537 2538/^(a){1,3}/ 2539 abc 2540 0: a 2541 1: a 2542 aab 2543 0: aa 2544 1: a 2545 aaa 2546 0: aaa 2547 1: a 2548\= Expect no match 2549 bcd 2550No match 2551 2552/^(a){1,}/ 2553 abc 2554 0: a 2555 1: a 2556 aab 2557 0: aa 2558 1: a 2559 aaa 2560 0: aaa 2561 1: a 2562 aaaaaaaa 2563 0: aaaaaaaa 2564 1: a 2565\= Expect no match 2566 bcd 2567No match 2568 2569/.*\.gif/ 2570 borfle\nbib.gif\nno 2571 0: bib.gif 2572 2573/.{0,}\.gif/ 2574 borfle\nbib.gif\nno 2575 0: bib.gif 2576 2577/.*\.gif/m 2578 borfle\nbib.gif\nno 2579 0: bib.gif 2580 2581/.*\.gif/s 2582 borfle\nbib.gif\nno 2583 0: borfle\x0abib.gif 2584 2585/.*\.gif/ms 2586 borfle\nbib.gif\nno 2587 0: borfle\x0abib.gif 2588 2589/.*$/ 2590 borfle\nbib.gif\nno 2591 0: no 2592 2593/.*$/m 2594 borfle\nbib.gif\nno 2595 0: borfle 2596 2597/.*$/s 2598 borfle\nbib.gif\nno 2599 0: borfle\x0abib.gif\x0ano 2600 2601/.*$/ms 2602 borfle\nbib.gif\nno 2603 0: borfle\x0abib.gif\x0ano 2604 2605/.*$/ 2606 borfle\nbib.gif\nno\n 2607 0: no 2608 2609/.*$/m 2610 borfle\nbib.gif\nno\n 2611 0: borfle 2612 2613/.*$/s 2614 borfle\nbib.gif\nno\n 2615 0: borfle\x0abib.gif\x0ano\x0a 2616 2617/.*$/ms 2618 borfle\nbib.gif\nno\n 2619 0: borfle\x0abib.gif\x0ano\x0a 2620 2621/(.*X|^B)/ 2622 abcde\n1234Xyz 2623 0: 1234X 2624 1: 1234X 2625 BarFoo 2626 0: B 2627 1: B 2628\= Expect no match 2629 abcde\nBar 2630No match 2631 2632/(.*X|^B)/m 2633 abcde\n1234Xyz 2634 0: 1234X 2635 1: 1234X 2636 BarFoo 2637 0: B 2638 1: B 2639 abcde\nBar 2640 0: B 2641 1: B 2642 2643/(.*X|^B)/s 2644 abcde\n1234Xyz 2645 0: abcde\x0a1234X 2646 1: abcde\x0a1234X 2647 BarFoo 2648 0: B 2649 1: B 2650\= Expect no match 2651 abcde\nBar 2652No match 2653 2654/(.*X|^B)/ms 2655 abcde\n1234Xyz 2656 0: abcde\x0a1234X 2657 1: abcde\x0a1234X 2658 BarFoo 2659 0: B 2660 1: B 2661 abcde\nBar 2662 0: B 2663 1: B 2664 2665/(?s)(.*X|^B)/ 2666 abcde\n1234Xyz 2667 0: abcde\x0a1234X 2668 1: abcde\x0a1234X 2669 BarFoo 2670 0: B 2671 1: B 2672\= Expect no match 2673 abcde\nBar 2674No match 2675 2676/(?s:.*X|^B)/ 2677 abcde\n1234Xyz 2678 0: abcde\x0a1234X 2679 BarFoo 2680 0: B 2681\= Expect no match 2682 abcde\nBar 2683No match 2684 2685/^.*B/ 2686\= Expect no match 2687 abc\nB 2688No match 2689 2690/(?s)^.*B/ 2691 abc\nB 2692 0: abc\x0aB 2693 2694/(?m)^.*B/ 2695 abc\nB 2696 0: B 2697 2698/(?ms)^.*B/ 2699 abc\nB 2700 0: abc\x0aB 2701 2702/(?ms)^B/ 2703 abc\nB 2704 0: B 2705 2706/(?s)B$/ 2707 B\n 2708 0: B 2709 2710/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/ 2711 123456654321 2712 0: 123456654321 2713 2714/^\d\d\d\d\d\d\d\d\d\d\d\d/ 2715 123456654321 2716 0: 123456654321 2717 2718/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/ 2719 123456654321 2720 0: 123456654321 2721 2722/^[abc]{12}/ 2723 abcabcabcabc 2724 0: abcabcabcabc 2725 2726/^[a-c]{12}/ 2727 abcabcabcabc 2728 0: abcabcabcabc 2729 2730/^(a|b|c){12}/ 2731 abcabcabcabc 2732 0: abcabcabcabc 2733 1: c 2734 2735/^[abcdefghijklmnopqrstuvwxy0123456789]/ 2736 n 2737 0: n 2738\= Expect no match 2739 z 2740No match 2741 2742/abcde{0,0}/ 2743 abcd 2744 0: abcd 2745\= Expect no match 2746 abce 2747No match 2748 2749/ab[cd]{0,0}e/ 2750 abe 2751 0: abe 2752\= Expect no match 2753 abcde 2754No match 2755 2756/ab(c){0,0}d/ 2757 abd 2758 0: abd 2759\= Expect no match 2760 abcd 2761No match 2762 2763/a(b*)/ 2764 a 2765 0: a 2766 1: 2767 ab 2768 0: ab 2769 1: b 2770 abbbb 2771 0: abbbb 2772 1: bbbb 2773\= Expect no match 2774 bbbbb 2775No match 2776 2777/ab\d{0}e/ 2778 abe 2779 0: abe 2780\= Expect no match 2781 ab1e 2782No match 2783 2784/"([^\\"]+|\\.)*"/ 2785 the \"quick\" brown fox 2786 0: "quick" 2787 1: quick 2788 \"the \\\"quick\\\" brown fox\" 2789 0: "the \"quick\" brown fox" 2790 1: brown fox 2791 2792/.*?/g,aftertext 2793 abc 2794 0: 2795 0+ abc 2796 0: a 2797 0+ bc 2798 0: 2799 0+ bc 2800 0: b 2801 0+ c 2802 0: 2803 0+ c 2804 0: c 2805 0+ 2806 0: 2807 0+ 2808 2809/\b/g,aftertext 2810 abc 2811 0: 2812 0+ abc 2813 0: 2814 0+ 2815 2816/\b/g,aftertext 2817 abc 2818 0: 2819 0+ abc 2820 0: 2821 0+ 2822 2823//g 2824 abc 2825 0: 2826 0: 2827 0: 2828 0: 2829 2830/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is 2831 <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR> 2832 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR> 2833 1: BGCOLOR='#DBE9E9' 2834 2: align=left valign=top 2835 3: 43. 2836 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286) 2837 5: 2838 6: 2839 7: <unset> 2840 8: align=left valign=top 2841 9: Lega lstaff.com 284210: align=left valign=top 284311: CA - Statewide 2844 2845/a[^a]b/ 2846 acb 2847 0: acb 2848 a\nb 2849 0: a\x0ab 2850 2851/a.b/ 2852 acb 2853 0: acb 2854\= Expect no match 2855 a\nb 2856No match 2857 2858/a[^a]b/s 2859 acb 2860 0: acb 2861 a\nb 2862 0: a\x0ab 2863 2864/a.b/s 2865 acb 2866 0: acb 2867 a\nb 2868 0: a\x0ab 2869 2870/^(b+?|a){1,2}?c/ 2871 bac 2872 0: bac 2873 1: a 2874 bbac 2875 0: bbac 2876 1: a 2877 bbbac 2878 0: bbbac 2879 1: a 2880 bbbbac 2881 0: bbbbac 2882 1: a 2883 bbbbbac 2884 0: bbbbbac 2885 1: a 2886 2887/^(b+|a){1,2}?c/ 2888 bac 2889 0: bac 2890 1: a 2891 bbac 2892 0: bbac 2893 1: a 2894 bbbac 2895 0: bbbac 2896 1: a 2897 bbbbac 2898 0: bbbbac 2899 1: a 2900 bbbbbac 2901 0: bbbbbac 2902 1: a 2903 2904/(?!\A)x/m 2905 a\bx\n 2906 0: x 2907 a\nx\n 2908 0: x 2909\= Expect no match 2910 x\nb\n 2911No match 2912 2913/(A|B)*?CD/ 2914 CD 2915 0: CD 2916 2917/(A|B)*CD/ 2918 CD 2919 0: CD 2920 2921/(AB)*?\1/ 2922 ABABAB 2923 0: ABAB 2924 1: AB 2925 2926/(AB)*\1/ 2927 ABABAB 2928 0: ABABAB 2929 1: AB 2930 2931/(?<!bar)foo/ 2932 foo 2933 0: foo 2934 catfood 2935 0: foo 2936 arfootle 2937 0: foo 2938 rfoosh 2939 0: foo 2940\= Expect no match 2941 barfoo 2942No match 2943 towbarfoo 2944No match 2945 2946/\w{3}(?<!bar)foo/ 2947 catfood 2948 0: catfoo 2949\= Expect no match 2950 foo 2951No match 2952 barfoo 2953No match 2954 towbarfoo 2955No match 2956 2957/(?<=(foo)a)bar/ 2958 fooabar 2959 0: bar 2960 1: foo 2961\= Expect no match 2962 bar 2963No match 2964 foobbar 2965No match 2966 2967/\Aabc\z/m 2968 abc 2969 0: abc 2970\= Expect no match 2971 abc\n 2972No match 2973 qqq\nabc 2974No match 2975 abc\nzzz 2976No match 2977 qqq\nabc\nzzz 2978No match 2979 2980"(?>.*/)foo" 2981 /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo 2982 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo 2983\= Expect no match 2984 /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/ 2985No match 2986 2987/(?>(\.\d\d[1-9]?))\d+/ 2988 1.230003938 2989 0: .230003938 2990 1: .23 2991 1.875000282 2992 0: .875000282 2993 1: .875 2994\= Expect no match 2995 1.235 2996No match 2997 2998/^((?>\w+)|(?>\s+))*$/ 2999 now is the time for all good men to come to the aid of the party 3000 0: now is the time for all good men to come to the aid of the party 3001 1: party 3002\= Expect no match 3003 this is not a line with only words and spaces! 3004No match 3005 3006/(\d+)(\w)/ 3007 12345a 3008 0: 12345a 3009 1: 12345 3010 2: a 3011 12345+ 3012 0: 12345 3013 1: 1234 3014 2: 5 3015 3016/((?>\d+))(\w)/ 3017 12345a 3018 0: 12345a 3019 1: 12345 3020 2: a 3021\= Expect no match 3022 12345+ 3023No match 3024 3025/(?>a+)b/ 3026 aaab 3027 0: aaab 3028 3029/((?>a+)b)/ 3030 aaab 3031 0: aaab 3032 1: aaab 3033 3034/(?>(a+))b/ 3035 aaab 3036 0: aaab 3037 1: aaa 3038 3039/(?>b)+/ 3040 aaabbbccc 3041 0: bbb 3042 3043/(?>a+|b+|c+)*c/ 3044 aaabbbbccccd 3045 0: aaabbbbc 3046 3047/((?>[^()]+)|\([^()]*\))+/ 3048 ((abc(ade)ufh()()x 3049 0: abc(ade)ufh()()x 3050 1: x 3051 3052/\(((?>[^()]+)|\([^()]+\))+\)/ 3053 (abc) 3054 0: (abc) 3055 1: abc 3056 (abc(def)xyz) 3057 0: (abc(def)xyz) 3058 1: xyz 3059\= Expect no match 3060 ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 3061No match 3062 3063/a(?-i)b/i 3064 ab 3065 0: ab 3066 Ab 3067 0: Ab 3068\= Expect no match 3069 aB 3070No match 3071 AB 3072No match 3073 3074/(a (?x)b c)d e/ 3075 a bcd e 3076 0: a bcd e 3077 1: a bc 3078\= Expect no match 3079 a b cd e 3080No match 3081 abcd e 3082No match 3083 a bcde 3084No match 3085 3086/(a b(?x)c d (?-x)e f)/ 3087 a bcde f 3088 0: a bcde f 3089 1: a bcde f 3090\= Expect no match 3091 abcdef 3092No match 3093 3094/(a(?i)b)c/ 3095 abc 3096 0: abc 3097 1: ab 3098 aBc 3099 0: aBc 3100 1: aB 3101\= Expect no match 3102 abC 3103No match 3104 aBC 3105No match 3106 Abc 3107No match 3108 ABc 3109No match 3110 ABC 3111No match 3112 AbC 3113No match 3114 3115/a(?i:b)c/ 3116 abc 3117 0: abc 3118 aBc 3119 0: aBc 3120\= Expect no match 3121 ABC 3122No match 3123 abC 3124No match 3125 aBC 3126No match 3127 3128/a(?i:b)*c/ 3129 aBc 3130 0: aBc 3131 aBBc 3132 0: aBBc 3133\= Expect no match 3134 aBC 3135No match 3136 aBBC 3137No match 3138 3139/a(?=b(?i)c)\w\wd/ 3140 abcd 3141 0: abcd 3142 abCd 3143 0: abCd 3144\= Expect no match 3145 aBCd 3146No match 3147 abcD 3148No match 3149 3150/(?s-i:more.*than).*million/i 3151 more than million 3152 0: more than million 3153 more than MILLION 3154 0: more than MILLION 3155 more \n than Million 3156 0: more \x0a than Million 3157\= Expect no match 3158 MORE THAN MILLION 3159No match 3160 more \n than \n million 3161No match 3162 3163/(?:(?s-i)more.*than).*million/i 3164 more than million 3165 0: more than million 3166 more than MILLION 3167 0: more than MILLION 3168 more \n than Million 3169 0: more \x0a than Million 3170\= Expect no match 3171 MORE THAN MILLION 3172No match 3173 more \n than \n million 3174No match 3175 3176/(?>a(?i)b+)+c/ 3177 abc 3178 0: abc 3179 aBbc 3180 0: aBbc 3181 aBBc 3182 0: aBBc 3183\= Expect no match 3184 Abc 3185No match 3186 abAb 3187No match 3188 abbC 3189No match 3190 3191/(?=a(?i)b)\w\wc/ 3192 abc 3193 0: abc 3194 aBc 3195 0: aBc 3196\= Expect no match 3197 Ab 3198No match 3199 abC 3200No match 3201 aBC 3202No match 3203 3204/(?<=a(?i)b)(\w\w)c/ 3205 abxxc 3206 0: xxc 3207 1: xx 3208 aBxxc 3209 0: xxc 3210 1: xx 3211\= Expect no match 3212 Abxxc 3213No match 3214 ABxxc 3215No match 3216 abxxC 3217No match 3218 3219/(?:(a)|b)(?(1)A|B)/ 3220 aA 3221 0: aA 3222 1: a 3223 bB 3224 0: bB 3225\= Expect no match 3226 aB 3227No match 3228 bA 3229No match 3230 3231/^(a)?(?(1)a|b)+$/ 3232 aa 3233 0: aa 3234 1: a 3235 b 3236 0: b 3237 bb 3238 0: bb 3239\= Expect no match 3240 ab 3241No match 3242 3243# Perl gets this next one wrong if the pattern ends with $; in that case it 3244# fails to match "12". 3245 3246/^(?(?=abc)\w{3}:|\d\d)/ 3247 abc: 3248 0: abc: 3249 12 3250 0: 12 3251 123 3252 0: 12 3253\= Expect no match 3254 xyz 3255No match 3256 3257/^(?(?!abc)\d\d|\w{3}:)$/ 3258 abc: 3259 0: abc: 3260 12 3261 0: 12 3262\= Expect no match 3263 123 3264No match 3265 xyz 3266No match 3267 3268/(?(?<=foo)bar|cat)/ 3269 foobar 3270 0: bar 3271 cat 3272 0: cat 3273 fcat 3274 0: cat 3275 focat 3276 0: cat 3277\= Expect no match 3278 foocat 3279No match 3280 3281/(?(?<!foo)cat|bar)/ 3282 foobar 3283 0: bar 3284 cat 3285 0: cat 3286 fcat 3287 0: cat 3288 focat 3289 0: cat 3290\= Expect no match 3291 foocat 3292No match 3293 3294/( \( )? [^()]+ (?(1) \) |) /x 3295 abcd 3296 0: abcd 3297 (abcd) 3298 0: (abcd) 3299 1: ( 3300 the quick (abcd) fox 3301 0: the quick 3302 (abcd 3303 0: abcd 3304 3305/( \( )? [^()]+ (?(1) \) ) /x 3306 abcd 3307 0: abcd 3308 (abcd) 3309 0: (abcd) 3310 1: ( 3311 the quick (abcd) fox 3312 0: the quick 3313 (abcd 3314 0: abcd 3315 3316/^(?(2)a|(1)(2))+$/ 3317 12 3318 0: 12 3319 1: 1 3320 2: 2 3321 12a 3322 0: 12a 3323 1: 1 3324 2: 2 3325 12aa 3326 0: 12aa 3327 1: 1 3328 2: 2 3329\= Expect no match 3330 1234 3331No match 3332 3333/((?i)blah)\s+\1/ 3334 blah blah 3335 0: blah blah 3336 1: blah 3337 BLAH BLAH 3338 0: BLAH BLAH 3339 1: BLAH 3340 Blah Blah 3341 0: Blah Blah 3342 1: Blah 3343 blaH blaH 3344 0: blaH blaH 3345 1: blaH 3346\= Expect no match 3347 blah BLAH 3348No match 3349 Blah blah 3350No match 3351 blaH blah 3352No match 3353 3354/((?i)blah)\s+(?i:\1)/ 3355 blah blah 3356 0: blah blah 3357 1: blah 3358 BLAH BLAH 3359 0: BLAH BLAH 3360 1: BLAH 3361 Blah Blah 3362 0: Blah Blah 3363 1: Blah 3364 blaH blaH 3365 0: blaH blaH 3366 1: blaH 3367 blah BLAH 3368 0: blah BLAH 3369 1: blah 3370 Blah blah 3371 0: Blah blah 3372 1: Blah 3373 blaH blah 3374 0: blaH blah 3375 1: blaH 3376 3377/(?>a*)*/ 3378 a 3379 0: a 3380 aa 3381 0: aa 3382 aaaa 3383 0: aaaa 3384 3385/(abc|)+/ 3386 abc 3387 0: abc 3388 1: 3389 abcabc 3390 0: abcabc 3391 1: 3392 abcabcabc 3393 0: abcabcabc 3394 1: 3395 xyz 3396 0: 3397 1: 3398 3399/([a]*)*/ 3400 a 3401 0: a 3402 1: 3403 aaaaa 3404 0: aaaaa 3405 1: 3406 3407/([ab]*)*/ 3408 a 3409 0: a 3410 1: 3411 b 3412 0: b 3413 1: 3414 ababab 3415 0: ababab 3416 1: 3417 aaaabcde 3418 0: aaaab 3419 1: 3420 bbbb 3421 0: bbbb 3422 1: 3423 3424/([^a]*)*/ 3425 b 3426 0: b 3427 1: 3428 bbbb 3429 0: bbbb 3430 1: 3431 aaa 3432 0: 3433 1: 3434 3435/([^ab]*)*/ 3436 cccc 3437 0: cccc 3438 1: 3439 abab 3440 0: 3441 1: 3442 3443/([a]*?)*/ 3444 a 3445 0: 3446 1: 3447 aaaa 3448 0: 3449 1: 3450 3451/([ab]*?)*/ 3452 a 3453 0: 3454 1: 3455 b 3456 0: 3457 1: 3458 abab 3459 0: 3460 1: 3461 baba 3462 0: 3463 1: 3464 3465/([^a]*?)*/ 3466 b 3467 0: 3468 1: 3469 bbbb 3470 0: 3471 1: 3472 aaa 3473 0: 3474 1: 3475 3476/([^ab]*?)*/ 3477 c 3478 0: 3479 1: 3480 cccc 3481 0: 3482 1: 3483 baba 3484 0: 3485 1: 3486 3487/(?>a*)*/ 3488 a 3489 0: a 3490 aaabcde 3491 0: aaa 3492 3493/((?>a*))*/ 3494 aaaaa 3495 0: aaaaa 3496 1: 3497 aabbaa 3498 0: aa 3499 1: 3500 3501/((?>a*?))*/ 3502 aaaaa 3503 0: 3504 1: 3505 aabbaa 3506 0: 3507 1: 3508 3509/(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x 3510 12-sep-98 3511 0: 12-sep-98 3512 12-09-98 3513 0: 12-09-98 3514\= Expect no match 3515 sep-12-98 3516No match 3517 3518/(?<=(foo))bar\1/ 3519 foobarfoo 3520 0: barfoo 3521 1: foo 3522 foobarfootling 3523 0: barfoo 3524 1: foo 3525\= Expect no match 3526 foobar 3527No match 3528 barfoo 3529No match 3530 3531/(?i:saturday|sunday)/ 3532 saturday 3533 0: saturday 3534 sunday 3535 0: sunday 3536 Saturday 3537 0: Saturday 3538 Sunday 3539 0: Sunday 3540 SATURDAY 3541 0: SATURDAY 3542 SUNDAY 3543 0: SUNDAY 3544 SunDay 3545 0: SunDay 3546 3547/(a(?i)bc|BB)x/ 3548 abcx 3549 0: abcx 3550 1: abc 3551 aBCx 3552 0: aBCx 3553 1: aBC 3554 bbx 3555 0: bbx 3556 1: bb 3557 BBx 3558 0: BBx 3559 1: BB 3560\= Expect no match 3561 abcX 3562No match 3563 aBCX 3564No match 3565 bbX 3566No match 3567 BBX 3568No match 3569 3570/^([ab](?i)[cd]|[ef])/ 3571 ac 3572 0: ac 3573 1: ac 3574 aC 3575 0: aC 3576 1: aC 3577 bD 3578 0: bD 3579 1: bD 3580 elephant 3581 0: e 3582 1: e 3583 Europe 3584 0: E 3585 1: E 3586 frog 3587 0: f 3588 1: f 3589 France 3590 0: F 3591 1: F 3592\= Expect no match 3593 Africa 3594No match 3595 3596/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/ 3597 ab 3598 0: ab 3599 1: ab 3600 aBd 3601 0: aBd 3602 1: aBd 3603 xy 3604 0: xy 3605 1: xy 3606 xY 3607 0: xY 3608 1: xY 3609 zebra 3610 0: z 3611 1: z 3612 Zambesi 3613 0: Z 3614 1: Z 3615\= Expect no match 3616 aCD 3617No match 3618 XY 3619No match 3620 3621/(?<=foo\n)^bar/m 3622 foo\nbar 3623 0: bar 3624\= Expect no match 3625 bar 3626No match 3627 baz\nbar 3628No match 3629 3630/(?<=(?<!foo)bar)baz/ 3631 barbaz 3632 0: baz 3633 barbarbaz 3634 0: baz 3635 koobarbaz 3636 0: baz 3637\= Expect no match 3638 baz 3639No match 3640 foobarbaz 3641No match 3642 3643# The cases of aaaa and aaaaaa are missed out below because Perl does things 3644# differently. We know that odd, and maybe incorrect, things happen with 3645# recursive references in Perl, as far as 5.11.3 - see some stuff in test #2. 3646 3647/^(a\1?){4}$/ 3648 aaaaa 3649 0: aaaaa 3650 1: a 3651 aaaaaaa 3652 0: aaaaaaa 3653 1: a 3654 aaaaaaaaaa 3655 0: aaaaaaaaaa 3656 1: aaaa 3657\= Expect no match 3658 a 3659No match 3660 aa 3661No match 3662 aaa 3663No match 3664 aaaaaaaa 3665No match 3666 aaaaaaaaa 3667No match 3668 aaaaaaaaaaa 3669No match 3670 aaaaaaaaaaaa 3671No match 3672 aaaaaaaaaaaaa 3673No match 3674 aaaaaaaaaaaaaa 3675No match 3676 aaaaaaaaaaaaaaa 3677No match 3678 aaaaaaaaaaaaaaaa 3679No match 3680 3681/^(a\1?)(a\1?)(a\2?)(a\3?)$/ 3682 aaaa 3683 0: aaaa 3684 1: a 3685 2: a 3686 3: a 3687 4: a 3688 aaaaa 3689 0: aaaaa 3690 1: a 3691 2: aa 3692 3: a 3693 4: a 3694 aaaaaa 3695 0: aaaaaa 3696 1: a 3697 2: aa 3698 3: a 3699 4: aa 3700 aaaaaaa 3701 0: aaaaaaa 3702 1: a 3703 2: aa 3704 3: aaa 3705 4: a 3706 aaaaaaaaaa 3707 0: aaaaaaaaaa 3708 1: a 3709 2: aa 3710 3: aaa 3711 4: aaaa 3712\= Expect no match 3713 a 3714No match 3715 aa 3716No match 3717 aaa 3718No match 3719 aaaaaaaa 3720No match 3721 aaaaaaaaa 3722No match 3723 aaaaaaaaaaa 3724No match 3725 aaaaaaaaaaaa 3726No match 3727 aaaaaaaaaaaaa 3728No match 3729 aaaaaaaaaaaaaa 3730No match 3731 aaaaaaaaaaaaaaa 3732No match 3733 aaaaaaaaaaaaaaaa 3734No match 3735 3736# The following tests are taken from the Perl 5.005 test suite; some of them 3737# are compatible with 5.004, but I'd rather not have to sort them out. 3738 3739/abc/ 3740 abc 3741 0: abc 3742 xabcy 3743 0: abc 3744 ababc 3745 0: abc 3746\= Expect no match 3747 xbc 3748No match 3749 axc 3750No match 3751 abx 3752No match 3753 3754/ab*c/ 3755 abc 3756 0: abc 3757 3758/ab*bc/ 3759 abc 3760 0: abc 3761 abbc 3762 0: abbc 3763 abbbbc 3764 0: abbbbc 3765 3766/.{1}/ 3767 abbbbc 3768 0: a 3769 3770/.{3,4}/ 3771 abbbbc 3772 0: abbb 3773 3774/ab{0,}bc/ 3775 abbbbc 3776 0: abbbbc 3777 3778/ab+bc/ 3779 abbc 3780 0: abbc 3781\= Expect no match 3782 abc 3783No match 3784 abq 3785No match 3786 3787/ab{1,}bc/ 3788 3789/ab+bc/ 3790 abbbbc 3791 0: abbbbc 3792 3793/ab{1,}bc/ 3794 abbbbc 3795 0: abbbbc 3796 3797/ab{1,3}bc/ 3798 abbbbc 3799 0: abbbbc 3800 3801/ab{3,4}bc/ 3802 abbbbc 3803 0: abbbbc 3804 3805/ab{4,5}bc/ 3806\= Expect no match 3807 abq 3808No match 3809 abbbbc 3810No match 3811 3812/ab?bc/ 3813 abbc 3814 0: abbc 3815 abc 3816 0: abc 3817 3818/ab{0,1}bc/ 3819 abc 3820 0: abc 3821 3822/ab?bc/ 3823 3824/ab?c/ 3825 abc 3826 0: abc 3827 3828/ab{0,1}c/ 3829 abc 3830 0: abc 3831 3832/^abc$/ 3833 abc 3834 0: abc 3835\= Expect no match 3836 abbbbc 3837No match 3838 abcc 3839No match 3840 3841/^abc/ 3842 abcc 3843 0: abc 3844 3845/^abc$/ 3846 3847/abc$/ 3848 aabc 3849 0: abc 3850\= Expect no match 3851 aabcd 3852No match 3853 3854/^/ 3855 abc 3856 0: 3857 3858/$/ 3859 abc 3860 0: 3861 3862/a.c/ 3863 abc 3864 0: abc 3865 axc 3866 0: axc 3867 3868/a.*c/ 3869 axyzc 3870 0: axyzc 3871 3872/a[bc]d/ 3873 abd 3874 0: abd 3875\= Expect no match 3876 axyzd 3877No match 3878 abc 3879No match 3880 3881/a[b-d]e/ 3882 ace 3883 0: ace 3884 3885/a[b-d]/ 3886 aac 3887 0: ac 3888 3889/a[-b]/ 3890 a- 3891 0: a- 3892 3893/a[b-]/ 3894 a- 3895 0: a- 3896 3897/a]/ 3898 a] 3899 0: a] 3900 3901/a[]]b/ 3902 a]b 3903 0: a]b 3904 3905/a[^bc]d/ 3906 aed 3907 0: aed 3908\= Expect no match 3909 abd 3910No match 3911 abd 3912No match 3913 3914/a[^-b]c/ 3915 adc 3916 0: adc 3917 3918/a[^]b]c/ 3919 adc 3920 0: adc 3921 a-c 3922 0: a-c 3923\= Expect no match 3924 a]c 3925No match 3926 3927/\ba\b/ 3928 a- 3929 0: a 3930 -a 3931 0: a 3932 -a- 3933 0: a 3934 3935/\by\b/ 3936\= Expect no match 3937 xy 3938No match 3939 yz 3940No match 3941 xyz 3942No match 3943 3944/\Ba\B/ 3945\= Expect no match 3946 a- 3947No match 3948 -a 3949No match 3950 -a- 3951No match 3952 3953/\By\b/ 3954 xy 3955 0: y 3956 3957/\by\B/ 3958 yz 3959 0: y 3960 3961/\By\B/ 3962 xyz 3963 0: y 3964 3965/\w/ 3966 a 3967 0: a 3968 3969/\W/ 3970 - 3971 0: - 3972\= Expect no match 3973 a 3974No match 3975 3976/a\sb/ 3977 a b 3978 0: a b 3979 3980/a\Sb/ 3981 a-b 3982 0: a-b 3983\= Expect no match 3984 a b 3985No match 3986 3987/\d/ 3988 1 3989 0: 1 3990 3991/\D/ 3992 - 3993 0: - 3994\= Expect no match 3995 1 3996No match 3997 3998/[\w]/ 3999 a 4000 0: a 4001 4002/[\W]/ 4003 - 4004 0: - 4005\= Expect no match 4006 a 4007No match 4008 4009/a[\s]b/ 4010 a b 4011 0: a b 4012 4013/a[\S]b/ 4014 a-b 4015 0: a-b 4016\= Expect no match 4017 a b 4018No match 4019 4020/[\d]/ 4021 1 4022 0: 1 4023 4024/[\D]/ 4025 - 4026 0: - 4027\= Expect no match 4028 1 4029No match 4030 4031/ab|cd/ 4032 abc 4033 0: ab 4034 abcd 4035 0: ab 4036 4037/()ef/ 4038 def 4039 0: ef 4040 1: 4041 4042/$b/ 4043 4044/a\(b/ 4045 a(b 4046 0: a(b 4047 4048/a\(*b/ 4049 ab 4050 0: ab 4051 a((b 4052 0: a((b 4053 4054/a\\b/ 4055 a\\b 4056 0: a\b 4057 4058/((a))/ 4059 abc 4060 0: a 4061 1: a 4062 2: a 4063 4064/(a)b(c)/ 4065 abc 4066 0: abc 4067 1: a 4068 2: c 4069 4070/a+b+c/ 4071 aabbabc 4072 0: abc 4073 4074/a{1,}b{1,}c/ 4075 aabbabc 4076 0: abc 4077 4078/a.+?c/ 4079 abcabc 4080 0: abc 4081 4082/(a+|b)*/ 4083 ab 4084 0: ab 4085 1: b 4086 4087/(a+|b){0,}/ 4088 ab 4089 0: ab 4090 1: b 4091 4092/(a+|b)+/ 4093 ab 4094 0: ab 4095 1: b 4096 4097/(a+|b){1,}/ 4098 ab 4099 0: ab 4100 1: b 4101 4102/(a+|b)?/ 4103 ab 4104 0: a 4105 1: a 4106 4107/(a+|b){0,1}/ 4108 ab 4109 0: a 4110 1: a 4111 4112/[^ab]*/ 4113 cde 4114 0: cde 4115 4116/abc/ 4117\= Expect no match 4118 b 4119No match 4120 4121/a*/ 4122 \ 4123 0: 4124 4125/([abc])*d/ 4126 abbbcd 4127 0: abbbcd 4128 1: c 4129 4130/([abc])*bcd/ 4131 abcd 4132 0: abcd 4133 1: a 4134 4135/a|b|c|d|e/ 4136 e 4137 0: e 4138 4139/(a|b|c|d|e)f/ 4140 ef 4141 0: ef 4142 1: e 4143 4144/abcd*efg/ 4145 abcdefg 4146 0: abcdefg 4147 4148/ab*/ 4149 xabyabbbz 4150 0: ab 4151 xayabbbz 4152 0: a 4153 4154/(ab|cd)e/ 4155 abcde 4156 0: cde 4157 1: cd 4158 4159/[abhgefdc]ij/ 4160 hij 4161 0: hij 4162 4163/^(ab|cd)e/ 4164 4165/(abc|)ef/ 4166 abcdef 4167 0: ef 4168 1: 4169 4170/(a|b)c*d/ 4171 abcd 4172 0: bcd 4173 1: b 4174 4175/(ab|ab*)bc/ 4176 abc 4177 0: abc 4178 1: a 4179 4180/a([bc]*)c*/ 4181 abc 4182 0: abc 4183 1: bc 4184 4185/a([bc]*)(c*d)/ 4186 abcd 4187 0: abcd 4188 1: bc 4189 2: d 4190 4191/a([bc]+)(c*d)/ 4192 abcd 4193 0: abcd 4194 1: bc 4195 2: d 4196 4197/a([bc]*)(c+d)/ 4198 abcd 4199 0: abcd 4200 1: b 4201 2: cd 4202 4203/a[bcd]*dcdcde/ 4204 adcdcde 4205 0: adcdcde 4206 4207/a[bcd]+dcdcde/ 4208\= Expect no match 4209 abcde 4210No match 4211 adcdcde 4212No match 4213 4214/(ab|a)b*c/ 4215 abc 4216 0: abc 4217 1: ab 4218 4219/((a)(b)c)(d)/ 4220 abcd 4221 0: abcd 4222 1: abc 4223 2: a 4224 3: b 4225 4: d 4226 4227/[a-zA-Z_][a-zA-Z0-9_]*/ 4228 alpha 4229 0: alpha 4230 4231/^a(bc+|b[eh])g|.h$/ 4232 abh 4233 0: bh 4234 4235/(bc+d$|ef*g.|h?i(j|k))/ 4236 effgz 4237 0: effgz 4238 1: effgz 4239 ij 4240 0: ij 4241 1: ij 4242 2: j 4243 reffgz 4244 0: effgz 4245 1: effgz 4246\= Expect no match 4247 effg 4248No match 4249 bcdd 4250No match 4251 4252/((((((((((a))))))))))/ 4253 a 4254 0: a 4255 1: a 4256 2: a 4257 3: a 4258 4: a 4259 5: a 4260 6: a 4261 7: a 4262 8: a 4263 9: a 426410: a 4265 4266/((((((((((a))))))))))\10/ 4267 aa 4268 0: aa 4269 1: a 4270 2: a 4271 3: a 4272 4: a 4273 5: a 4274 6: a 4275 7: a 4276 8: a 4277 9: a 427810: a 4279 4280/(((((((((a)))))))))/ 4281 a 4282 0: a 4283 1: a 4284 2: a 4285 3: a 4286 4: a 4287 5: a 4288 6: a 4289 7: a 4290 8: a 4291 9: a 4292 4293/multiple words of text/ 4294\= Expect no match 4295 aa 4296No match 4297 uh-uh 4298No match 4299 4300/multiple words/ 4301 multiple words, yeah 4302 0: multiple words 4303 4304/(.*)c(.*)/ 4305 abcde 4306 0: abcde 4307 1: ab 4308 2: de 4309 4310/\((.*), (.*)\)/ 4311 (a, b) 4312 0: (a, b) 4313 1: a 4314 2: b 4315 4316/[k]/ 4317 4318/abcd/ 4319 abcd 4320 0: abcd 4321 4322/a(bc)d/ 4323 abcd 4324 0: abcd 4325 1: bc 4326 4327/a[-]?c/ 4328 ac 4329 0: ac 4330 4331/(abc)\1/ 4332 abcabc 4333 0: abcabc 4334 1: abc 4335 4336/([a-c]*)\1/ 4337 abcabc 4338 0: abcabc 4339 1: abc 4340 4341/(a)|\1/ 4342 a 4343 0: a 4344 1: a 4345 ab 4346 0: a 4347 1: a 4348\= Expect no match 4349 x 4350No match 4351 4352/(([a-c])b*?\2)*/ 4353 ababbbcbc 4354 0: ababb 4355 1: bb 4356 2: b 4357 4358/(([a-c])b*?\2){3}/ 4359 ababbbcbc 4360 0: ababbbcbc 4361 1: cbc 4362 2: c 4363 4364/((\3|b)\2(a)x)+/ 4365 aaaxabaxbaaxbbax 4366 0: bbax 4367 1: bbax 4368 2: b 4369 3: a 4370 4371/((\3|b)\2(a)){2,}/ 4372 bbaababbabaaaaabbaaaabba 4373 0: bbaaaabba 4374 1: bba 4375 2: b 4376 3: a 4377 4378/abc/i 4379 ABC 4380 0: ABC 4381 XABCY 4382 0: ABC 4383 ABABC 4384 0: ABC 4385\= Expect no match 4386 aaxabxbaxbbx 4387No match 4388 XBC 4389No match 4390 AXC 4391No match 4392 ABX 4393No match 4394 4395/ab*c/i 4396 ABC 4397 0: ABC 4398 4399/ab*bc/i 4400 ABC 4401 0: ABC 4402 ABBC 4403 0: ABBC 4404 4405/ab*?bc/i 4406 ABBBBC 4407 0: ABBBBC 4408 4409/ab{0,}?bc/i 4410 ABBBBC 4411 0: ABBBBC 4412 4413/ab+?bc/i 4414 ABBC 4415 0: ABBC 4416 4417/ab+bc/i 4418\= Expect no match 4419 ABC 4420No match 4421 ABQ 4422No match 4423 4424/ab{1,}bc/i 4425 4426/ab+bc/i 4427 ABBBBC 4428 0: ABBBBC 4429 4430/ab{1,}?bc/i 4431 ABBBBC 4432 0: ABBBBC 4433 4434/ab{1,3}?bc/i 4435 ABBBBC 4436 0: ABBBBC 4437 4438/ab{3,4}?bc/i 4439 ABBBBC 4440 0: ABBBBC 4441 4442/ab{4,5}?bc/i 4443\= Expect no match 4444 ABQ 4445No match 4446 ABBBBC 4447No match 4448 4449/ab??bc/i 4450 ABBC 4451 0: ABBC 4452 ABC 4453 0: ABC 4454 4455/ab{0,1}?bc/i 4456 ABC 4457 0: ABC 4458 4459/ab??bc/i 4460 4461/ab??c/i 4462 ABC 4463 0: ABC 4464 4465/ab{0,1}?c/i 4466 ABC 4467 0: ABC 4468 4469/^abc$/i 4470 ABC 4471 0: ABC 4472\= Expect no match 4473 ABBBBC 4474No match 4475 ABCC 4476No match 4477 4478/^abc/i 4479 ABCC 4480 0: ABC 4481 4482/^abc$/i 4483 4484/abc$/i 4485 AABC 4486 0: ABC 4487 4488/^/i 4489 ABC 4490 0: 4491 4492/$/i 4493 ABC 4494 0: 4495 4496/a.c/i 4497 ABC 4498 0: ABC 4499 AXC 4500 0: AXC 4501 4502/a.*?c/i 4503 AXYZC 4504 0: AXYZC 4505 4506/a.*c/i 4507 AABC 4508 0: AABC 4509\= Expect no match 4510 AXYZD 4511No match 4512 4513/a[bc]d/i 4514 ABD 4515 0: ABD 4516 4517/a[b-d]e/i 4518 ACE 4519 0: ACE 4520\= Expect no match 4521 ABC 4522No match 4523 ABD 4524No match 4525 4526/a[b-d]/i 4527 AAC 4528 0: AC 4529 4530/a[-b]/i 4531 A- 4532 0: A- 4533 4534/a[b-]/i 4535 A- 4536 0: A- 4537 4538/a]/i 4539 A] 4540 0: A] 4541 4542/a[]]b/i 4543 A]B 4544 0: A]B 4545 4546/a[^bc]d/i 4547 AED 4548 0: AED 4549 4550/a[^-b]c/i 4551 ADC 4552 0: ADC 4553\= Expect no match 4554 ABD 4555No match 4556 A-C 4557No match 4558 4559/a[^]b]c/i 4560 ADC 4561 0: ADC 4562 4563/ab|cd/i 4564 ABC 4565 0: AB 4566 ABCD 4567 0: AB 4568 4569/()ef/i 4570 DEF 4571 0: EF 4572 1: 4573 4574/$b/i 4575\= Expect no match 4576 A]C 4577No match 4578 B 4579No match 4580 4581/a\(b/i 4582 A(B 4583 0: A(B 4584 4585/a\(*b/i 4586 AB 4587 0: AB 4588 A((B 4589 0: A((B 4590 4591/a\\b/i 4592 A\\b 4593 0: A\b 4594 a\\B 4595 0: a\B 4596 4597/((a))/i 4598 ABC 4599 0: A 4600 1: A 4601 2: A 4602 4603/(a)b(c)/i 4604 ABC 4605 0: ABC 4606 1: A 4607 2: C 4608 4609/a+b+c/i 4610 AABBABC 4611 0: ABC 4612 4613/a{1,}b{1,}c/i 4614 AABBABC 4615 0: ABC 4616 4617/a.+?c/i 4618 ABCABC 4619 0: ABC 4620 4621/a.*?c/i 4622 ABCABC 4623 0: ABC 4624 4625/a.{0,5}?c/i 4626 ABCABC 4627 0: ABC 4628 4629/(a+|b)*/i 4630 AB 4631 0: AB 4632 1: B 4633 4634/(a+|b){0,}/i 4635 AB 4636 0: AB 4637 1: B 4638 4639/(a+|b)+/i 4640 AB 4641 0: AB 4642 1: B 4643 4644/(a+|b){1,}/i 4645 AB 4646 0: AB 4647 1: B 4648 4649/(a+|b)?/i 4650 AB 4651 0: A 4652 1: A 4653 4654/(a+|b){0,1}/i 4655 AB 4656 0: A 4657 1: A 4658 4659/(a+|b){0,1}?/i 4660 AB 4661 0: 4662 4663/[^ab]*/i 4664 CDE 4665 0: CDE 4666 4667/([abc])*d/i 4668 ABBBCD 4669 0: ABBBCD 4670 1: C 4671 4672/([abc])*bcd/i 4673 ABCD 4674 0: ABCD 4675 1: A 4676 4677/a|b|c|d|e/i 4678 E 4679 0: E 4680 4681/(a|b|c|d|e)f/i 4682 EF 4683 0: EF 4684 1: E 4685 4686/abcd*efg/i 4687 ABCDEFG 4688 0: ABCDEFG 4689 4690/ab*/i 4691 XABYABBBZ 4692 0: AB 4693 XAYABBBZ 4694 0: A 4695 4696/(ab|cd)e/i 4697 ABCDE 4698 0: CDE 4699 1: CD 4700 4701/[abhgefdc]ij/i 4702 HIJ 4703 0: HIJ 4704 4705/^(ab|cd)e/i 4706\= Expect no match 4707 ABCDE 4708No match 4709 4710/(abc|)ef/i 4711 ABCDEF 4712 0: EF 4713 1: 4714 4715/(a|b)c*d/i 4716 ABCD 4717 0: BCD 4718 1: B 4719 4720/(ab|ab*)bc/i 4721 ABC 4722 0: ABC 4723 1: A 4724 4725/a([bc]*)c*/i 4726 ABC 4727 0: ABC 4728 1: BC 4729 4730/a([bc]*)(c*d)/i 4731 ABCD 4732 0: ABCD 4733 1: BC 4734 2: D 4735 4736/a([bc]+)(c*d)/i 4737 ABCD 4738 0: ABCD 4739 1: BC 4740 2: D 4741 4742/a([bc]*)(c+d)/i 4743 ABCD 4744 0: ABCD 4745 1: B 4746 2: CD 4747 4748/a[bcd]*dcdcde/i 4749 ADCDCDE 4750 0: ADCDCDE 4751 4752/a[bcd]+dcdcde/i 4753 4754/(ab|a)b*c/i 4755 ABC 4756 0: ABC 4757 1: AB 4758 4759/((a)(b)c)(d)/i 4760 ABCD 4761 0: ABCD 4762 1: ABC 4763 2: A 4764 3: B 4765 4: D 4766 4767/[a-zA-Z_][a-zA-Z0-9_]*/i 4768 ALPHA 4769 0: ALPHA 4770 4771/^a(bc+|b[eh])g|.h$/i 4772 ABH 4773 0: BH 4774 4775/(bc+d$|ef*g.|h?i(j|k))/i 4776 EFFGZ 4777 0: EFFGZ 4778 1: EFFGZ 4779 IJ 4780 0: IJ 4781 1: IJ 4782 2: J 4783 REFFGZ 4784 0: EFFGZ 4785 1: EFFGZ 4786\= Expect no match 4787 ADCDCDE 4788No match 4789 EFFG 4790No match 4791 BCDD 4792No match 4793 4794/((((((((((a))))))))))/i 4795 A 4796 0: A 4797 1: A 4798 2: A 4799 3: A 4800 4: A 4801 5: A 4802 6: A 4803 7: A 4804 8: A 4805 9: A 480610: A 4807 4808/((((((((((a))))))))))\10/i 4809 AA 4810 0: AA 4811 1: A 4812 2: A 4813 3: A 4814 4: A 4815 5: A 4816 6: A 4817 7: A 4818 8: A 4819 9: A 482010: A 4821 4822/(((((((((a)))))))))/i 4823 A 4824 0: A 4825 1: A 4826 2: A 4827 3: A 4828 4: A 4829 5: A 4830 6: A 4831 7: A 4832 8: A 4833 9: A 4834 4835/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i 4836 A 4837 0: A 4838 1: A 4839 4840/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i 4841 C 4842 0: C 4843 1: C 4844 4845/multiple words of text/i 4846\= Expect no match 4847 AA 4848No match 4849 UH-UH 4850No match 4851 4852/multiple words/i 4853 MULTIPLE WORDS, YEAH 4854 0: MULTIPLE WORDS 4855 4856/(.*)c(.*)/i 4857 ABCDE 4858 0: ABCDE 4859 1: AB 4860 2: DE 4861 4862/\((.*), (.*)\)/i 4863 (A, B) 4864 0: (A, B) 4865 1: A 4866 2: B 4867 4868/[k]/i 4869 4870/abcd/i 4871 ABCD 4872 0: ABCD 4873 4874/a(bc)d/i 4875 ABCD 4876 0: ABCD 4877 1: BC 4878 4879/a[-]?c/i 4880 AC 4881 0: AC 4882 4883/(abc)\1/i 4884 ABCABC 4885 0: ABCABC 4886 1: ABC 4887 4888/([a-c]*)\1/i 4889 ABCABC 4890 0: ABCABC 4891 1: ABC 4892 4893/a(?!b)./ 4894 abad 4895 0: ad 4896 4897/a(?=d)./ 4898 abad 4899 0: ad 4900 4901/a(?=c|d)./ 4902 abad 4903 0: ad 4904 4905/a(?:b|c|d)(.)/ 4906 ace 4907 0: ace 4908 1: e 4909 4910/a(?:b|c|d)*(.)/ 4911 ace 4912 0: ace 4913 1: e 4914 4915/a(?:b|c|d)+?(.)/ 4916 ace 4917 0: ace 4918 1: e 4919 acdbcdbe 4920 0: acd 4921 1: d 4922 4923/a(?:b|c|d)+(.)/ 4924 acdbcdbe 4925 0: acdbcdbe 4926 1: e 4927 4928/a(?:b|c|d){2}(.)/ 4929 acdbcdbe 4930 0: acdb 4931 1: b 4932 4933/a(?:b|c|d){4,5}(.)/ 4934 acdbcdbe 4935 0: acdbcdb 4936 1: b 4937 4938/a(?:b|c|d){4,5}?(.)/ 4939 acdbcdbe 4940 0: acdbcd 4941 1: d 4942 4943/((foo)|(bar))*/ 4944 foobar 4945 0: foobar 4946 1: bar 4947 2: foo 4948 3: bar 4949 4950/a(?:b|c|d){6,7}(.)/ 4951 acdbcdbe 4952 0: acdbcdbe 4953 1: e 4954 4955/a(?:b|c|d){6,7}?(.)/ 4956 acdbcdbe 4957 0: acdbcdbe 4958 1: e 4959 4960/a(?:b|c|d){5,6}(.)/ 4961 acdbcdbe 4962 0: acdbcdbe 4963 1: e 4964 4965/a(?:b|c|d){5,6}?(.)/ 4966 acdbcdbe 4967 0: acdbcdb 4968 1: b 4969 4970/a(?:b|c|d){5,7}(.)/ 4971 acdbcdbe 4972 0: acdbcdbe 4973 1: e 4974 4975/a(?:b|c|d){5,7}?(.)/ 4976 acdbcdbe 4977 0: acdbcdb 4978 1: b 4979 4980/a(?:b|(c|e){1,2}?|d)+?(.)/ 4981 ace 4982 0: ace 4983 1: c 4984 2: e 4985 4986/^(.+)?B/ 4987 AB 4988 0: AB 4989 1: A 4990 4991/^([^a-z])|(\^)$/ 4992 . 4993 0: . 4994 1: . 4995 4996/^[<>]&/ 4997 <&OUT 4998 0: <& 4999 5000/^(a\1?){4}$/ 5001 aaaaaaaaaa 5002 0: aaaaaaaaaa 5003 1: aaaa 5004\= Expect no match 5005 AB 5006No match 5007 aaaaaaaaa 5008No match 5009 aaaaaaaaaaa 5010No match 5011 5012/^(a(?(1)\1)){4}$/ 5013 aaaaaaaaaa 5014 0: aaaaaaaaaa 5015 1: aaaa 5016\= Expect no match 5017 aaaaaaaaa 5018No match 5019 aaaaaaaaaaa 5020No match 5021 5022/(?:(f)(o)(o)|(b)(a)(r))*/ 5023 foobar 5024 0: foobar 5025 1: f 5026 2: o 5027 3: o 5028 4: b 5029 5: a 5030 6: r 5031 5032/(?<=a)b/ 5033 ab 5034 0: b 5035\= Expect no match 5036 cb 5037No match 5038 b 5039No match 5040 5041/(?<!c)b/ 5042 ab 5043 0: b 5044 b 5045 0: b 5046 b 5047 0: b 5048 5049/(?:..)*a/ 5050 aba 5051 0: aba 5052 5053/(?:..)*?a/ 5054 aba 5055 0: a 5056 5057/^(?:b|a(?=(.)))*\1/ 5058 abc 5059 0: ab 5060 1: b 5061 5062/^(){3,5}/ 5063 abc 5064 0: 5065 1: 5066 5067/^(a+)*ax/ 5068 aax 5069 0: aax 5070 1: a 5071 5072/^((a|b)+)*ax/ 5073 aax 5074 0: aax 5075 1: a 5076 2: a 5077 5078/^((a|bc)+)*ax/ 5079 aax 5080 0: aax 5081 1: a 5082 2: a 5083 5084/(a|x)*ab/ 5085 cab 5086 0: ab 5087 5088/(a)*ab/ 5089 cab 5090 0: ab 5091 5092/(?:(?i)a)b/ 5093 ab 5094 0: ab 5095 5096/((?i)a)b/ 5097 ab 5098 0: ab 5099 1: a 5100 5101/(?:(?i)a)b/ 5102 Ab 5103 0: Ab 5104 5105/((?i)a)b/ 5106 Ab 5107 0: Ab 5108 1: A 5109 5110/(?:(?i)a)b/ 5111\= Expect no match 5112 cb 5113No match 5114 aB 5115No match 5116 5117/((?i)a)b/ 5118 5119/(?i:a)b/ 5120 ab 5121 0: ab 5122 5123/((?i:a))b/ 5124 ab 5125 0: ab 5126 1: a 5127 5128/(?i:a)b/ 5129 Ab 5130 0: Ab 5131 5132/((?i:a))b/ 5133 Ab 5134 0: Ab 5135 1: A 5136 5137/(?i:a)b/ 5138\= Expect no match 5139 aB 5140No match 5141 aB 5142No match 5143 5144/((?i:a))b/ 5145 5146/(?:(?-i)a)b/i 5147 ab 5148 0: ab 5149 5150/((?-i)a)b/i 5151 ab 5152 0: ab 5153 1: a 5154 5155/(?:(?-i)a)b/i 5156 aB 5157 0: aB 5158 5159/((?-i)a)b/i 5160 aB 5161 0: aB 5162 1: a 5163 5164/(?:(?-i)a)b/i 5165 aB 5166 0: aB 5167\= Expect no match 5168 Ab 5169No match 5170 AB 5171No match 5172 5173/(?-i:a)b/i 5174 ab 5175 0: ab 5176 5177/((?-i:a))b/i 5178 ab 5179 0: ab 5180 1: a 5181 5182/(?-i:a)b/i 5183 aB 5184 0: aB 5185 5186/((?-i:a))b/i 5187 aB 5188 0: aB 5189 1: a 5190 5191/(?-i:a)b/i 5192\= Expect no match 5193 AB 5194No match 5195 Ab 5196No match 5197 5198/((?-i:a))b/i 5199 5200/(?-i:a)b/i 5201 aB 5202 0: aB 5203 5204/((?-i:a))b/i 5205 aB 5206 0: aB 5207 1: a 5208 5209/(?-i:a)b/i 5210\= Expect no match 5211 Ab 5212No match 5213 AB 5214No match 5215 5216/((?-i:a))b/i 5217 5218/((?-i:a.))b/i 5219\= Expect no match 5220 AB 5221No match 5222 a\nB 5223No match 5224 5225/((?s-i:a.))b/i 5226 a\nB 5227 0: a\x0aB 5228 1: a\x0a 5229 5230/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/ 5231 cabbbb 5232 0: cabbbb 5233 5234/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/ 5235 caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 5236 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb 5237 5238/(ab)\d\1/i 5239 Ab4ab 5240 0: Ab4ab 5241 1: Ab 5242 ab4Ab 5243 0: ab4Ab 5244 1: ab 5245 5246/foo\w*\d{4}baz/ 5247 foobar1234baz 5248 0: foobar1234baz 5249 5250/x(~~)*(?:(?:F)?)?/ 5251 x~~ 5252 0: x~~ 5253 1: ~~ 5254 5255/^a(?#xxx){3}c/ 5256 aaac 5257 0: aaac 5258 5259/^a (?#xxx) (?#yyy) {3}c/x 5260 aaac 5261 0: aaac 5262 5263/(?<![cd])b/ 5264\= Expect no match 5265 B\nB 5266No match 5267 dbcb 5268No match 5269 5270/(?<![cd])[ab]/ 5271 dbaacb 5272 0: a 5273 5274/(?<!(c|d))b/ 5275 5276/(?<!(c|d))[ab]/ 5277 dbaacb 5278 0: a 5279 5280/(?<!cd)[ab]/ 5281 cdaccb 5282 0: b 5283 5284/^(?:a?b?)*$/ 5285 \ 5286 0: 5287 a 5288 0: a 5289 ab 5290 0: ab 5291 aaa 5292 0: aaa 5293\= Expect no match 5294 dbcb 5295No match 5296 a-- 5297No match 5298 aa-- 5299No match 5300 5301/((?s)^a(.))((?m)^b$)/ 5302 a\nb\nc\n 5303 0: a\x0ab 5304 1: a\x0a 5305 2: \x0a 5306 3: b 5307 5308/((?m)^b$)/ 5309 a\nb\nc\n 5310 0: b 5311 1: b 5312 5313/(?m)^b/ 5314 a\nb\n 5315 0: b 5316 5317/(?m)^(b)/ 5318 a\nb\n 5319 0: b 5320 1: b 5321 5322/((?m)^b)/ 5323 a\nb\n 5324 0: b 5325 1: b 5326 5327/\n((?m)^b)/ 5328 a\nb\n 5329 0: \x0ab 5330 1: b 5331 5332/((?s).)c(?!.)/ 5333 a\nb\nc\n 5334 0: \x0ac 5335 1: \x0a 5336 a\nb\nc\n 5337 0: \x0ac 5338 1: \x0a 5339 5340/((?s)b.)c(?!.)/ 5341 a\nb\nc\n 5342 0: b\x0ac 5343 1: b\x0a 5344 a\nb\nc\n 5345 0: b\x0ac 5346 1: b\x0a 5347 5348/^b/ 5349 5350/()^b/ 5351\= Expect no match 5352 a\nb\nc\n 5353No match 5354 a\nb\nc\n 5355No match 5356 5357/((?m)^b)/ 5358 a\nb\nc\n 5359 0: b 5360 1: b 5361 5362/(x)?(?(1)a|b)/ 5363\= Expect no match 5364 a 5365No match 5366 a 5367No match 5368 5369/(x)?(?(1)b|a)/ 5370 a 5371 0: a 5372 5373/()?(?(1)b|a)/ 5374 a 5375 0: a 5376 5377/()(?(1)b|a)/ 5378 5379/()?(?(1)a|b)/ 5380 a 5381 0: a 5382 1: 5383 5384/^(\()?blah(?(1)(\)))$/ 5385 (blah) 5386 0: (blah) 5387 1: ( 5388 2: ) 5389 blah 5390 0: blah 5391\= Expect no match 5392 a 5393No match 5394 blah) 5395No match 5396 (blah 5397No match 5398 5399/^(\(+)?blah(?(1)(\)))$/ 5400 (blah) 5401 0: (blah) 5402 1: ( 5403 2: ) 5404 blah 5405 0: blah 5406\= Expect no match 5407 blah) 5408No match 5409 (blah 5410No match 5411 5412/(?(?!a)a|b)/ 5413 5414/(?(?!a)b|a)/ 5415 a 5416 0: a 5417 5418/(?(?=a)b|a)/ 5419\= Expect no match 5420 a 5421No match 5422 a 5423No match 5424 5425/(?(?=a)a|b)/ 5426 a 5427 0: a 5428 5429/(?=(a+?))(\1ab)/ 5430 aaab 5431 0: aab 5432 1: a 5433 2: aab 5434 5435/^(?=(a+?))\1ab/ 5436 5437/(\w+:)+/ 5438 one: 5439 0: one: 5440 1: one: 5441 5442/$(?<=^(a))/ 5443 a 5444 0: 5445 1: a 5446 5447/(?=(a+?))(\1ab)/ 5448 aaab 5449 0: aab 5450 1: a 5451 2: aab 5452 5453/^(?=(a+?))\1ab/ 5454\= Expect no match 5455 aaab 5456No match 5457 aaab 5458No match 5459 5460/([\w:]+::)?(\w+)$/ 5461 abcd 5462 0: abcd 5463 1: <unset> 5464 2: abcd 5465 xy:z:::abcd 5466 0: xy:z:::abcd 5467 1: xy:z::: 5468 2: abcd 5469 5470/^[^bcd]*(c+)/ 5471 aexycd 5472 0: aexyc 5473 1: c 5474 5475/(a*)b+/ 5476 caab 5477 0: aab 5478 1: aa 5479 5480/([\w:]+::)?(\w+)$/ 5481 abcd 5482 0: abcd 5483 1: <unset> 5484 2: abcd 5485 xy:z:::abcd 5486 0: xy:z:::abcd 5487 1: xy:z::: 5488 2: abcd 5489\= Expect no match 5490 abcd: 5491No match 5492 abcd: 5493No match 5494 5495/^[^bcd]*(c+)/ 5496 aexycd 5497 0: aexyc 5498 1: c 5499 5500/(>a+)ab/ 5501 5502/(?>a+)b/ 5503 aaab 5504 0: aaab 5505 5506/([[:]+)/ 5507 a:[b]: 5508 0: :[ 5509 1: :[ 5510 5511/([[=]+)/ 5512 a=[b]= 5513 0: =[ 5514 1: =[ 5515 5516/([[.]+)/ 5517 a.[b]. 5518 0: .[ 5519 1: .[ 5520 5521/((?>a+)b)/ 5522 aaab 5523 0: aaab 5524 1: aaab 5525 5526/(?>(a+))b/ 5527 aaab 5528 0: aaab 5529 1: aaa 5530 5531/((?>[^()]+)|\([^()]*\))+/ 5532 ((abc(ade)ufh()()x 5533 0: abc(ade)ufh()()x 5534 1: x 5535 5536/a\Z/ 5537\= Expect no match 5538 aaab 5539No match 5540 a\nb\n 5541No match 5542 5543/b\Z/ 5544 a\nb\n 5545 0: b 5546 5547/b\z/ 5548 5549/b\Z/ 5550 a\nb 5551 0: b 5552 5553/b\z/ 5554 a\nb 5555 0: b 5556 5557/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/ 5558 a 5559 0: a 5560 1: 5561 abc 5562 0: abc 5563 1: 5564 a-b 5565 0: a-b 5566 1: 5567 0-9 5568 0: 0-9 5569 1: 5570 a.b 5571 0: a.b 5572 1: 5573 5.6.7 5574 0: 5.6.7 5575 1: 5576 the.quick.brown.fox 5577 0: the.quick.brown.fox 5578 1: 5579 a100.b200.300c 5580 0: a100.b200.300c 5581 1: 5582 12-ab.1245 5583 0: 12-ab.1245 5584 1: 5585\= Expect no match 5586 \ 5587No match 5588 .a 5589No match 5590 -a 5591No match 5592 a- 5593No match 5594 a. 5595No match 5596 a_b 5597No match 5598 a.- 5599No match 5600 a.. 5601No match 5602 ab..bc 5603No match 5604 the.quick.brown.fox- 5605No match 5606 the.quick.brown.fox. 5607No match 5608 the.quick.brown.fox_ 5609No match 5610 the.quick.brown.fox+ 5611No match 5612 5613/(?>.*)(?<=(abcd|wxyz))/ 5614 alphabetabcd 5615 0: alphabetabcd 5616 1: abcd 5617 endingwxyz 5618 0: endingwxyz 5619 1: wxyz 5620\= Expect no match 5621 a rather long string that doesn't end with one of them 5622No match 5623 5624/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/ 5625 word cat dog elephant mussel cow horse canary baboon snake shark otherword 5626 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword 5627\= Expect no match 5628 word cat dog elephant mussel cow horse canary baboon snake shark 5629No match 5630 5631/word (?>[a-zA-Z0-9]+ ){0,30}otherword/ 5632\= Expect no match 5633 word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope 5634No match 5635 5636/(?<=\d{3}(?!999))foo/ 5637 999foo 5638 0: foo 5639 123999foo 5640 0: foo 5641\= Expect no match 5642 123abcfoo 5643No match 5644 5645/(?<=(?!...999)\d{3})foo/ 5646 999foo 5647 0: foo 5648 123999foo 5649 0: foo 5650\= Expect no match 5651 123abcfoo 5652No match 5653 5654/(?<=\d{3}(?!999)...)foo/ 5655 123abcfoo 5656 0: foo 5657 123456foo 5658 0: foo 5659\= Expect no match 5660 123999foo 5661No match 5662 5663/(?<=\d{3}...)(?<!999)foo/ 5664 123abcfoo 5665 0: foo 5666 123456foo 5667 0: foo 5668\= Expect no match 5669 123999foo 5670No match 5671 5672/<a[\s]+href[\s]*=[\s]* # find <a href= 5673 ([\"\'])? # find single or double quote 5674 (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching 5675 # quote, otherwise match up to next space 5676/isx 5677 <a href=abcd xyz 5678 0: <a href=abcd 5679 1: <unset> 5680 2: <unset> 5681 3: abcd 5682 <a href=\"abcd xyz pqr\" cats 5683 0: <a href="abcd xyz pqr" 5684 1: " 5685 2: abcd xyz pqr 5686 <a href=\'abcd xyz pqr\' cats 5687 0: <a href='abcd xyz pqr' 5688 1: ' 5689 2: abcd xyz pqr 5690 5691/<a\s+href\s*=\s* # find <a href= 5692 (["'])? # find single or double quote 5693 (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching 5694 # quote, otherwise match up to next space 5695/isx 5696 <a href=abcd xyz 5697 0: <a href=abcd 5698 1: <unset> 5699 2: <unset> 5700 3: abcd 5701 <a href=\"abcd xyz pqr\" cats 5702 0: <a href="abcd xyz pqr" 5703 1: " 5704 2: abcd xyz pqr 5705 <a href = \'abcd xyz pqr\' cats 5706 0: <a href = 'abcd xyz pqr' 5707 1: ' 5708 2: abcd xyz pqr 5709 5710/<a\s+href(?>\s*)=(?>\s*) # find <a href= 5711 (["'])? # find single or double quote 5712 (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching 5713 # quote, otherwise match up to next space 5714/isx 5715 <a href=abcd xyz 5716 0: <a href=abcd 5717 1: <unset> 5718 2: <unset> 5719 3: abcd 5720 <a href=\"abcd xyz pqr\" cats 5721 0: <a href="abcd xyz pqr" 5722 1: " 5723 2: abcd xyz pqr 5724 <a href = \'abcd xyz pqr\' cats 5725 0: <a href = 'abcd xyz pqr' 5726 1: ' 5727 2: abcd xyz pqr 5728 5729/((Z)+|A)*/ 5730 ZABCDEFG 5731 0: ZA 5732 1: A 5733 2: Z 5734 5735/(Z()|A)*/ 5736 ZABCDEFG 5737 0: ZA 5738 1: A 5739 2: 5740 5741/(Z(())|A)*/ 5742 ZABCDEFG 5743 0: ZA 5744 1: A 5745 2: 5746 3: 5747 5748/((?>Z)+|A)*/ 5749 ZABCDEFG 5750 0: ZA 5751 1: A 5752 5753/((?>)+|A)*/ 5754 ZABCDEFG 5755 0: 5756 1: 5757 5758/a*/g 5759 abbab 5760 0: a 5761 0: 5762 0: 5763 0: a 5764 0: 5765 0: 5766 5767/^[\d-a]/ 5768 abcde 5769 0: a 5770 -things 5771 0: - 5772 0digit 5773 0: 0 5774\= Expect no match 5775 bcdef 5776No match 5777 5778/[[:space:]]+/ 5779 > \x09\x0a\x0c\x0d\x0b< 5780 0: \x09\x0a\x0c\x0d\x0b 5781 5782/[[:blank:]]+/ 5783 > \x09\x0a\x0c\x0d\x0b< 5784 0: \x09 5785 5786/[\s]+/ 5787 > \x09\x0a\x0c\x0d\x0b< 5788 0: \x09\x0a\x0c\x0d\x0b 5789 5790/\s+/ 5791 > \x09\x0a\x0c\x0d\x0b< 5792 0: \x09\x0a\x0c\x0d\x0b 5793 5794/ab/x 5795 ab 5796 0: ab 5797 5798/(?!\A)x/m 5799 a\nxb\n 5800 0: x 5801 5802/(?!^)x/m 5803\= Expect no match 5804 a\nxb\n 5805No match 5806 5807/abc\Qabc\Eabc/ 5808 abcabcabc 5809 0: abcabcabc 5810 5811/abc\Q(*+|\Eabc/ 5812 abc(*+|abc 5813 0: abc(*+|abc 5814 5815/ abc\Q abc\Eabc/x 5816 abc abcabc 5817 0: abc abcabc 5818\= Expect no match 5819 abcabcabc 5820No match 5821 5822/abc#comment 5823 \Q#not comment 5824 literal\E/x 5825 abc#not comment\n literal 5826 0: abc#not comment\x0a literal 5827 5828/abc#comment 5829 \Q#not comment 5830 literal/x 5831 abc#not comment\n literal 5832 0: abc#not comment\x0a literal 5833 5834/abc#comment 5835 \Q#not comment 5836 literal\E #more comment 5837 /x 5838 abc#not comment\n literal 5839 0: abc#not comment\x0a literal 5840 5841/abc#comment 5842 \Q#not comment 5843 literal\E #more comment/x 5844 abc#not comment\n literal 5845 0: abc#not comment\x0a literal 5846 5847/\Qabc\$xyz\E/ 5848 abc\\\$xyz 5849 0: abc\$xyz 5850 5851/\Qabc\E\$\Qxyz\E/ 5852 abc\$xyz 5853 0: abc$xyz 5854 5855/\Gabc/ 5856 abc 5857 0: abc 5858\= Expect no match 5859 xyzabc 5860No match 5861 5862/\Gabc./g 5863 abc1abc2xyzabc3 5864 0: abc1 5865 0: abc2 5866 5867/abc./g 5868 abc1abc2xyzabc3 5869 0: abc1 5870 0: abc2 5871 0: abc3 5872 5873/a(?x: b c )d/ 5874 XabcdY 5875 0: abcd 5876\= Expect no match 5877 Xa b c d Y 5878No match 5879 5880/((?x)x y z | a b c)/ 5881 XabcY 5882 0: abc 5883 1: abc 5884 AxyzB 5885 0: xyz 5886 1: xyz 5887 5888/(?i)AB(?-i)C/ 5889 XabCY 5890 0: abC 5891\= Expect no match 5892 XabcY 5893No match 5894 5895/((?i)AB(?-i)C|D)E/ 5896 abCE 5897 0: abCE 5898 1: abC 5899 DE 5900 0: DE 5901 1: D 5902\= Expect no match 5903 abcE 5904No match 5905 abCe 5906No match 5907 dE 5908No match 5909 De 5910No match 5911 5912/(.*)\d+\1/ 5913 abc123abc 5914 0: abc123abc 5915 1: abc 5916 abc123bc 5917 0: bc123bc 5918 1: bc 5919 5920/(.*)\d+\1/s 5921 abc123abc 5922 0: abc123abc 5923 1: abc 5924 abc123bc 5925 0: bc123bc 5926 1: bc 5927 5928/((.*))\d+\1/ 5929 abc123abc 5930 0: abc123abc 5931 1: abc 5932 2: abc 5933 abc123bc 5934 0: bc123bc 5935 1: bc 5936 2: bc 5937 5938# This tests for an IPv6 address in the form where it can have up to 5939# eight components, one and only one of which is empty. This must be 5940# an internal component. 5941 5942/^(?!:) # colon disallowed at start 5943 (?: # start of item 5944 (?: [0-9a-f]{1,4} | # 1-4 hex digits or 5945 (?(1)0 | () ) ) # if null previously matched, fail; else null 5946 : # followed by colon 5947 ){1,7} # end item; 1-7 of them required 5948 [0-9a-f]{1,4} $ # final hex number at end of string 5949 (?(1)|.) # check that there was an empty component 5950 /ix 5951 a123::a123 5952 0: a123::a123 5953 1: 5954 a123:b342::abcd 5955 0: a123:b342::abcd 5956 1: 5957 a123:b342::324e:abcd 5958 0: a123:b342::324e:abcd 5959 1: 5960 a123:ddde:b342::324e:abcd 5961 0: a123:ddde:b342::324e:abcd 5962 1: 5963 a123:ddde:b342::324e:dcba:abcd 5964 0: a123:ddde:b342::324e:dcba:abcd 5965 1: 5966 a123:ddde:9999:b342::324e:dcba:abcd 5967 0: a123:ddde:9999:b342::324e:dcba:abcd 5968 1: 5969\= Expect no match 5970 1:2:3:4:5:6:7:8 5971No match 5972 a123:bce:ddde:9999:b342::324e:dcba:abcd 5973No match 5974 a123::9999:b342::324e:dcba:abcd 5975No match 5976 abcde:2:3:4:5:6:7:8 5977No match 5978 ::1 5979No match 5980 abcd:fee0:123:: 5981No match 5982 :1 5983No match 5984 1: 5985No match 5986 5987/[z\Qa-d]\E]/ 5988 z 5989 0: z 5990 a 5991 0: a 5992 - 5993 0: - 5994 d 5995 0: d 5996 ] 5997 0: ] 5998\= Expect no match 5999 b 6000No match 6001 6002/(a+)*b/ 6003\= Expect no match 6004 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 6005No match 6006 6007/(?i)reg(?:ul(?:[a�]|ae)r|ex)/ 6008 REGular 6009 0: REGular 6010 regulaer 6011 0: regulaer 6012 Regex 6013 0: Regex 6014 regul�r 6015 0: regul\xe4r 6016 6017/����[�-��-�]+/ 6018 ����� 6019 0: \xc5\xe6\xe5\xe4\xe0 6020 ����� 6021 0: \xc5\xe6\xe5\xe4\xff 6022 ����� 6023 0: \xc5\xe6\xe5\xe4\xc0 6024 ����� 6025 0: \xc5\xe6\xe5\xe4\xdf 6026 6027/(?<=Z)X./ 6028 \x84XAZXB 6029 0: XB 6030 6031/ab cd (?x) de fg/ 6032 ab cd defg 6033 0: ab cd defg 6034 6035/ab cd(?x) de fg/ 6036 ab cddefg 6037 0: ab cddefg 6038\= Expect no match 6039 abcddefg 6040No match 6041 6042/(?<![^f]oo)(bar)/ 6043 foobarX 6044 0: bar 6045 1: bar 6046\= Expect no match 6047 boobarX 6048No match 6049 6050/(?<![^f])X/ 6051 offX 6052 0: X 6053\= Expect no match 6054 onyX 6055No match 6056 6057/(?<=[^f])X/ 6058 onyX 6059 0: X 6060\= Expect no match 6061 offX 6062No match 6063 6064/^/gm 6065 a\nb\nc\n 6066 0: 6067 0: 6068 0: 6069 \ 6070 0: 6071 6072/(?<=C\n)^/gm 6073 A\nC\nC\n 6074 0: 6075 6076/(?:(?(1)a|b)(X))+/ 6077 bXaX 6078 0: bXaX 6079 1: X 6080 6081/(?:(?(1)\1a|b)(X|Y))+/ 6082 bXXaYYaY 6083 0: bXXaYYaY 6084 1: Y 6085 bXYaXXaX 6086 0: bX 6087 1: X 6088 6089/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/ 6090 bXXaYYaY 6091 0: bX 6092 1: 6093 2: 6094 3: 6095 4: 6096 5: 6097 6: 6098 7: 6099 8: 6100 9: 610110: X 6102 6103/[[,abc,]+]/ 6104 abc] 6105 0: abc] 6106 a,b] 6107 0: a,b] 6108 [a,b,c] 6109 0: [a,b,c] 6110 6111/(?-x: )/x 6112 A\x20B 6113 0: 6114 6115"(?x)(?-x: \s*#\s*)" 6116 A # B 6117 0: # 6118\= Expect no match 6119 # 6120No match 6121 6122"(?x-is)(?:(?-ixs) \s*#\s*) include" 6123 A #include 6124 0: #include 6125\= Expect no match 6126 A#include 6127No match 6128 A #Include 6129No match 6130 6131/a*b*\w/ 6132 aaabbbb 6133 0: aaabbbb 6134 aaaa 6135 0: aaaa 6136 a 6137 0: a 6138 6139/a*b?\w/ 6140 aaabbbb 6141 0: aaabb 6142 aaaa 6143 0: aaaa 6144 a 6145 0: a 6146 6147/a*b{0,4}\w/ 6148 aaabbbb 6149 0: aaabbbb 6150 aaaa 6151 0: aaaa 6152 a 6153 0: a 6154 6155/a*b{0,}\w/ 6156 aaabbbb 6157 0: aaabbbb 6158 aaaa 6159 0: aaaa 6160 a 6161 0: a 6162 6163/a*\d*\w/ 6164 0a 6165 0: 0a 6166 a 6167 0: a 6168 6169/a*b *\w/x 6170 a 6171 0: a 6172 6173/a*b#comment 6174 *\w/x 6175 a 6176 0: a 6177 6178/a* b *\w/x 6179 a 6180 0: a 6181 6182/^\w+=.*(\\\n.*)*/ 6183 abc=xyz\\\npqr 6184 0: abc=xyz\ 6185 6186/(?=(\w+))\1:/ 6187 abcd: 6188 0: abcd: 6189 1: abcd 6190 6191/^(?=(\w+))\1:/ 6192 abcd: 6193 0: abcd: 6194 1: abcd 6195 6196/^\Eabc/ 6197 abc 6198 0: abc 6199 6200/^[\Eabc]/ 6201 a 6202 0: a 6203\= Expect no match 6204 E 6205No match 6206 6207/^[a-\Ec]/ 6208 b 6209 0: b 6210\= Expect no match 6211 - 6212No match 6213 E 6214No match 6215 6216/^[a\E\E-\Ec]/ 6217 b 6218 0: b 6219\= Expect no match 6220 - 6221No match 6222 E 6223No match 6224 6225/^[\E\Qa\E-\Qz\E]+/ 6226 b 6227 0: b 6228\= Expect no match 6229 - 6230No match 6231 6232/^[a\Q]bc\E]/ 6233 a 6234 0: a 6235 ] 6236 0: ] 6237 c 6238 0: c 6239 6240/^[a-\Q\E]/ 6241 a 6242 0: a 6243 - 6244 0: - 6245 6246/^(a()*)*/ 6247 aaaa 6248 0: aaaa 6249 1: a 6250 2: 6251 6252/^(?:a(?:(?:))*)*/ 6253 aaaa 6254 0: aaaa 6255 6256/^(a()+)+/ 6257 aaaa 6258 0: aaaa 6259 1: a 6260 2: 6261 6262/^(?:a(?:(?:))+)+/ 6263 aaaa 6264 0: aaaa 6265 6266/(a){0,3}(?(1)b|(c|))*D/ 6267 abbD 6268 0: abbD 6269 1: a 6270 ccccD 6271 0: ccccD 6272 1: <unset> 6273 2: 6274 D 6275 0: D 6276 1: <unset> 6277 2: 6278 6279/(a|)*\d/ 6280 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 6281 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 6282 1: 6283\= Expect no match 6284 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 6285No match 6286 6287/(?>a|)*\d/ 6288 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 6289 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 6290\= Expect no match 6291 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 6292No match 6293 6294/(?:a|)*\d/ 6295 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 6296 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4 6297\= Expect no match 6298 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 6299No match 6300 6301/\Z/g 6302 abc\n 6303 0: 6304 0: 6305 6306/^(?s)(?>.*)(?<!\n)/ 6307 abc 6308 0: abc 6309\= Expect no match 6310 abc\n 6311No match 6312 6313/^(?![^\n]*\n\z)/ 6314 abc 6315 0: 6316\= Expect no match 6317 abc\n 6318No match 6319 6320/\z(?<!\n)/ 6321 abc 6322 0: 6323\= Expect no match 6324 abc\n 6325No match 6326 6327/(.*(.)?)*/ 6328 abcd 6329 0: abcd 6330 1: 6331 6332/( (A | (?(1)0|) )* )/x 6333 abcd 6334 0: 6335 1: 6336 2: 6337 6338/( ( (?(1)0|) )* )/x 6339 abcd 6340 0: 6341 1: 6342 2: 6343 6344/( (?(1)0|)* )/x 6345 abcd 6346 0: 6347 1: 6348 6349/[[:abcd:xyz]]/ 6350 a] 6351 0: a] 6352 :] 6353 0: :] 6354 6355/[abc[:x\]pqr]/ 6356 a 6357 0: a 6358 [ 6359 0: [ 6360 : 6361 0: : 6362 ] 6363 0: ] 6364 p 6365 0: p 6366 6367/.*[op][xyz]/ 6368\= Expect no match 6369 fooabcfoo 6370No match 6371 6372/(?(?=.*b)b|^)/ 6373 adc 6374 0: 6375 abc 6376 0: b 6377 6378/(?(?=^.*b)b|^)/ 6379 adc 6380 0: 6381\= Expect no match 6382 abc 6383No match 6384 6385/(?(?=.*b)b|^)*/ 6386 adc 6387 0: 6388 abc 6389 0: 6390 6391/(?(?=.*b)b|^)+/ 6392 adc 6393 0: 6394 abc 6395 0: b 6396 6397/(?(?=b).*b|^d)/ 6398 abc 6399 0: b 6400 6401/(?(?=.*b).*b|^d)/ 6402 abc 6403 0: ab 6404 6405/^%((?(?=[a])[^%])|b)*%$/ 6406 %ab% 6407 0: %ab% 6408 1: 6409 6410/(?i)a(?-i)b|c/ 6411 XabX 6412 0: ab 6413 XAbX 6414 0: Ab 6415 CcC 6416 0: c 6417\= Expect no match 6418 XABX 6419No match 6420 6421/[\x00-\xff\s]+/ 6422 \x0a\x0b\x0c\x0d 6423 0: \x0a\x0b\x0c\x0d 6424 6425/(abc)\1/i 6426\= Expect no match 6427 abc 6428No match 6429 6430/(abc)\1/ 6431\= Expect no match 6432 abc 6433No match 6434 6435/[^a]*/i 6436 12abc 6437 0: 12 6438 12ABC 6439 0: 12 6440 6441/[^a]*+/i 6442 12abc 6443 0: 12 6444 12ABC 6445 0: 12 6446 6447/[^a]*?X/i 6448\= Expect no match 6449 12abc 6450No match 6451 12ABC 6452No match 6453 6454/[^a]+?X/i 6455\= Expect no match 6456 12abc 6457No match 6458 12ABC 6459No match 6460 6461/[^a]?X/i 6462 12aXbcX 6463 0: X 6464 12AXBCX 6465 0: X 6466 BCX 6467 0: CX 6468 6469/[^a]??X/i 6470 12aXbcX 6471 0: X 6472 12AXBCX 6473 0: X 6474 BCX 6475 0: CX 6476 6477/[^a]?+X/i 6478 12aXbcX 6479 0: cX 6480 12AXBCX 6481 0: CX 6482 BCX 6483 0: CX 6484 6485/[^a]{2,3}/i 6486 abcdef 6487 0: bcd 6488 ABCDEF 6489 0: BCD 6490 6491/[^a]{2,3}?/i 6492 abcdef 6493 0: bc 6494 ABCDEF 6495 0: BC 6496 6497/[^a]{2,3}+/i 6498 abcdef 6499 0: bcd 6500 ABCDEF 6501 0: BCD 6502 6503/((a|)+)+Z/ 6504 Z 6505 0: Z 6506 1: 6507 2: 6508 6509/(a)b|(a)c/ 6510 ac 6511 0: ac 6512 1: <unset> 6513 2: a 6514 6515/(?>(a))b|(a)c/ 6516 ac 6517 0: ac 6518 1: <unset> 6519 2: a 6520 6521/(?=(a))ab|(a)c/ 6522 ac 6523 0: ac 6524 1: <unset> 6525 2: a 6526 6527/((?>(a))b|(a)c)/ 6528 ac 6529 0: ac 6530 1: ac 6531 2: <unset> 6532 3: a 6533 6534/((?>(a))b|(a)c)++/ 6535 ac 6536 0: ac 6537 1: ac 6538 2: <unset> 6539 3: a 6540 6541/(?:(?>(a))b|(a)c)++/ 6542 ac 6543 0: ac 6544 1: <unset> 6545 2: a 6546 6547/(?=(?>(a))b|(a)c)(..)/ 6548 ac 6549 0: ac 6550 1: <unset> 6551 2: a 6552 3: ac 6553 6554/(?>(?>(a))b|(a)c)/ 6555 ac 6556 0: ac 6557 1: <unset> 6558 2: a 6559 6560/(?:(?>([ab])))+a=/aftertext 6561 =ba= 6562 0: ba= 6563 0+ 6564 1: b 6565 6566/(?>([ab]))+a=/aftertext 6567 =ba= 6568 0: ba= 6569 0+ 6570 1: b 6571 6572/((?>(a+)b)+(aabab))/ 6573 aaaabaaabaabab 6574 0: aaaabaaabaabab 6575 1: aaaabaaabaabab 6576 2: aaa 6577 3: aabab 6578 6579/(?>a+|ab)+?c/ 6580\= Expect no match 6581 aabc 6582No match 6583 6584/(?>a+|ab)+c/ 6585\= Expect no match 6586 aabc 6587No match 6588 6589/(?:a+|ab)+c/ 6590 aabc 6591 0: aabc 6592 6593/(?(?=(a))a)/ 6594 a 6595 0: a 6596 1: a 6597 6598/(?(?=(a))a)(b)/ 6599 ab 6600 0: ab 6601 1: a 6602 2: b 6603 6604/^(?:a|ab)++c/ 6605\= Expect no match 6606 aaaabc 6607No match 6608 6609/^(?>a|ab)++c/ 6610\= Expect no match 6611 aaaabc 6612No match 6613 6614/^(?:a|ab)+c/ 6615 aaaabc 6616 0: aaaabc 6617 6618/(?=abc){3}abc/aftertext 6619 abcabcabc 6620 0: abc 6621 0+ abcabc 6622\= Expect no match 6623 xyz 6624No match 6625 6626/(?=abc)+abc/aftertext 6627 abcabcabc 6628 0: abc 6629 0+ abcabc 6630\= Expect no match 6631 xyz 6632No match 6633 6634/(?=abc)++abc/aftertext 6635 abcabcabc 6636 0: abc 6637 0+ abcabc 6638\= Expect no match 6639 xyz 6640No match 6641 6642/(?=abc){0}xyz/ 6643 xyz 6644 0: xyz 6645 6646/(?=abc){1}xyz/ 6647\= Expect no match 6648 xyz 6649No match 6650 6651/(?=(a))?./ 6652 ab 6653 0: a 6654 1: a 6655 bc 6656 0: b 6657 6658/(?=(a))??./ 6659 ab 6660 0: a 6661 bc 6662 0: b 6663 6664/^(?=(?1))?[az]([abc])d/ 6665 abd 6666 0: abd 6667 1: b 6668 zcdxx 6669 0: zcd 6670 1: c 6671 6672/^(?!a){0}\w+/ 6673 aaaaa 6674 0: aaaaa 6675 6676/(?<=(abc))?xyz/ 6677 abcxyz 6678 0: xyz 6679 1: abc 6680 pqrxyz 6681 0: xyz 6682 6683/^[\g<a>]+/ 6684 ggg<<<aaa>>> 6685 0: ggg<<<aaa>>> 6686\= Expect no match 6687 \\ga 6688No match 6689 6690/^[\ga]+/ 6691 gggagagaxyz 6692 0: gggagaga 6693 6694/^[:a[:digit:]]+/ 6695 aaaa444:::Z 6696 0: aaaa444::: 6697 6698/^[:a[:digit:]:b]+/ 6699 aaaa444:::bbbZ 6700 0: aaaa444:::bbb 6701 6702/[:a]xxx[b:]/ 6703 :xxx: 6704 0: :xxx: 6705 6706/(?<=a{2})b/i 6707 xaabc 6708 0: b 6709\= Expect no match 6710 xabc 6711No match 6712 6713/(?<!a{2})b/i 6714 xabc 6715 0: b 6716\= Expect no match 6717 xaabc 6718No match 6719 6720/(?<=a\h)c/ 6721 xa c 6722 0: c 6723 6724/(?<=[^a]{2})b/ 6725 axxbc 6726 0: b 6727 aAAbc 6728 0: b 6729\= Expect no match 6730 xaabc 6731No match 6732 6733/(?<=[^a]{2})b/i 6734 axxbc 6735 0: b 6736\= Expect no match 6737 aAAbc 6738No match 6739 xaabc 6740No match 6741 6742/(?<=a\H)c/ 6743 abc 6744 0: c 6745 6746/(?<=a\V)c/ 6747 abc 6748 0: c 6749 6750/(?<=a\v)c/ 6751 a\nc 6752 0: c 6753 6754/(?(?=c)c|d)++Y/ 6755 XcccddYX 6756 0: cccddY 6757 6758/(?(?=c)c|d)*+Y/ 6759 XcccddYX 6760 0: cccddY 6761 6762/^(a{2,3}){2,}+a/ 6763 aaaaaaa 6764 0: aaaaaaa 6765 1: aaa 6766\= Expect no match 6767 aaaaaa 6768No match 6769 aaaaaaaaa 6770No match 6771 6772/^(a{2,3})++a/ 6773\= Expect no match 6774 aaaaaa 6775No match 6776 6777/^(a{2,3})*+a/ 6778\= Expect no match 6779 aaaaaa 6780No match 6781 6782/\H\h\V\v/ 6783 X X\x0a 6784 0: X X\x0a 6785 X\x09X\x0b 6786 0: X\x09X\x0b 6787\= Expect no match 6788 \xa0 X\x0a 6789No match 6790 6791/\H*\h+\V?\v{3,4}/ 6792 \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a 6793 0: \x09 \xa0X\x0a\x0b\x0c\x0d 6794 \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a 6795 0: \x09 \xa0\x0a\x0b\x0c\x0d 6796 \x09\x20\xa0\x0a\x0b\x0c 6797 0: \x09 \xa0\x0a\x0b\x0c 6798\= Expect no match 6799 \x09\x20\xa0\x0a\x0b 6800No match 6801 6802/\H{3,4}/ 6803 XY ABCDE 6804 0: ABCD 6805 XY PQR ST 6806 0: PQR 6807 6808/.\h{3,4}./ 6809 XY AB PQRS 6810 0: B P 6811 6812/\h*X\h?\H+Y\H?Z/ 6813 >XNNNYZ 6814 0: XNNNYZ 6815 > X NYQZ 6816 0: X NYQZ 6817\= Expect no match 6818 >XYZ 6819No match 6820 > X NY Z 6821No match 6822 6823/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/ 6824 >XY\x0aZ\x0aA\x0bNN\x0c 6825 0: XY\x0aZ\x0aA\x0bNN\x0c 6826 >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c 6827 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c 6828 6829/(foo)\Kbar/ 6830 foobar 6831 0: bar 6832 1: foo 6833 6834/(foo)(\Kbar|baz)/ 6835 foobar 6836 0: bar 6837 1: foo 6838 2: bar 6839 foobaz 6840 0: foobaz 6841 1: foo 6842 2: baz 6843 6844/(foo\Kbar)baz/ 6845 foobarbaz 6846 0: barbaz 6847 1: foobar 6848 6849/abc\K|def\K/g,aftertext 6850 Xabcdefghi 6851 0: 6852 0+ defghi 6853 0: 6854 0+ ghi 6855 6856/ab\Kc|de\Kf/g,aftertext 6857 Xabcdefghi 6858 0: c 6859 0+ defghi 6860 0: f 6861 0+ ghi 6862 6863/(?=C)/g,aftertext 6864 ABCDECBA 6865 0: 6866 0+ CDECBA 6867 0: 6868 0+ CBA 6869 6870/^abc\K/aftertext 6871 abcdef 6872 0: 6873 0+ def 6874\= Expect no match 6875 defabcxyz 6876No match 6877 6878/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-2}Z/ 6879 ababababbbabZXXXX 6880 0: ababababbbabZ 6881 1: ab 6882 2: b 6883 6884/(?<A>tom|bon)-\g{A}/ 6885 tom-tom 6886 0: tom-tom 6887 1: tom 6888 bon-bon 6889 0: bon-bon 6890 1: bon 6891 6892/(^(a|b\g{-1}))/ 6893\= Expect no match 6894 bacxxx 6895No match 6896 6897/(?|(abc)|(xyz))\1/ 6898 abcabc 6899 0: abcabc 6900 1: abc 6901 xyzxyz 6902 0: xyzxyz 6903 1: xyz 6904\= Expect no match 6905 abcxyz 6906No match 6907 xyzabc 6908No match 6909 6910/(?|(abc)|(xyz))(?1)/ 6911 abcabc 6912 0: abcabc 6913 1: abc 6914 xyzabc 6915 0: xyzabc 6916 1: xyz 6917\= Expect no match 6918 xyzxyz 6919No match 6920 6921/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/ 6922 XYabcdY 6923 0: XYabcdY 6924 1: a 6925 2: b 6926 3: c 6927 4: d 6928 5: Y 6929 6930/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/ 6931 XYabcdY 6932 0: XYabcdY 6933 1: a 6934 2: b 6935 3: <unset> 6936 4: <unset> 6937 5: c 6938 6: d 6939 7: Y 6940 6941/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/ 6942 XYabcdY 6943 0: XYabcdY 6944 1: a 6945 2: b 6946 3: <unset> 6947 4: <unset> 6948 5: c 6949 6: d 6950 7: Y 6951 6952/(?'abc'\w+):\k<abc>{2}/ 6953 a:aaxyz 6954 0: a:aa 6955 1: a 6956 ab:ababxyz 6957 0: ab:abab 6958 1: ab 6959\= Expect no match 6960 a:axyz 6961No match 6962 ab:abxyz 6963No match 6964 6965/(?'abc'\w+):\g{abc}{2}/ 6966 a:aaxyz 6967 0: a:aa 6968 1: a 6969 ab:ababxyz 6970 0: ab:abab 6971 1: ab 6972\= Expect no match 6973 a:axyz 6974No match 6975 ab:abxyz 6976No match 6977 6978/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x 6979 abd 6980 0: abd 6981 1: a 6982 ce 6983 0: ce 6984 6985/^(a.)\g-1Z/ 6986 aXaXZ 6987 0: aXaXZ 6988 1: aX 6989 6990/^(a.)\g{-1}Z/ 6991 aXaXZ 6992 0: aXaXZ 6993 1: aX 6994 6995/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x 6996 abcd 6997 0: ab 6998 6999/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT)) 7000 (?(DEFINE) 7001 (?<NAME_PAT>[a-z]+) 7002 (?<ADDRESS_PAT>\d+) 7003 )/x 7004 metcalfe 33 7005 0: metcalfe 33 7006 1: metcalfe 7007 2: 33 7008 7009/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/ 7010 1.2.3.4 7011 0: 1.2.3.4 7012 1: <unset> 7013 2: .4 7014 131.111.10.206 7015 0: 131.111.10.206 7016 1: <unset> 7017 2: .206 7018 10.0.0.0 7019 0: 10.0.0.0 7020 1: <unset> 7021 2: .0 7022\= Expect no match 7023 10.6 7024No match 7025 455.3.4.5 7026No match 7027 7028/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/ 7029 1.2.3.4 7030 0: 1.2.3.4 7031 1: .4 7032 131.111.10.206 7033 0: 131.111.10.206 7034 1: .206 7035 10.0.0.0 7036 0: 10.0.0.0 7037 1: .0 7038\= Expect no match 7039 10.6 7040No match 7041 455.3.4.5 7042No match 7043 7044/^(\w++|\s++)*$/ 7045 now is the time for all good men to come to the aid of the party 7046 0: now is the time for all good men to come to the aid of the party 7047 1: party 7048\= Expect no match 7049 this is not a line with only words and spaces! 7050No match 7051 7052/(\d++)(\w)/ 7053 12345a 7054 0: 12345a 7055 1: 12345 7056 2: a 7057\= Expect no match 7058 12345+ 7059No match 7060 7061/a++b/ 7062 aaab 7063 0: aaab 7064 7065/(a++b)/ 7066 aaab 7067 0: aaab 7068 1: aaab 7069 7070/(a++)b/ 7071 aaab 7072 0: aaab 7073 1: aaa 7074 7075/([^()]++|\([^()]*\))+/ 7076 ((abc(ade)ufh()()x 7077 0: abc(ade)ufh()()x 7078 1: x 7079 7080/\(([^()]++|\([^()]+\))+\)/ 7081 (abc) 7082 0: (abc) 7083 1: abc 7084 (abc(def)xyz) 7085 0: (abc(def)xyz) 7086 1: xyz 7087\= Expect no match 7088 ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 7089No match 7090 7091/^([^()]|\((?1)*\))*$/ 7092 abc 7093 0: abc 7094 1: c 7095 a(b)c 7096 0: a(b)c 7097 1: c 7098 a(b(c))d 7099 0: a(b(c))d 7100 1: d 7101\= Expect no match) 7102 a(b(c)d 7103No match 7104 7105/^>abc>([^()]|\((?1)*\))*<xyz<$/ 7106 >abc>123<xyz< 7107 0: >abc>123<xyz< 7108 1: 3 7109 >abc>1(2)3<xyz< 7110 0: >abc>1(2)3<xyz< 7111 1: 3 7112 >abc>(1(2)3)<xyz< 7113 0: >abc>(1(2)3)<xyz< 7114 1: (1(2)3) 7115 7116/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i 7117 1221 7118 0: 1221 7119 1: 1221 7120 2: 1 7121 Satanoscillatemymetallicsonatas 7122 0: Satanoscillatemymetallicsonatas 7123 1: <unset> 7124 2: <unset> 7125 3: Satanoscillatemymetallicsonatas 7126 4: S 7127 AmanaplanacanalPanama 7128 0: AmanaplanacanalPanama 7129 1: <unset> 7130 2: <unset> 7131 3: AmanaplanacanalPanama 7132 4: A 7133 AblewasIereIsawElba 7134 0: AblewasIereIsawElba 7135 1: <unset> 7136 2: <unset> 7137 3: AblewasIereIsawElba 7138 4: A 7139\= Expect no match 7140 Thequickbrownfox 7141No match 7142 7143/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/ 7144 12 7145 0: 12 7146 1: 12 7147 (((2+2)*-3)-7) 7148 0: (((2+2)*-3)-7) 7149 1: (((2+2)*-3)-7) 7150 2: - 7151 -12 7152 0: -12 7153 1: -12 7154\= Expect no match 7155 ((2+2)*-3)-7) 7156No match 7157 7158/^(x(y|(?1){2})z)/ 7159 xyz 7160 0: xyz 7161 1: xyz 7162 2: y 7163 xxyzxyzz 7164 0: xxyzxyzz 7165 1: xxyzxyzz 7166 2: xyzxyz 7167\= Expect no match 7168 xxyzz 7169No match 7170 xxyzxyzxyzz 7171No match 7172 7173/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x 7174 <> 7175 0: <> 7176 1: <> 7177 2: <> 7178 <abcd> 7179 0: <abcd> 7180 1: <abcd> 7181 2: <abcd> 7182 <abc <123> hij> 7183 0: <abc <123> hij> 7184 1: <abc <123> hij> 7185 2: <abc <123> hij> 7186 <abc <def> hij> 7187 0: <def> 7188 1: <def> 7189 2: <def> 7190 <abc<>def> 7191 0: <abc<>def> 7192 1: <abc<>def> 7193 2: <abc<>def> 7194 <abc<> 7195 0: <> 7196 1: <> 7197 2: <> 7198\= Expect no match 7199 <abc 7200No match 7201 7202/^a+(*FAIL)/ 7203\= Expect no match 7204 aaaaaa 7205No match 7206 7207/a+b?c+(*FAIL)/ 7208\= Expect no match 7209 aaabccc 7210No match 7211 7212/a+b?(*PRUNE)c+(*FAIL)/ 7213\= Expect no match 7214 aaabccc 7215No match 7216 7217/a+b?(*COMMIT)c+(*FAIL)/ 7218\= Expect no match 7219 aaabccc 7220No match 7221 7222/a+b?(*SKIP)c+(*FAIL)/ 7223\= Expect no match 7224 aaabcccaaabccc 7225No match 7226 7227/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/ 7228 aaaxxxxxx 7229 0: aaaxxxxxx 7230 aaa++++++ 7231 0: aaa 7232 bbbxxxxx 7233 0: bbbxxxxx 7234 bbb+++++ 7235 0: bbb 7236 cccxxxx 7237 0: cccxxxx 7238 ccc++++ 7239 0: ccc 7240 dddddddd 7241 0: ddd 7242 7243/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/ 7244 aaaxxxxxx 7245 0: aaaxxxxxx 7246 1: aaaxxxxxx 7247 aaa++++++ 7248 0: aaa 7249 1: aaa 7250 bbbxxxxx 7251 0: bbbxxxxx 7252 1: bbbxxxxx 7253 bbb+++++ 7254 0: bbb 7255 1: bbb 7256 cccxxxx 7257 0: cccxxxx 7258 1: cccxxxx 7259 ccc++++ 7260 0: ccc 7261 1: ccc 7262 dddddddd 7263 0: ddd 7264 1: ddd 7265 7266/a+b?(*THEN)c+(*FAIL)/ 7267\= Expect no match 7268 aaabccc 7269No match 7270 7271/(A (A|B(*ACCEPT)|C) D)(E)/x 7272 AB 7273 0: AB 7274 1: AB 7275 2: B 7276 ABX 7277 0: AB 7278 1: AB 7279 2: B 7280 AADE 7281 0: AADE 7282 1: AAD 7283 2: A 7284 3: E 7285 ACDE 7286 0: ACDE 7287 1: ACD 7288 2: C 7289 3: E 7290\= Expect no match 7291 AD 7292No match 7293 7294/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i 7295 1221 7296 0: 1221 7297 1: 1221 7298 2: 1 7299 Satan, oscillate my metallic sonatas! 7300 0: Satan, oscillate my metallic sonatas! 7301 1: <unset> 7302 2: <unset> 7303 3: Satan, oscillate my metallic sonatas 7304 4: S 7305 A man, a plan, a canal: Panama! 7306 0: A man, a plan, a canal: Panama! 7307 1: <unset> 7308 2: <unset> 7309 3: A man, a plan, a canal: Panama 7310 4: A 7311 Able was I ere I saw Elba. 7312 0: Able was I ere I saw Elba. 7313 1: <unset> 7314 2: <unset> 7315 3: Able was I ere I saw Elba 7316 4: A 7317\= Expect no match 7318 The quick brown fox 7319No match 7320 7321/^((.)(?1)\2|.)$/ 7322 a 7323 0: a 7324 1: a 7325 aba 7326 0: aba 7327 1: aba 7328 2: a 7329 aabaa 7330 0: aabaa 7331 1: aabaa 7332 2: a 7333 abcdcba 7334 0: abcdcba 7335 1: abcdcba 7336 2: a 7337 pqaabaaqp 7338 0: pqaabaaqp 7339 1: pqaabaaqp 7340 2: p 7341 ablewasiereisawelba 7342 0: ablewasiereisawelba 7343 1: ablewasiereisawelba 7344 2: a 7345\= Expect no match 7346 rhubarb 7347No match 7348 the quick brown fox 7349No match 7350 7351/(a)(?<=b(?1))/ 7352 baz 7353 0: a 7354 1: a 7355\= Expect no match 7356 caz 7357No match 7358 7359/(?<=b(?1))(a)/ 7360 zbaaz 7361 0: a 7362 1: a 7363\= Expect no match 7364 aaa 7365No match 7366 7367/(?<X>a)(?<=b(?&X))/ 7368 baz 7369 0: a 7370 1: a 7371 7372/^(?|(abc)|(def))\1/ 7373 abcabc 7374 0: abcabc 7375 1: abc 7376 defdef 7377 0: defdef 7378 1: def 7379\= Expect no match 7380 abcdef 7381No match 7382 defabc 7383No match 7384 7385/^(?|(abc)|(def))(?1)/ 7386 abcabc 7387 0: abcabc 7388 1: abc 7389 defabc 7390 0: defabc 7391 1: def 7392\= Expect no match 7393 defdef 7394No match 7395 abcdef 7396No match 7397 7398/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames 7399 a\"aaaaa 7400 0: a"aaaaa 7401 1: " 7402 2: <unset> 7403 3: " 7404 b\"aaaaa 7405 0: b"aaaaa 7406 1: <unset> 7407 2: <unset> 7408 3: <unset> 7409 4: " 7410 5: <unset> 7411 6: " 7412\= Expect no match 7413 b\"11111 7414No match 7415 7416/(?:(?1)|B)(A(*F)|C)/ 7417 ABCD 7418 0: BC 7419 1: C 7420 CCD 7421 0: CC 7422 1: C 7423\= Expect no match 7424 CAD 7425No match 7426 7427/^(?:(?1)|B)(A(*F)|C)/ 7428 CCD 7429 0: CC 7430 1: C 7431 BCD 7432 0: BC 7433 1: C 7434\= Expect no match 7435 ABCD 7436No match 7437 CAD 7438No match 7439 BAD 7440No match 7441 7442/(?:(?1)|B)(A(*ACCEPT)XX|C)D/ 7443 AAD 7444 0: AA 7445 1: A 7446 ACD 7447 0: ACD 7448 1: C 7449 BAD 7450 0: BA 7451 1: A 7452 BCD 7453 0: BCD 7454 1: C 7455 BAX 7456 0: BA 7457 1: A 7458\= Expect no match 7459 ACX 7460No match 7461 ABC 7462No match 7463 7464/(?(DEFINE)(A))B(?1)C/ 7465 BAC 7466 0: BAC 7467 7468/(?(DEFINE)((A)\2))B(?1)C/ 7469 BAAC 7470 0: BAAC 7471 7472/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x 7473 (ab(cd)ef) 7474 0: (ab(cd)ef) 7475 1: (ab(cd)ef) 7476 2: ef 7477 7478/^(?=a(*SKIP)b|ac)/ 7479\= Expect no match 7480 ac 7481No match 7482 7483/^(?=a(*PRUNE)b)/ 7484 ab 7485 0: 7486\= Expect no match 7487 ac 7488No match 7489 7490/^(?=a(*ACCEPT)b)/ 7491 ac 7492 0: 7493 7494/(?>a\Kb)/ 7495 ab 7496 0: b 7497 7498/((?>a\Kb))/ 7499 ab 7500 0: b 7501 1: ab 7502 7503/(a\Kb)/ 7504 ab 7505 0: b 7506 1: ab 7507 7508/^a\Kcz|ac/ 7509 ac 7510 0: ac 7511 7512/(?>a\Kbz|ab)/ 7513 ab 7514 0: ab 7515 7516/^(?&t)(?(DEFINE)(?<t>a\Kb))$/ 7517 ab 7518 0: b 7519 7520/^([^()]|\((?1)*\))*$/ 7521 a(b)c 7522 0: a(b)c 7523 1: c 7524 a(b(c)d)e 7525 0: a(b(c)d)e 7526 1: e 7527 7528/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/ 7529 0 7530 0: 0 7531 1: 0 7532 00 7533 0: 00 7534 1: 00 7535 2: 0 7536 0000 7537 0: 0000 7538 1: 0000 7539 2: 0 7540 7541/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/ 7542 0 7543 0: 0 7544 1: 0 7545 2: 0 7546 00 7547 0: 0 7548 1: 0 7549 2: 0 7550 0000 7551 0: 0 7552 1: 0 7553 2: 0 7554 7555# This one does fail, as expected, in Perl. It needs the complex item at the 7556# end of the pattern. A single letter instead of (B|D) makes it not fail, which 7557# I think is a Perl bug. 7558 7559/A(*COMMIT)(B|D)/ 7560\= Expect no match 7561 ACABX 7562No match 7563 7564# Check the use of names for failure 7565 7566/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark 7567\= Expect no match 7568 AC 7569No match, mark = A 7570 CB 7571No match, mark = B 7572 7573/(*MARK:A)(*SKIP:B)(C|X)/mark 7574 C 7575 0: C 7576 1: C 7577MK: A 7578\= Expect no match 7579 D 7580No match, mark = A 7581 7582/^(A(*THEN:A)B|C(*THEN:B)D)/mark 7583\= Expect no match 7584 CB 7585No match, mark = B 7586 7587/^(?:A(*THEN:A)B|C(*THEN:B)D)/mark 7588\= Expect no match 7589 CB 7590No match, mark = B 7591 7592/^(?>A(*THEN:A)B|C(*THEN:B)D)/mark 7593\= Expect no match 7594 CB 7595No match, mark = B 7596 7597# This should succeed, as the skip causes bump to offset 1 (the mark). Note 7598# that we have to have something complicated such as (B|Z) at the end because, 7599# for Perl, a simple character somehow causes an unwanted optimization to mess 7600# with the handling of backtracking verbs. 7601 7602/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/x,mark 7603 AAAC 7604 0: AC 7605 7606# Test skipping over a non-matching mark. 7607 7608/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/x,mark 7609 AAAC 7610 0: AC 7611 7612# Check shorthand for MARK. 7613 7614/A(*:A)A+(*SKIP:A)(B|Z) | AC/x,mark 7615 AAAC 7616 0: AC 7617 7618/(*:A)A+(*SKIP:A)(B|Z)/mark 7619\= Expect no match 7620 AAAC 7621No match, mark = A 7622 7623# This should succeed, as a non-existent skip name disables the skip. 7624 7625/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark 7626 AAAC 7627 0: AC 7628 7629/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/x,mark 7630 AAAC 7631 0: AC 7632MK: B 7633 7634# COMMIT at the start of a pattern should act like an anchor. Again, however, 7635# we need the complication for Perl. 7636 7637/(*COMMIT)(A|P)(B|P)(C|P)/ 7638 ABCDEFG 7639 0: ABC 7640 1: A 7641 2: B 7642 3: C 7643\= Expect no match 7644 DEFGABC 7645No match 7646 7647# COMMIT inside an atomic group can't stop backtracking over the group. 7648 7649/(\w+)(?>b(*COMMIT))\w{2}/ 7650 abbb 7651 0: abbb 7652 1: a 7653 7654/(\w+)b(*COMMIT)\w{2}/ 7655\= Expect no match 7656 abbb 7657No match 7658 7659# Check opening parens in comment when seeking forward reference. 7660 7661/(?&t)(?#()(?(DEFINE)(?<t>a))/ 7662 bac 7663 0: a 7664 7665# COMMIT should override THEN. 7666 7667/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/ 7668\= Expect no match 7669 yes 7670No match 7671 7672/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/ 7673\= Expect no match 7674 yes 7675No match 7676 7677/b?(*SKIP)c/ 7678 bc 7679 0: bc 7680 abc 7681 0: bc 7682 7683/(*SKIP)bc/ 7684\= Expect no match 7685 a 7686No match 7687 7688/(*SKIP)b/ 7689\= Expect no match 7690 a 7691No match 7692 7693/(?P<abn>(?P=abn)xxx|)+/ 7694 xxx 7695 0: 7696 1: 7697 7698/(?i:([^b]))(?1)/ 7699 aa 7700 0: aa 7701 1: a 7702 aA 7703 0: aA 7704 1: a 7705\= Expect no match 7706 ab 7707No match 7708 aB 7709No match 7710 Ba 7711No match 7712 ba 7713No match 7714 7715/^(?&t)*+(?(DEFINE)(?<t>a))\w$/ 7716 aaaaaaX 7717 0: aaaaaaX 7718\= Expect no match 7719 aaaaaa 7720No match 7721 7722/^(?&t)*(?(DEFINE)(?<t>a))\w$/ 7723 aaaaaaX 7724 0: aaaaaaX 7725 aaaaaa 7726 0: aaaaaa 7727 7728/^(a)*+(\w)/ 7729 aaaaX 7730 0: aaaaX 7731 1: a 7732 2: X 7733 YZ 7734 0: Y 7735 1: <unset> 7736 2: Y 7737\= Expect no match 7738 aaaa 7739No match 7740 7741/^(?:a)*+(\w)/ 7742 aaaaX 7743 0: aaaaX 7744 1: X 7745 YZ 7746 0: Y 7747 1: Y 7748\= Expect no match 7749 aaaa 7750No match 7751 7752/^(a)++(\w)/ 7753 aaaaX 7754 0: aaaaX 7755 1: a 7756 2: X 7757\= Expect no match 7758 aaaa 7759No match 7760 YZ 7761No match 7762 7763/^(?:a)++(\w)/ 7764 aaaaX 7765 0: aaaaX 7766 1: X 7767\= Expect no match 7768 aaaa 7769No match 7770 YZ 7771No match 7772 7773/^(a)?+(\w)/ 7774 aaaaX 7775 0: aa 7776 1: a 7777 2: a 7778 YZ 7779 0: Y 7780 1: <unset> 7781 2: Y 7782 7783/^(?:a)?+(\w)/ 7784 aaaaX 7785 0: aa 7786 1: a 7787 YZ 7788 0: Y 7789 1: Y 7790 7791/^(a){2,}+(\w)/ 7792 aaaaX 7793 0: aaaaX 7794 1: a 7795 2: X 7796\= Expect no match 7797 aaa 7798No match 7799 YZ 7800No match 7801 7802/^(?:a){2,}+(\w)/ 7803 aaaaX 7804 0: aaaaX 7805 1: X 7806\= Expect no match 7807 aaa 7808No match 7809 YZ 7810No match 7811 7812/(a|)*(?1)b/ 7813 b 7814 0: b 7815 1: 7816 ab 7817 0: ab 7818 1: 7819 aab 7820 0: aab 7821 1: 7822 7823/(a)++(?1)b/ 7824\= Expect no match 7825 ab 7826No match 7827 aab 7828No match 7829 7830/(a)*+(?1)b/ 7831\= Expect no match 7832 ab 7833No match 7834 aab 7835No match 7836 7837/(?1)(?:(b)){0}/ 7838 b 7839 0: b 7840 7841/(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x 7842 foo(bar(baz)+baz(bop)) 7843 0: foo(bar(baz)+baz(bop)) 7844 1: foo(bar(baz)+baz(bop)) 7845 2: (bar(baz)+baz(bop)) 7846 3: bar(baz)+baz(bop) 7847 7848/(A (A|B(*ACCEPT)|C) D)(E)/x 7849 AB 7850 0: AB 7851 1: AB 7852 2: B 7853 7854/\A.*?(a|bc)/ 7855 ba 7856 0: ba 7857 1: a 7858 7859/\A.*?(?:a|bc)++/ 7860 ba 7861 0: ba 7862 7863/\A.*?(a|bc)++/ 7864 ba 7865 0: ba 7866 1: a 7867 7868/\A.*?(?:a|bc|d)/ 7869 ba 7870 0: ba 7871 7872/(?:(b))++/ 7873 beetle 7874 0: b 7875 1: b 7876 7877/(?(?=(a(*ACCEPT)z))a)/ 7878 a 7879 0: a 7880 1: a 7881 7882/^(a)(?1)+ab/ 7883 aaaab 7884 0: aaaab 7885 1: a 7886 7887/^(a)(?1)++ab/ 7888\= Expect no match 7889 aaaab 7890No match 7891 7892/^(?=a(*:M))aZ/mark 7893 aZbc 7894 0: aZ 7895MK: M 7896 7897/^(?!(*:M)b)aZ/mark 7898 aZbc 7899 0: aZ 7900 7901/(?(DEFINE)(a))?b(?1)/ 7902 backgammon 7903 0: ba 7904 7905/^\N+/ 7906 abc\ndef 7907 0: abc 7908 7909/^\N{1,}/ 7910 abc\ndef 7911 0: abc 7912 7913/(?(R)a+|(?R)b)/ 7914 aaaabcde 7915 0: aaaab 7916 7917/(?(R)a+|((?R))b)/ 7918 aaaabcde 7919 0: aaaab 7920 1: aaaa 7921 7922/((?(R)a+|(?1)b))/ 7923 aaaabcde 7924 0: aaaab 7925 1: aaaab 7926 7927/((?(R1)a+|(?1)b))/ 7928 aaaabcde 7929 0: aaaab 7930 1: aaaab 7931 7932/((?(R)a|(?1)))*/ 7933 aaa 7934 0: aaa 7935 1: a 7936 7937/((?(R)a|(?1)))+/ 7938 aaa 7939 0: aaa 7940 1: a 7941 7942/a(*:any 7943name)/mark 7944 abc 7945 0: a 7946MK: any \x0aname 7947 7948/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/ 7949 a 7950 0: a 7951 ba 7952 0: a 7953 bba 7954 0: a 7955 7956# Checking revised (*THEN) handling. 7957 7958# Capture 7959 7960/^.*? (a(*THEN)b) c/x 7961\= Expect no match 7962 aabc 7963No match 7964 7965/^.*? (a(*THEN)b|(*F)) c/x 7966 aabc 7967 0: aabc 7968 1: ab 7969 7970/^.*? ( (a(*THEN)b) | (*F) ) c/x 7971 aabc 7972 0: aabc 7973 1: ab 7974 2: ab 7975 7976/^.*? ( (a(*THEN)b) ) c/x 7977\= Expect no match 7978 aabc 7979No match 7980 7981# Non-capture 7982 7983/^.*? (?:a(*THEN)b) c/x 7984\= Expect no match 7985 aabc 7986No match 7987 7988/^.*? (?:a(*THEN)b|(*F)) c/x 7989 aabc 7990 0: aabc 7991 7992/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x 7993 aabc 7994 0: aabc 7995 7996/^.*? (?: (?:a(*THEN)b) ) c/x 7997\= Expect no match 7998 aabc 7999No match 8000 8001# Atomic 8002 8003/^.*? (?>a(*THEN)b) c/x 8004\= Expect no match 8005 aabc 8006No match 8007 8008/^.*? (?>a(*THEN)b|(*F)) c/x 8009 aabc 8010 0: aabc 8011 8012/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x 8013 aabc 8014 0: aabc 8015 8016/^.*? (?> (?>a(*THEN)b) ) c/x 8017\= Expect no match 8018 aabc 8019No match 8020 8021# Possessive capture 8022 8023/^.*? (a(*THEN)b)++ c/x 8024\= Expect no match 8025 aabc 8026No match 8027 8028/^.*? (a(*THEN)b|(*F))++ c/x 8029 aabc 8030 0: aabc 8031 1: ab 8032 8033/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x 8034 aabc 8035 0: aabc 8036 1: ab 8037 2: ab 8038 8039/^.*? ( (a(*THEN)b)++ )++ c/x 8040\= Expect no match 8041 aabc 8042No match 8043 8044# Possessive non-capture 8045 8046/^.*? (?:a(*THEN)b)++ c/x 8047\= Expect no match 8048 aabc 8049No match 8050 8051/^.*? (?:a(*THEN)b|(*F))++ c/x 8052 aabc 8053 0: aabc 8054 8055/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x 8056 aabc 8057 0: aabc 8058 8059/^.*? (?: (?:a(*THEN)b)++ )++ c/x 8060\= Expect no match 8061 aabc 8062No match 8063 8064# Condition assertion 8065 8066/^(?(?=a(*THEN)b)ab|ac)/ 8067 ac 8068 0: ac 8069 8070# Condition 8071 8072/^.*?(?(?=a)a|b(*THEN)c)/ 8073\= Expect no match 8074 ba 8075No match 8076 8077/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/ 8078 ba 8079 0: ba 8080 8081/^.*?(?(?=a)a(*THEN)b|c)/ 8082\= Expect no match 8083 ac 8084No match 8085 8086# Assertion 8087 8088/^.*(?=a(*THEN)b)/ 8089 aabc 8090 0: a 8091 8092# -------------------------- 8093 8094/(?>a(*:m))/imsx,mark 8095 a 8096 0: a 8097MK: m 8098 8099/(?>(a)(*:m))/imsx,mark 8100 a 8101 0: a 8102 1: a 8103MK: m 8104 8105/(?<=a(*ACCEPT)b)c/ 8106 xacd 8107 0: c 8108 8109/(?<=(a(*ACCEPT)b))c/ 8110 xacd 8111 0: c 8112 1: a 8113 8114/(?<=(a(*COMMIT)b))c/ 8115 xabcd 8116 0: c 8117 1: ab 8118\= Expect no match 8119 xacd 8120No match 8121 8122/(?<!a(*FAIL)b)c/ 8123 xcd 8124 0: c 8125 acd 8126 0: c 8127 8128/(?<=a(*:N)b)c/mark 8129 xabcd 8130 0: c 8131MK: N 8132 8133/(?<=a(*PRUNE)b)c/ 8134 xabcd 8135 0: c 8136 8137/(?<=a(*SKIP)b)c/ 8138 xabcd 8139 0: c 8140 8141/(?<=a(*THEN)b)c/ 8142 xabcd 8143 0: c 8144 8145/(a)(?2){2}(.)/ 8146 abcd 8147 0: abcd 8148 1: a 8149 2: d 8150 8151/(*MARK:A)(*PRUNE:B)(C|X)/mark 8152 C 8153 0: C 8154 1: C 8155MK: B 8156\= Expect no match 8157 D 8158No match, mark = B 8159 8160/(*MARK:A)(*PRUNE:B)(C|X)/mark 8161 C 8162 0: C 8163 1: C 8164MK: B 8165\= Expect no match 8166 D 8167No match, mark = B 8168 8169/(*MARK:A)(*THEN:B)(C|X)/mark 8170 C 8171 0: C 8172 1: C 8173MK: B 8174\= Expect no match 8175 D 8176No match, mark = B 8177 8178/(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize 8179 C 8180 0: C 8181 1: C 8182MK: B 8183\= Expect no match 8184 D 8185No match, mark = B 8186 8187/(*MARK:A)(*THEN:B)(C|X)/mark 8188 C 8189 0: C 8190 1: C 8191MK: B 8192\= Expect no match 8193 D 8194No match, mark = B 8195 8196# This should fail, as the skip causes a bump to offset 3 (the skip). 8197 8198/A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark 8199\= Expect no match 8200 AAAC 8201No match, mark = A 8202 8203# Same 8204 8205/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark 8206\= Expect no match 8207 AAAC 8208No match, mark = B 8209 8210/A(*:A)A+(*SKIP)(B|Z) | AC/x,mark 8211\= Expect no match 8212 AAAC 8213No match, mark = A 8214 8215# This should fail, as a null name is the same as no name. 8216 8217/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark 8218\= Expect no match 8219 AAAC 8220No match, mark = A 8221 8222# A check on what happens after hitting a mark and them bumping along to 8223# something that does not even start. Perl reports tags after the failures 8224# here, though it does not when the individual letters are made into something 8225# more complicated. 8226 8227/A(*:A)B|XX(*:B)Y/mark 8228 AABC 8229 0: AB 8230MK: A 8231 XXYZ 8232 0: XXY 8233MK: B 8234\= Expect no match 8235 XAQQ 8236No match, mark = A 8237 XAQQXZZ 8238No match, mark = A 8239 AXQQQ 8240No match, mark = A 8241 AXXQQQ 8242No match, mark = B 8243 8244/^(A(*THEN:A)B|C(*THEN:B)D)/mark 8245 AB 8246 0: AB 8247 1: AB 8248MK: A 8249 CD 8250 0: CD 8251 1: CD 8252MK: B 8253\= Expect no match 8254 AC 8255No match, mark = A 8256 CB 8257No match, mark = B 8258 8259/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark 8260 AB 8261 0: AB 8262 1: AB 8263MK: A 8264 CD 8265 0: CD 8266 1: CD 8267MK: B 8268\= Expect no match 8269 AC 8270No match, mark = A 8271 CB 8272No match, mark = B 8273 8274# An empty name does not pass back an empty string. It is the same as if no 8275# name were given. 8276 8277/^(A(*PRUNE:)B|C(*PRUNE:B)D)/mark 8278 AB 8279 0: AB 8280 1: AB 8281 CD 8282 0: CD 8283 1: CD 8284MK: B 8285 8286# PRUNE goes to next bumpalong; COMMIT does not. 8287 8288/A(*PRUNE:A)B/mark 8289 ACAB 8290 0: AB 8291MK: A 8292 8293# Mark names can be duplicated. 8294 8295/A(*:A)B|X(*:A)Y/mark 8296 AABC 8297 0: AB 8298MK: A 8299 XXYZ 8300 0: XY 8301MK: A 8302 8303/b(*:m)f|a(*:n)w/mark 8304 aw 8305 0: aw 8306MK: n 8307\= Expect no match 8308 abc 8309No match, mark = m 8310 8311/b(*:m)f|aw/mark 8312 abaw 8313 0: aw 8314\= Expect no match 8315 abc 8316No match, mark = m 8317 abax 8318No match, mark = m 8319 8320/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/x,mark 8321 AAAC 8322 0: AAC 8323 8324/a(*PRUNE:X)bc|qq/mark,no_start_optimize 8325\= Expect no match 8326 axy 8327No match, mark = X 8328 8329/a(*THEN:X)bc|qq/mark,no_start_optimize 8330\= Expect no match 8331 axy 8332No match, mark = X 8333 8334/(?=a(*MARK:A)b)..x/mark 8335 abxy 8336 0: abx 8337MK: A 8338\= Expect no match 8339 abpq 8340No match 8341 8342/(?=a(*MARK:A)b)..(*:Y)x/mark 8343 abxy 8344 0: abx 8345MK: Y 8346\= Expect no match 8347 abpq 8348No match 8349 8350/(?=a(*PRUNE:A)b)..x/mark 8351 abxy 8352 0: abx 8353MK: A 8354\= Expect no match 8355 abpq 8356No match 8357 8358/(?=a(*PRUNE:A)b)..(*:Y)x/mark 8359 abxy 8360 0: abx 8361MK: Y 8362\= Expect no match 8363 abpq 8364No match 8365 8366/(?=a(*THEN:A)b)..x/mark 8367 abxy 8368 0: abx 8369MK: A 8370\= Expect no match 8371 abpq 8372No match 8373 8374/(?=a(*THEN:A)b)..(*:Y)x/mark 8375 abxy 8376 0: abx 8377MK: Y 8378\= Expect no match 8379 abpq 8380No match 8381 8382/(another)?(\1?)test/ 8383 hello world test 8384 0: test 8385 1: <unset> 8386 2: 8387 8388/(another)?(\1+)test/ 8389\= Expect no match 8390 hello world test 8391No match 8392 8393/(a(*COMMIT)b){0}a(?1)|aac/ 8394 aac 8395 0: aac 8396 8397/((?:a?)*)*c/ 8398 aac 8399 0: aac 8400 1: 8401 8402/((?>a?)*)*c/ 8403 aac 8404 0: aac 8405 1: 8406 8407/(?>.*?a)(?<=ba)/ 8408 aba 8409 0: ba 8410 8411/(?:.*?a)(?<=ba)/ 8412 aba 8413 0: aba 8414 8415/(?>.*?a)b/s 8416 aab 8417 0: ab 8418 8419/(?>.*?a)b/ 8420 aab 8421 0: ab 8422 8423/(?>^a)b/s 8424\= Expect no match 8425 aab 8426No match 8427 8428/(?>.*?)(?<=(abcd)|(wxyz))/ 8429 alphabetabcd 8430 0: 8431 1: abcd 8432 endingwxyz 8433 0: 8434 1: <unset> 8435 2: wxyz 8436 8437/(?>.*)(?<=(abcd)|(wxyz))/ 8438 alphabetabcd 8439 0: alphabetabcd 8440 1: abcd 8441 endingwxyz 8442 0: endingwxyz 8443 1: <unset> 8444 2: wxyz 8445 8446"(?>.*)foo" 8447\= Expect no match 8448 abcdfooxyz 8449No match 8450 8451"(?>.*?)foo" 8452 abcdfooxyz 8453 0: foo 8454 8455/(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/ 8456 ac 8457 0: ac 8458 8459/(?:(a(*SKIP)b)){0}(?:(?1)|ac)/ 8460 ac 8461 0: ac 8462 8463/(?<=(*SKIP)ac)a/ 8464\= Expect no match 8465 aa 8466No match 8467 8468/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark 8469 AAAC 8470 0: AC 8471 8472/a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/mark 8473 acacd 8474 0: acd 8475MK: n 8476 8477/A(*SKIP:m)x|A(*SKIP:n)x|AB/mark 8478 AB 8479 0: AB 8480 8481/((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/mark 8482 acacd 8483 0: ac 8484MK: n 8485 8486# Tests that try to figure out how Perl works. My hypothesis is that the first 8487# verb that is backtracked onto is the one that acts. This seems to be the case 8488# almost all the time, but there is one exception that is perhaps a bug. 8489 8490# This matches "aaaac"; each PRUNE advances one character until the subject no 8491# longer starts with 5 'a's. 8492 8493/aaaaa(*PRUNE)b|a+c/ 8494 aaaaaac 8495 0: aaaac 8496 8497# Putting SKIP in front of PRUNE makes no difference, as it is never 8498# backtracked onto, whether or not it has a label. 8499 8500/aaaaa(*SKIP)(*PRUNE)b|a+c/ 8501 aaaaaac 8502 0: aaaac 8503 8504/aaaaa(*SKIP:N)(*PRUNE)b|a+c/ 8505 aaaaaac 8506 0: aaaac 8507 8508/aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/ 8509 aaaaaac 8510 0: aaaac 8511 8512# Putting THEN in front makes no difference. 8513 8514/aaaaa(*THEN)(*PRUNE)b|a+c/ 8515 aaaaaac 8516 0: aaaac 8517 8518# However, putting COMMIT in front of the prune changes it to "no match". I 8519# think this is inconsistent and possibly a bug. For the moment, running this 8520# test is moved out of the Perl-compatible file. 8521 8522/aaaaa(*COMMIT)(*PRUNE)b|a+c/ 8523 8524# OK, lets play the same game again using SKIP instead of PRUNE. 8525 8526# This matches "ac" because SKIP forces the next match to start on the 8527# sixth "a". 8528 8529/aaaaa(*SKIP)b|a+c/ 8530 aaaaaac 8531 0: ac 8532 8533# Putting PRUNE in front makes no difference. 8534 8535/aaaaa(*PRUNE)(*SKIP)b|a+c/ 8536 aaaaaac 8537 0: ac 8538 8539# Putting THEN in front makes no difference. 8540 8541/aaaaa(*THEN)(*SKIP)b|a+c/ 8542 aaaaaac 8543 0: ac 8544 8545# In this case, neither does COMMIT. This still matches "ac". 8546 8547/aaaaa(*COMMIT)(*SKIP)b|a+c/ 8548 aaaaaac 8549 0: ac 8550 8551# This gives "no match", as expected. 8552 8553/aaaaa(*COMMIT)b|a+c/ 8554\= Expect no match 8555 aaaaaac 8556No match 8557 8558# ---- Tests using THEN ---- 8559 8560# This matches "aaaaaac", as expected. 8561 8562/aaaaa(*THEN)b|a+c/ 8563 aaaaaac 8564 0: aaaaaac 8565 8566# Putting SKIP in front makes no difference. 8567 8568/aaaaa(*SKIP)(*THEN)b|a+c/ 8569 aaaaaac 8570 0: aaaaaac 8571 8572# Putting PRUNE in front makes no difference. 8573 8574/aaaaa(*PRUNE)(*THEN)b|a+c/ 8575 aaaaaac 8576 0: aaaaaac 8577 8578# Putting COMMIT in front makes no difference. 8579 8580/aaaaa(*COMMIT)(*THEN)b|a+c/ 8581 aaaaaac 8582 0: aaaaaac 8583 8584# End of "priority" tests 8585 8586/aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/ 8587 aaaaaa 8588 0: a 8589 8590/aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/ 8591 aaaaaa 8592 0: a 8593 8594/aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/ 8595 aaaaaa 8596 0: aaaa 8597 8598/aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/ 8599 aaaaaa 8600 0: a 8601 8602/a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/ 8603 aaaac 8604 0: aac 8605 8606/a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/ 8607 aaaac 8608 0: ac 8609 8610/aaa(*PRUNE:A)a(*SKIP:A)b|a+c/ 8611 aaaac 8612 0: aac 8613 8614/aaa(*MARK:A)a(*SKIP:A)b|a+c/ 8615 aaaac 8616 0: ac 8617 8618/a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/mark 8619 aaaaaac 8620 0: ac 8621 8622/.?(a|b(*THEN)c)/ 8623 ba 8624 0: ba 8625 1: a 8626 8627/(a(*COMMIT)b)c|abd/ 8628 abc 8629 0: abc 8630 1: ab 8631\= Expect no match 8632 abd 8633No match 8634 8635/(?=a(*COMMIT)b)abc|abd/ 8636 abc 8637 0: abc 8638 abd 8639 0: abd 8640 8641/(?>a(*COMMIT)b)c|abd/ 8642 abc 8643 0: abc 8644 abd 8645 0: abd 8646 8647/a(?=b(*COMMIT)c)[^d]|abd/ 8648 abc 8649 0: ab 8650\= Expect no match 8651 abd 8652No match 8653 8654/a(?=bc).|abd/ 8655 abd 8656 0: abd 8657 abc 8658 0: ab 8659 8660/a(?>b(*COMMIT)c)d|abd/ 8661\= Expect no match 8662 abceabd 8663No match 8664 8665/a(?>bc)d|abd/ 8666 abceabd 8667 0: abd 8668 8669/(?>a(*COMMIT)b)c|abd/ 8670 abd 8671 0: abd 8672 8673/(?>a(*COMMIT)c)d|abd/ 8674\= Expect no match 8675 abd 8676No match 8677 8678/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/ 8679 ac 8680 0: ac 8681 1: <unset> 8682 2: c 8683 8684# These tests were formerly in test 2, but changes in PCRE and Perl have 8685# made them compatible. 8686 8687/^(a)?(?(1)a|b)+$/ 8688\= Expect no match 8689 a 8690No match 8691 8692/(?=a\Kb)ab/ 8693 ab 8694 0: b 8695 8696/(?!a\Kb)ac/ 8697 ac 8698 0: ac 8699 8700/^abc(?<=b\Kc)d/ 8701 abcd 8702 0: cd 8703 8704/^abc(?<!b\Kq)d/ 8705 abcd 8706 0: abcd 8707 8708/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark 8709\= Expect no match 8710 AAAC 8711No match, mark = A 8712 8713/^((abc|abcx)(*THEN)y|abcd)/ 8714 abcd 8715 0: abcd 8716 1: abcd 8717\= Expect no match 8718 abcxy 8719No match 8720 8721/^((yes|no)(*THEN)(*F))?/ 8722\= Expect no match 8723 yes 8724No match 8725 8726/(A (.*) C? (*THEN) | A D) (*FAIL)/x 8727\= Expect no match 8728 AbcdCBefgBhiBqz 8729No match 8730 8731/(A (.*) C? (*THEN) | A D) z/x 8732\= Expect no match 8733 AbcdCBefgBhiBqz 8734No match 8735 8736/(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x 8737\= Expect no match 8738 AbcdCBefgBhiBqz 8739No match 8740 8741/(A (.*) C? (*THEN) | A D) \s* z/x 8742\= Expect no match 8743 AbcdCBefgBhiBqz 8744No match 8745 8746/(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x 8747\= Expect no match 8748 AbcdCBefgBhiBqz 8749No match 8750 8751/(A (.*) (?:C|) (*THEN) | A D) z/x 8752\= Expect no match 8753 AbcdCBefgBhiBqz 8754No match 8755 8756/(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x 8757\= Expect no match 8758 AbcdCBefgBhiBqz 8759No match 8760 8761/(A (.*) C{0,6} (*THEN) | A D) z/x 8762\= Expect no match 8763 AbcdCBefgBhiBqz 8764No match 8765 8766/(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x 8767\= Expect no match 8768 AbcdCEBefgBhiBqz 8769No match 8770 8771/(A (.*) (CE){0,6} (*THEN) | A D) z/x 8772\= Expect no match 8773 AbcdCEBefgBhiBqz 8774No match 8775 8776/(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x 8777\= Expect no match 8778 AbcdCBefgBhiBqz 8779No match 8780 8781/(A (.*) (CE*){0,6} (*THEN) | A D) z/x 8782\= Expect no match 8783 AbcdCBefgBhiBqz 8784No match 8785 8786/(?=a(*COMMIT)b|ac)ac|ac/ 8787\= Expect no match 8788 ac 8789No match 8790 8791/(?=a(*COMMIT)b|(ac)) ac | (a)c/x 8792\= Expect no match 8793 ac 8794No match 8795 8796# ---- 8797 8798/(?(?!b(*THEN)a)bn|bnn)/ 8799 bnn 8800 0: bn 8801 8802/(?!b(*SKIP)a)bn|bnn/ 8803 bnn 8804 0: bn 8805 8806/(?(?!b(*SKIP)a)bn|bnn)/ 8807 bnn 8808 0: bn 8809 8810/(?!b(*PRUNE)a)bn|bnn/ 8811 bnn 8812 0: bn 8813 8814/(?(?!b(*PRUNE)a)bn|bnn)/ 8815 bnn 8816 0: bn 8817 8818/(?!b(*COMMIT)a)bn|bnn/ 8819 bnn 8820 0: bn 8821 8822/(?(?!b(*COMMIT)a)bn|bnn)/ 8823 bnn 8824 0: bn 8825 8826/(?=b(*SKIP)a)bn|bnn/ 8827\= Expect no match 8828 bnn 8829No match 8830 8831/(?=b(*THEN)a)bn|bnn/ 8832 bnn 8833 0: bnn 8834 8835/^(?!a(*SKIP)b)/ 8836 ac 8837 0: 8838 8839/^(?!a(*SKIP)b)../ 8840 acd 8841 0: ac 8842 8843/(?!a(*SKIP)b)../ 8844 acd 8845 0: ac 8846 8847/^(?(?!a(*SKIP)b))/ 8848 ac 8849 0: 8850 8851/^(?!a(*PRUNE)b)../ 8852 acd 8853 0: ac 8854 8855/(?!a(*PRUNE)b)../ 8856 acd 8857 0: ac 8858 8859/(?!a(*COMMIT)b)ac|cd/ 8860 ac 8861 0: ac 8862 8863/\A.*?(?:a|bc)/ 8864 ba 8865 0: ba 8866 8867/^(A(*THEN)B|C(*THEN)D)/ 8868 CD 8869 0: CD 8870 1: CD 8871 8872/(*:m(m)(?&y)(?(DEFINE)(?<y>b))/mark 8873 abc 8874 0: b 8875MK: m(m 8876 8877/(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/mark 8878 abc 8879 0: b 8880MK: m(m 8881 8882/(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/mark 8883 abc 8884 0: b 8885 8886/(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/mark 8887 abc 8888 0: b 8889MK: m(m 8890 8891/^\d*\w{4}/ 8892 1234 8893 0: 1234 8894\= Expect no match 8895 123 8896No match 8897 8898/^[^b]*\w{4}/ 8899 aaaa 8900 0: aaaa 8901\= Expect no match 8902 aaa 8903No match 8904 8905/^[^b]*\w{4}/i 8906 aaaa 8907 0: aaaa 8908\= Expect no match 8909 aaa 8910No match 8911 8912/^a*\w{4}/ 8913 aaaa 8914 0: aaaa 8915\= Expect no match 8916 aaa 8917No match 8918 8919/^a*\w{4}/i 8920 aaaa 8921 0: aaaa 8922\= Expect no match 8923 aaa 8924No match 8925 8926/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames 8927 foofoo 8928 0: foofoo 8929 1: foo 8930 barbar 8931 0: barbar 8932 1: <unset> 8933 2: bar 8934 8935/(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames 8936 AfooA 8937 0: AfooA 8938 1: A 8939 2: foo 8940 AbarA 8941 0: AbarA 8942 1: A 8943 2: <unset> 8944 3: bar 8945\= Expect no match 8946 Afoofoo 8947No match 8948 Abarbar 8949No match 8950 8951/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/ 8952 1 IN SOA non-sp1 non-sp2( 8953 0: 1 IN SOA non-sp1 non-sp2( 8954 1: 1 8955 2: non-sp1 8956 3: non-sp2 8957 8958/^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/x,dupnames 8959 Ax 8960 0: Ax 8961 1: A 8962 BAxy 8963 0: BAxy 8964 1: <unset> 8965 2: B 8966 3: A 8967 8968/^A\xZ/ 8969 A\0Z 8970 0: A\x00Z 8971 8972/^A\o{123}B/ 8973 A\123B 8974 0: ASB 8975 8976/ ^ a + + b $ /x 8977 aaaab 8978 0: aaaab 8979 8980/ ^ a + #comment 8981 + b $ /x 8982 aaaab 8983 0: aaaab 8984 8985/ ^ a + #comment 8986 #comment 8987 + b $ /x 8988 aaaab 8989 0: aaaab 8990 8991/ ^ (?> a + ) b $ /x 8992 aaaab 8993 0: aaaab 8994 8995/ ^ ( a + ) + + \w $ /x 8996 aaaab 8997 0: aaaab 8998 1: aaaa 8999 9000/(?:a\Kb)*+/aftertext 9001 ababc 9002 0: b 9003 0+ c 9004 9005/(?>a\Kb)*/aftertext 9006 ababc 9007 0: b 9008 0+ c 9009 9010/(?:a\Kb)*/aftertext 9011 ababc 9012 0: b 9013 0+ c 9014 9015/(a\Kb)*+/aftertext 9016 ababc 9017 0: b 9018 0+ c 9019 1: ab 9020 9021/(a\Kb)*/aftertext 9022 ababc 9023 0: b 9024 0+ c 9025 1: ab 9026 9027/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/ 9028\= Expect no match 9029 acb 9030No match 9031 9032'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++' 9033 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED 9034 0: NON QUOTED "QUOT""ED" AFTER 9035 9036'\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++' 9037 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED 9038 0: NON QUOTED "QUOT""ED" AFTER 9039 9040'\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++' 9041 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED 9042 0: NON QUOTED "QUOT""ED" AFTER 9043 9044'\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++' 9045 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED 9046 0: NON QUOTED "QUOT""ED" AFTER 9047 1: AFTER 9048 2: 9049 9050/^\w+(?>\s*)(?<=\w)/ 9051 test test 9052 0: tes 9053 9054/(?P<same>a)(?P<same>b)/g,dupnames 9055 abbaba 9056 0: ab 9057 1: a 9058 2: b 9059 0: ab 9060 1: a 9061 2: b 9062 9063/(?P<same>a)(?P<same>b)(?P=same)/g,dupnames 9064 abbaba 9065 0: aba 9066 1: a 9067 2: b 9068 9069/(?P=same)?(?P<same>a)(?P<same>b)/g,dupnames 9070 abbaba 9071 0: ab 9072 1: a 9073 2: b 9074 0: ab 9075 1: a 9076 2: b 9077 9078/(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/g,dupnames 9079 bbbaaabaabb 9080 0: bbbaaaba 9081 1: a 9082 2: b 9083 0: bb 9084 1: <unset> 9085 2: b 9086 9087/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames 9088\= Expect no match 9089 bbbaaaccccaaabbbcc 9090No match 9091 9092/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/ 9093 acl 9094 0: acl 9095 1: a 9096 bdl 9097 0: bdl 9098 1: <unset> 9099 2: b 9100 adl 9101 0: dl 9102 bcl 9103 0: l 9104 9105/\sabc/ 9106 \x{0b}abc 9107 0: \x0babc 9108 9109/[\Qa]\E]+/ 9110 aa]] 9111 0: aa]] 9112 9113/[\Q]a\E]+/ 9114 aa]] 9115 0: aa]] 9116 9117/A((((((((a))))))))\8B/ 9118 AaaB 9119 0: AaaB 9120 1: a 9121 2: a 9122 3: a 9123 4: a 9124 5: a 9125 6: a 9126 7: a 9127 8: a 9128 9129/A(((((((((a)))))))))\9B/ 9130 AaaB 9131 0: AaaB 9132 1: a 9133 2: a 9134 3: a 9135 4: a 9136 5: a 9137 6: a 9138 7: a 9139 8: a 9140 9: a 9141 9142/A[\8\9]B/ 9143 A8B 9144 0: A8B 9145 A9B 9146 0: A9B 9147 9148/(|ab)*?d/ 9149 abd 9150 0: abd 9151 1: ab 9152 xyd 9153 0: d 9154 9155/(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/ 9156 1234abcd 9157 0: 9158 1: <unset> 9159 2: <unset> 9160 3: <unset> 9161 4: <unset> 9162 5: 9163 9164/(\2|a)(\1)/ 9165 aaa 9166 0: aa 9167 1: a 9168 2: a 9169 9170/(\2)(\1)/ 9171 9172"Z*(|d*){216}" 9173 9174"(?1)(?#?'){8}(a)" 9175 baaaaaaaaac 9176 0: aaaaaaaaa 9177 1: a 9178 9179/((((((((((((x))))))))))))\12/ 9180 xx 9181 0: xx 9182 1: x 9183 2: x 9184 3: x 9185 4: x 9186 5: x 9187 6: x 9188 7: x 9189 8: x 9190 9: x 919110: x 919211: x 919312: x 9194 9195/A[\8]B[\9]C/ 9196 A8B9C 9197 0: A8B9C 9198 9199/(?1)()((((((\1++))\x85)+)|))/ 9200 \x85\x85 9201 0: \x85\x85 9202 1: 9203 2: \x85\x85 9204 3: \x85\x85 9205 4: \x85\x85 9206 5: \x85 9207 6: 9208 7: 9209 9210"(?|(\k'Pm')|(?'Pm'))" 9211 abcd 9212 0: 9213 1: 9214 9215/(?|(aaa)|(b))\g{1}/ 9216 aaaaaa 9217 0: aaaaaa 9218 1: aaa 9219 bb 9220 0: bb 9221 1: b 9222 9223/(?|(aaa)|(b))(?1)/ 9224 aaaaaa 9225 0: aaaaaa 9226 1: aaa 9227 baaa 9228 0: baaa 9229 1: b 9230\= Expect no match 9231 bb 9232No match 9233 9234/(?|(aaa)|(b))/ 9235 xaaa 9236 0: aaa 9237 1: aaa 9238 xbc 9239 0: b 9240 1: b 9241 9242/(?|(?'a'aaa)|(?'a'b))\k'a'/ 9243 aaaaaa 9244 0: aaaaaa 9245 1: aaa 9246 bb 9247 0: bb 9248 1: b 9249 9250/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames 9251 aaaccccaaa 9252 0: aaaccccaaa 9253 1: aaa 9254 2: cccc 9255 bccccb 9256 0: bccccb 9257 1: b 9258 2: cccc 9259 9260# End of testinput1 9261