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