• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/-- This set of tests check the DFA matching functionality of pcre_dfa_exec().
2    The -dfa flag must be used with pcretest when running it. --/
3
4/abc/
5    abc
6 0: abc
7
8/ab*c/
9    abc
10 0: abc
11    abbbbc
12 0: abbbbc
13    ac
14 0: ac
15
16/ab+c/
17    abc
18 0: abc
19    abbbbbbc
20 0: abbbbbbc
21    *** Failers
22No match
23    ac
24No match
25    ab
26No match
27
28/a*/
29    a
30 0: a
31 1:
32    aaaaaaaaaaaaaaaaa
33 0: aaaaaaaaaaaaaaaaa
34 1: aaaaaaaaaaaaaaaa
35 2: aaaaaaaaaaaaaaa
36 3: aaaaaaaaaaaaaa
37 4: aaaaaaaaaaaaa
38 5: aaaaaaaaaaaa
39 6: aaaaaaaaaaa
40 7: aaaaaaaaaa
41 8: aaaaaaaaa
42 9: aaaaaaaa
4310: aaaaaaa
4411: aaaaaa
4512: aaaaa
4613: aaaa
4714: aaa
4815: aa
4916: a
5017:
51    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
52Matched, but too many subsidiary matches
53 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
54 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
55 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa
56 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa
57 4: aaaaaaaaaaaaaaaaaaaaaaaaaa
58 5: aaaaaaaaaaaaaaaaaaaaaaaaa
59 6: aaaaaaaaaaaaaaaaaaaaaaaa
60 7: aaaaaaaaaaaaaaaaaaaaaaa
61 8: aaaaaaaaaaaaaaaaaaaaaa
62 9: aaaaaaaaaaaaaaaaaaaaa
6310: aaaaaaaaaaaaaaaaaaaa
6411: aaaaaaaaaaaaaaaaaaa
6512: aaaaaaaaaaaaaaaaaa
6613: aaaaaaaaaaaaaaaaa
6714: aaaaaaaaaaaaaaaa
6815: aaaaaaaaaaaaaaa
6916: aaaaaaaaaaaaaa
7017: aaaaaaaaaaaaa
7118: aaaaaaaaaaaa
7219: aaaaaaaaaaa
7320: aaaaaaaaaa
7421: aaaaaaaaa
75    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\F
76 0:
77
78/(a|abcd|african)/
79    a
80 0: a
81    abcd
82 0: abcd
83 1: a
84    african
85 0: african
86 1: a
87
88/^abc/
89    abcdef
90 0: abc
91    *** Failers
92No match
93    xyzabc
94No match
95    xyz\nabc
96No match
97
98/^abc/m
99    abcdef
100 0: abc
101    xyz\nabc
102 0: abc
103    *** Failers
104No match
105    xyzabc
106No match
107
108/\Aabc/
109    abcdef
110 0: abc
111    *** Failers
112No match
113    xyzabc
114No match
115    xyz\nabc
116No match
117
118/\Aabc/m
119    abcdef
120 0: abc
121    *** Failers
122No match
123    xyzabc
124No match
125    xyz\nabc
126No match
127
128/\Gabc/
129    abcdef
130 0: abc
131    xyzabc\>3
132 0: abc
133    *** Failers
134No match
135    xyzabc
136No match
137    xyzabc\>2
138No match
139
140/x\dy\Dz/
141    x9yzz
142 0: x9yzz
143    x0y+z
144 0: x0y+z
145    *** Failers
146No match
147    xyz
148No match
149    xxy0z
150No match
151
152/x\sy\Sz/
153    x yzz
154 0: x yzz
155    x y+z
156 0: x y+z
157    *** Failers
158No match
159    xyz
160No match
161    xxyyz
162No match
163
164/x\wy\Wz/
165    xxy+z
166 0: xxy+z
167    *** Failers
168No match
169    xxy0z
170No match
171    x+y+z
172No match
173
174/x.y/
175    x+y
176 0: x+y
177    x-y
178 0: x-y
179    *** Failers
180No match
181    x\ny
182No match
183
184/x.y/s
185    x+y
186 0: x+y
187    x-y
188 0: x-y
189    x\ny
190 0: x\x0ay
191
192/(a.b(?s)c.d|x.y)p.q/
193    a+bc+dp+q
194 0: a+bc+dp+q
195    a+bc\ndp+q
196 0: a+bc\x0adp+q
197    x\nyp+q
198 0: x\x0ayp+q
199    *** Failers
200No match
201    a\nbc\ndp+q
202No match
203    a+bc\ndp\nq
204No match
205    x\nyp\nq
206No match
207
208/a\d\z/
209    ba0
210 0: a0
211    *** Failers
212No match
213    ba0\n
214No match
215    ba0\ncd
216No match
217
218/a\d\z/m
219    ba0
220 0: a0
221    *** Failers
222No match
223    ba0\n
224No match
225    ba0\ncd
226No match
227
228/a\d\Z/
229    ba0
230 0: a0
231    ba0\n
232 0: a0
233    *** Failers
234No match
235    ba0\ncd
236No match
237
238/a\d\Z/m
239    ba0
240 0: a0
241    ba0\n
242 0: a0
243    *** Failers
244No match
245    ba0\ncd
246No match
247
248/a\d$/
249    ba0
250 0: a0
251    ba0\n
252 0: a0
253    *** Failers
254No match
255    ba0\ncd
256No match
257
258/a\d$/m
259    ba0
260 0: a0
261    ba0\n
262 0: a0
263    ba0\ncd
264 0: a0
265    *** Failers
266No match
267
268/abc/i
269    abc
270 0: abc
271    aBc
272 0: aBc
273    ABC
274 0: ABC
275
276/[^a]/
277    abcd
278 0: b
279
280/ab?\w/
281    abz
282 0: abz
283 1: ab
284    abbz
285 0: abb
286 1: ab
287    azz
288 0: az
289
290/x{0,3}yz/
291    ayzq
292 0: yz
293    axyzq
294 0: xyz
295    axxyz
296 0: xxyz
297    axxxyzq
298 0: xxxyz
299    axxxxyzq
300 0: xxxyz
301    *** Failers
302No match
303    ax
304No match
305    axx
306No match
307
308/x{3}yz/
309    axxxyzq
310 0: xxxyz
311    axxxxyzq
312 0: xxxyz
313    *** Failers
314No match
315    ax
316No match
317    axx
318No match
319    ayzq
320No match
321    axyzq
322No match
323    axxyz
324No match
325
326/x{2,3}yz/
327    axxyz
328 0: xxyz
329    axxxyzq
330 0: xxxyz
331    axxxxyzq
332 0: xxxyz
333    *** Failers
334No match
335    ax
336No match
337    axx
338No match
339    ayzq
340No match
341    axyzq
342No match
343
344/[^a]+/
345    bac
346 0: b
347    bcdefax
348 0: bcdef
349 1: bcde
350 2: bcd
351 3: bc
352 4: b
353    *** Failers
354 0: *** F
355 1: ***
356 2: ***
357 3: **
358 4: *
359    aaaaa
360No match
361
362/[^a]*/
363    bac
364 0: b
365 1:
366    bcdefax
367 0: bcdef
368 1: bcde
369 2: bcd
370 3: bc
371 4: b
372 5:
373    *** Failers
374 0: *** F
375 1: ***
376 2: ***
377 3: **
378 4: *
379 5:
380    aaaaa
381 0:
382
383/[^a]{3,5}/
384    xyz
385 0: xyz
386    awxyza
387 0: wxyz
388 1: wxy
389    abcdefa
390 0: bcdef
391 1: bcde
392 2: bcd
393    abcdefghijk
394 0: bcdef
395 1: bcde
396 2: bcd
397    *** Failers
398 0: *** F
399 1: ***
400 2: ***
401    axya
402No match
403    axa
404No match
405    aaaaa
406No match
407
408/\d*/
409    1234b567
410 0: 1234
411 1: 123
412 2: 12
413 3: 1
414 4:
415    xyz
416 0:
417
418/\D*/
419    a1234b567
420 0: a
421 1:
422    xyz
423 0: xyz
424 1: xy
425 2: x
426 3:
427
428/\d+/
429    ab1234c56
430 0: 1234
431 1: 123
432 2: 12
433 3: 1
434    *** Failers
435No match
436    xyz
437No match
438
439/\D+/
440    ab123c56
441 0: ab
442 1: a
443    *** Failers
444 0: *** Failers
445 1: *** Failer
446 2: *** Faile
447 3: *** Fail
448 4: *** Fai
449 5: *** Fa
450 6: *** F
451 7: ***
452 8: ***
453 9: **
45410: *
455    789
456No match
457
458/\d?A/
459    045ABC
460 0: 5A
461    ABC
462 0: A
463    *** Failers
464No match
465    XYZ
466No match
467
468/\D?A/
469    ABC
470 0: A
471    BAC
472 0: BA
473    9ABC
474 0: A
475    *** Failers
476No match
477
478/a+/
479    aaaa
480 0: aaaa
481 1: aaa
482 2: aa
483 3: a
484
485/^.*xyz/
486    xyz
487 0: xyz
488    ggggggggxyz
489 0: ggggggggxyz
490
491/^.+xyz/
492    abcdxyz
493 0: abcdxyz
494    axyz
495 0: axyz
496    *** Failers
497No match
498    xyz
499No match
500
501/^.?xyz/
502    xyz
503 0: xyz
504    cxyz
505 0: cxyz
506
507/^\d{2,3}X/
508    12X
509 0: 12X
510    123X
511 0: 123X
512    *** Failers
513No match
514    X
515No match
516    1X
517No match
518    1234X
519No match
520
521/^[abcd]\d/
522    a45
523 0: a4
524    b93
525 0: b9
526    c99z
527 0: c9
528    d04
529 0: d0
530    *** Failers
531No match
532    e45
533No match
534    abcd
535No match
536    abcd1234
537No match
538    1234
539No match
540
541/^[abcd]*\d/
542    a45
543 0: a4
544    b93
545 0: b9
546    c99z
547 0: c9
548    d04
549 0: d0
550    abcd1234
551 0: abcd1
552    1234
553 0: 1
554    *** Failers
555No match
556    e45
557No match
558    abcd
559No match
560
561/^[abcd]+\d/
562    a45
563 0: a4
564    b93
565 0: b9
566    c99z
567 0: c9
568    d04
569 0: d0
570    abcd1234
571 0: abcd1
572    *** Failers
573No match
574    1234
575No match
576    e45
577No match
578    abcd
579No match
580
581/^a+X/
582    aX
583 0: aX
584    aaX
585 0: aaX
586
587/^[abcd]?\d/
588    a45
589 0: a4
590    b93
591 0: b9
592    c99z
593 0: c9
594    d04
595 0: d0
596    1234
597 0: 1
598    *** Failers
599No match
600    abcd1234
601No match
602    e45
603No match
604
605/^[abcd]{2,3}\d/
606    ab45
607 0: ab4
608    bcd93
609 0: bcd9
610    *** Failers
611No match
612    1234
613No match
614    a36
615No match
616    abcd1234
617No match
618    ee45
619No match
620
621/^(abc)*\d/
622    abc45
623 0: abc4
624    abcabcabc45
625 0: abcabcabc4
626    42xyz
627 0: 4
628    *** Failers
629No match
630
631/^(abc)+\d/
632    abc45
633 0: abc4
634    abcabcabc45
635 0: abcabcabc4
636    *** Failers
637No match
638    42xyz
639No match
640
641/^(abc)?\d/
642    abc45
643 0: abc4
644    42xyz
645 0: 4
646    *** Failers
647No match
648    abcabcabc45
649No match
650
651/^(abc){2,3}\d/
652    abcabc45
653 0: abcabc4
654    abcabcabc45
655 0: abcabcabc4
656    *** Failers
657No match
658    abcabcabcabc45
659No match
660    abc45
661No match
662    42xyz
663No match
664
665/1(abc|xyz)2(?1)3/
666    1abc2abc3456
667 0: 1abc2abc3
668    1abc2xyz3456
669 0: 1abc2xyz3
670
671/^(a*\w|ab)=(a*\w|ab)/
672    ab=ab
673 0: ab=ab
674 1: ab=a
675
676/^(a*\w|ab)=(?1)/
677    ab=ab
678 0: ab=ab
679
680/^([^()]|\((?1)*\))*$/
681    abc
682 0: abc
683    a(b)c
684 0: a(b)c
685    a(b(c))d
686 0: a(b(c))d
687    *** Failers)
688No match
689    a(b(c)d
690No match
691
692/^>abc>([^()]|\((?1)*\))*<xyz<$/
693    >abc>123<xyz<
694 0: >abc>123<xyz<
695    >abc>1(2)3<xyz<
696 0: >abc>1(2)3<xyz<
697    >abc>(1(2)3)<xyz<
698 0: >abc>(1(2)3)<xyz<
699
700/^(?>a*)\d/
701    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
702 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9
703    *** Failers
704No match
705    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
706No match
707
708/< (?: (?(R) \d++  | [^<>]*+) | (?R)) * >/x
709    <>
710 0: <>
711    <abcd>
712 0: <abcd>
713    <abc <123> hij>
714 0: <abc <123> hij>
715    <abc <def> hij>
716 0: <def>
717    <abc<>def>
718 0: <abc<>def>
719    <abc<>
720 0: <>
721    *** Failers
722No match
723    <abc
724No match
725
726/^(?(?=abc)\w{3}:|\d\d)$/
727    abc:
728 0: abc:
729    12
730 0: 12
731    *** Failers
732No match
733    123
734No match
735    xyz
736No match
737
738/^(?(?!abc)\d\d|\w{3}:)$/
739    abc:
740 0: abc:
741    12
742 0: 12
743    *** Failers
744No match
745    123
746No match
747    xyz
748No match
749
750/^(?=abc)\w{5}:$/
751    abcde:
752 0: abcde:
753    *** Failers
754No match
755    abc..
756No match
757    123
758No match
759    vwxyz
760No match
761
762/^(?!abc)\d\d$/
763    12
764 0: 12
765    *** Failers
766No match
767    abcde:
768No match
769    abc..
770No match
771    123
772No match
773    vwxyz
774No match
775
776/(?<=abc|xy)123/
777    abc12345
778 0: 123
779    wxy123z
780 0: 123
781    *** Failers
782No match
783    123abc
784No match
785
786/(?<!abc|xy)123/
787    123abc
788 0: 123
789    mno123456
790 0: 123
791    *** Failers
792No match
793    abc12345
794No match
795    wxy123z
796No match
797
798/abc(?C1)xyz/
799    abcxyz
800--->abcxyz
801  1 ^  ^       x
802 0: abcxyz
803    123abcxyz999
804--->123abcxyz999
805  1    ^  ^          x
806 0: abcxyz
807
808/(ab|cd){3,4}/C
809  ababab
810--->ababab
811 +0 ^          (ab|cd){3,4}
812 +1 ^          a
813 +4 ^          c
814 +2 ^^         b
815 +3 ^ ^        |
816 +1 ^ ^        a
817 +4 ^ ^        c
818 +2 ^  ^       b
819 +3 ^   ^      |
820 +1 ^   ^      a
821 +4 ^   ^      c
822 +2 ^    ^     b
823 +3 ^     ^    |
824+12 ^     ^
825 +1 ^     ^    a
826 +4 ^     ^    c
827 0: ababab
828  abcdabcd
829--->abcdabcd
830 +0 ^            (ab|cd){3,4}
831 +1 ^            a
832 +4 ^            c
833 +2 ^^           b
834 +3 ^ ^          |
835 +1 ^ ^          a
836 +4 ^ ^          c
837 +5 ^  ^         d
838 +6 ^   ^        )
839 +1 ^   ^        a
840 +4 ^   ^        c
841 +2 ^    ^       b
842 +3 ^     ^      |
843+12 ^     ^
844 +1 ^     ^      a
845 +4 ^     ^      c
846 +5 ^      ^     d
847 +6 ^       ^    )
848+12 ^       ^
849 0: abcdabcd
850 1: abcdab
851  abcdcdcdcdcd
852--->abcdcdcdcdcd
853 +0 ^                (ab|cd){3,4}
854 +1 ^                a
855 +4 ^                c
856 +2 ^^               b
857 +3 ^ ^              |
858 +1 ^ ^              a
859 +4 ^ ^              c
860 +5 ^  ^             d
861 +6 ^   ^            )
862 +1 ^   ^            a
863 +4 ^   ^            c
864 +5 ^    ^           d
865 +6 ^     ^          )
866+12 ^     ^
867 +1 ^     ^          a
868 +4 ^     ^          c
869 +5 ^      ^         d
870 +6 ^       ^        )
871+12 ^       ^
872 0: abcdcdcd
873 1: abcdcd
874
875/^abc/
876    abcdef
877 0: abc
878    *** Failers
879No match
880    abcdef\B
881No match
882
883/^(a*|xyz)/
884    bcd
885 0:
886    aaabcd
887 0: aaa
888 1: aa
889 2: a
890 3:
891    xyz
892 0: xyz
893 1:
894    xyz\N
895 0: xyz
896    *** Failers
897 0:
898    bcd\N
899No match
900
901/xyz$/
902    xyz
903 0: xyz
904    xyz\n
905 0: xyz
906    *** Failers
907No match
908    xyz\Z
909No match
910    xyz\n\Z
911No match
912
913/xyz$/m
914    xyz
915 0: xyz
916    xyz\n
917 0: xyz
918    abcxyz\npqr
919 0: xyz
920    abcxyz\npqr\Z
921 0: xyz
922    xyz\n\Z
923 0: xyz
924    *** Failers
925No match
926    xyz\Z
927No match
928
929/\Gabc/
930    abcdef
931 0: abc
932    defabcxyz\>3
933 0: abc
934    *** Failers
935No match
936    defabcxyz
937No match
938
939/^abcdef/
940    ab\P
941Partial match: ab
942    abcde\P
943Partial match: abcde
944    abcdef\P
945 0: abcdef
946    *** Failers
947No match
948    abx\P
949No match
950
951/^a{2,4}\d+z/
952    a\P
953Partial match: a
954    aa\P
955Partial match: aa
956    aa2\P
957Partial match: aa2
958    aaa\P
959Partial match: aaa
960    aaa23\P
961Partial match: aaa23
962    aaaa12345\P
963Partial match: aaaa12345
964    aa0z\P
965 0: aa0z
966    aaaa4444444444444z\P
967 0: aaaa4444444444444z
968    *** Failers
969No match
970    az\P
971No match
972    aaaaa\P
973No match
974    a56\P
975No match
976
977/^abcdef/
978   abc\P
979Partial match: abc
980   def\R
981 0: def
982
983/(?<=foo)bar/
984   xyzfo\P
985No match
986   foob\P\>2
987Partial match: foob
988   foobar...\R\P\>4
989 0: ar
990   xyzfo\P
991No match
992   foobar\>2
993 0: bar
994   *** Failers
995No match
996   xyzfo\P
997No match
998   obar\R
999No match
1000
1001/(ab*(cd|ef))+X/
1002    adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\P\Z
1003No match
1004    lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\P\B\Z
1005Partial match: abbbbbbcdaefabbbbbbbefa
1006    cdabbbbbbbb\P\R\B\Z
1007Partial match: cdabbbbbbbb
1008    efabbbbbbbbbbbbbbbb\P\R\B\Z
1009Partial match: efabbbbbbbbbbbbbbbb
1010    bbbbbbbbbbbbcdXyasdfadf\P\R\B\Z
1011 0: bbbbbbbbbbbbcdX
1012
1013/(a|b)/SF>testsavedregex
1014Compiled regex written to testsavedregex
1015Study data written to testsavedregex
1016<testsavedregex
1017Compiled regex (byte-inverted) loaded from testsavedregex
1018Study data loaded from testsavedregex
1019    abc
1020 0: a
1021    ** Failers
1022 0: a
1023    def
1024No match
1025
1026/the quick brown fox/
1027    the quick brown fox
1028 0: the quick brown fox
1029    The quick brown FOX
1030No match
1031    What do you know about the quick brown fox?
1032 0: the quick brown fox
1033    What do you know about THE QUICK BROWN FOX?
1034No match
1035
1036/The quick brown fox/i
1037    the quick brown fox
1038 0: the quick brown fox
1039    The quick brown FOX
1040 0: The quick brown FOX
1041    What do you know about the quick brown fox?
1042 0: the quick brown fox
1043    What do you know about THE QUICK BROWN FOX?
1044 0: THE QUICK BROWN FOX
1045
1046/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
1047    abcd\t\n\r\f\a\e9;\$\\?caxyz
1048 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
1049
1050/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
1051    abxyzpqrrrabbxyyyypqAzz
1052 0: abxyzpqrrrabbxyyyypqAzz
1053    abxyzpqrrrabbxyyyypqAzz
1054 0: abxyzpqrrrabbxyyyypqAzz
1055    aabxyzpqrrrabbxyyyypqAzz
1056 0: aabxyzpqrrrabbxyyyypqAzz
1057    aaabxyzpqrrrabbxyyyypqAzz
1058 0: aaabxyzpqrrrabbxyyyypqAzz
1059    aaaabxyzpqrrrabbxyyyypqAzz
1060 0: aaaabxyzpqrrrabbxyyyypqAzz
1061    abcxyzpqrrrabbxyyyypqAzz
1062 0: abcxyzpqrrrabbxyyyypqAzz
1063    aabcxyzpqrrrabbxyyyypqAzz
1064 0: aabcxyzpqrrrabbxyyyypqAzz
1065    aaabcxyzpqrrrabbxyyyypAzz
1066 0: aaabcxyzpqrrrabbxyyyypAzz
1067    aaabcxyzpqrrrabbxyyyypqAzz
1068 0: aaabcxyzpqrrrabbxyyyypqAzz
1069    aaabcxyzpqrrrabbxyyyypqqAzz
1070 0: aaabcxyzpqrrrabbxyyyypqqAzz
1071    aaabcxyzpqrrrabbxyyyypqqqAzz
1072 0: aaabcxyzpqrrrabbxyyyypqqqAzz
1073    aaabcxyzpqrrrabbxyyyypqqqqAzz
1074 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
1075    aaabcxyzpqrrrabbxyyyypqqqqqAzz
1076 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
1077    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
1078 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
1079    aaaabcxyzpqrrrabbxyyyypqAzz
1080 0: aaaabcxyzpqrrrabbxyyyypqAzz
1081    abxyzzpqrrrabbxyyyypqAzz
1082 0: abxyzzpqrrrabbxyyyypqAzz
1083    aabxyzzzpqrrrabbxyyyypqAzz
1084 0: aabxyzzzpqrrrabbxyyyypqAzz
1085    aaabxyzzzzpqrrrabbxyyyypqAzz
1086 0: aaabxyzzzzpqrrrabbxyyyypqAzz
1087    aaaabxyzzzzpqrrrabbxyyyypqAzz
1088 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
1089    abcxyzzpqrrrabbxyyyypqAzz
1090 0: abcxyzzpqrrrabbxyyyypqAzz
1091    aabcxyzzzpqrrrabbxyyyypqAzz
1092 0: aabcxyzzzpqrrrabbxyyyypqAzz
1093    aaabcxyzzzzpqrrrabbxyyyypqAzz
1094 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
1095    aaaabcxyzzzzpqrrrabbxyyyypqAzz
1096 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
1097    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
1098 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
1099    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
1100 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
1101    aaabcxyzpqrrrabbxyyyypABzz
1102 0: aaabcxyzpqrrrabbxyyyypABzz
1103    aaabcxyzpqrrrabbxyyyypABBzz
1104 0: aaabcxyzpqrrrabbxyyyypABBzz
1105    >>>aaabxyzpqrrrabbxyyyypqAzz
1106 0: aaabxyzpqrrrabbxyyyypqAzz
1107    >aaaabxyzpqrrrabbxyyyypqAzz
1108 0: aaaabxyzpqrrrabbxyyyypqAzz
1109    >>>>abcxyzpqrrrabbxyyyypqAzz
1110 0: abcxyzpqrrrabbxyyyypqAzz
1111    *** Failers
1112No match
1113    abxyzpqrrabbxyyyypqAzz
1114No match
1115    abxyzpqrrrrabbxyyyypqAzz
1116No match
1117    abxyzpqrrrabxyyyypqAzz
1118No match
1119    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
1120No match
1121    aaaabcxyzzzzpqrrrabbbxyyypqAzz
1122No match
1123    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
1124No match
1125
1126/^(abc){1,2}zz/
1127    abczz
1128 0: abczz
1129    abcabczz
1130 0: abcabczz
1131    *** Failers
1132No match
1133    zz
1134No match
1135    abcabcabczz
1136No match
1137    >>abczz
1138No match
1139
1140/^(b+?|a){1,2}?c/
1141    bc
1142 0: bc
1143    bbc
1144 0: bbc
1145    bbbc
1146 0: bbbc
1147    bac
1148 0: bac
1149    bbac
1150 0: bbac
1151    aac
1152 0: aac
1153    abbbbbbbbbbbc
1154 0: abbbbbbbbbbbc
1155    bbbbbbbbbbbac
1156 0: bbbbbbbbbbbac
1157    *** Failers
1158No match
1159    aaac
1160No match
1161    abbbbbbbbbbbac
1162No match
1163
1164/^(b+|a){1,2}c/
1165    bc
1166 0: bc
1167    bbc
1168 0: bbc
1169    bbbc
1170 0: bbbc
1171    bac
1172 0: bac
1173    bbac
1174 0: bbac
1175    aac
1176 0: aac
1177    abbbbbbbbbbbc
1178 0: abbbbbbbbbbbc
1179    bbbbbbbbbbbac
1180 0: bbbbbbbbbbbac
1181    *** Failers
1182No match
1183    aaac
1184No match
1185    abbbbbbbbbbbac
1186No match
1187
1188/^(b+|a){1,2}?bc/
1189    bbc
1190 0: bbc
1191
1192/^(b*|ba){1,2}?bc/
1193    babc
1194 0: babc
1195    bbabc
1196 0: bbabc
1197    bababc
1198 0: bababc
1199    *** Failers
1200No match
1201    bababbc
1202No match
1203    babababc
1204No match
1205
1206/^(ba|b*){1,2}?bc/
1207    babc
1208 0: babc
1209    bbabc
1210 0: bbabc
1211    bababc
1212 0: bababc
1213    *** Failers
1214No match
1215    bababbc
1216No match
1217    babababc
1218No match
1219
1220/^\ca\cA\c[\c{\c:/
1221    \x01\x01\e;z
1222 0: \x01\x01\x1b;z
1223
1224/^[ab\]cde]/
1225    athing
1226 0: a
1227    bthing
1228 0: b
1229    ]thing
1230 0: ]
1231    cthing
1232 0: c
1233    dthing
1234 0: d
1235    ething
1236 0: e
1237    *** Failers
1238No match
1239    fthing
1240No match
1241    [thing
1242No match
1243    \\thing
1244No match
1245
1246/^[]cde]/
1247    ]thing
1248 0: ]
1249    cthing
1250 0: c
1251    dthing
1252 0: d
1253    ething
1254 0: e
1255    *** Failers
1256No match
1257    athing
1258No match
1259    fthing
1260No match
1261
1262/^[^ab\]cde]/
1263    fthing
1264 0: f
1265    [thing
1266 0: [
1267    \\thing
1268 0: \
1269    *** Failers
1270 0: *
1271    athing
1272No match
1273    bthing
1274No match
1275    ]thing
1276No match
1277    cthing
1278No match
1279    dthing
1280No match
1281    ething
1282No match
1283
1284/^[^]cde]/
1285    athing
1286 0: a
1287    fthing
1288 0: f
1289    *** Failers
1290 0: *
1291    ]thing
1292No match
1293    cthing
1294No match
1295    dthing
1296No match
1297    ething
1298No match
1299
1300/^\�/
13011302 0: \x81
1303
1304/^�/
13051306 0: \xff
1307
1308/^[0-9]+$/
1309    0
1310 0: 0
1311    1
1312 0: 1
1313    2
1314 0: 2
1315    3
1316 0: 3
1317    4
1318 0: 4
1319    5
1320 0: 5
1321    6
1322 0: 6
1323    7
1324 0: 7
1325    8
1326 0: 8
1327    9
1328 0: 9
1329    10
1330 0: 10
1331    100
1332 0: 100
1333    *** Failers
1334No match
1335    abc
1336No match
1337
1338/^.*nter/
1339    enter
1340 0: enter
1341    inter
1342 0: inter
1343    uponter
1344 0: uponter
1345
1346/^xxx[0-9]+$/
1347    xxx0
1348 0: xxx0
1349    xxx1234
1350 0: xxx1234
1351    *** Failers
1352No match
1353    xxx
1354No match
1355
1356/^.+[0-9][0-9][0-9]$/
1357    x123
1358 0: x123
1359    xx123
1360 0: xx123
1361    123456
1362 0: 123456
1363    *** Failers
1364No match
1365    123
1366No match
1367    x1234
1368 0: x1234
1369
1370/^.+?[0-9][0-9][0-9]$/
1371    x123
1372 0: x123
1373    xx123
1374 0: xx123
1375    123456
1376 0: 123456
1377    *** Failers
1378No match
1379    123
1380No match
1381    x1234
1382 0: x1234
1383
1384/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
1385    abc!pqr=apquxz.ixr.zzz.ac.uk
1386 0: abc!pqr=apquxz.ixr.zzz.ac.uk
1387    *** Failers
1388No match
1389    !pqr=apquxz.ixr.zzz.ac.uk
1390No match
1391    abc!=apquxz.ixr.zzz.ac.uk
1392No match
1393    abc!pqr=apquxz:ixr.zzz.ac.uk
1394No match
1395    abc!pqr=apquxz.ixr.zzz.ac.ukk
1396No match
1397
1398/:/
1399    Well, we need a colon: somewhere
1400 0: :
1401    *** Fail if we don't
1402No match
1403
1404/([\da-f:]+)$/i
1405    0abc
1406 0: 0abc
1407    abc
1408 0: abc
1409    fed
1410 0: fed
1411    E
1412 0: E
1413    ::
1414 0: ::
1415    5f03:12C0::932e
1416 0: 5f03:12C0::932e
1417    fed def
1418 0: def
1419    Any old stuff
1420 0: ff
1421    *** Failers
1422No match
1423    0zzz
1424No match
1425    gzzz
1426No match
1427    fed\x20
1428No match
1429    Any old rubbish
1430No match
1431
1432/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
1433    .1.2.3
1434 0: .1.2.3
1435    A.12.123.0
1436 0: A.12.123.0
1437    *** Failers
1438No match
1439    .1.2.3333
1440No match
1441    1.2.3
1442No match
1443    1234.2.3
1444No match
1445
1446/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
1447    1 IN SOA non-sp1 non-sp2(
1448 0: 1 IN SOA non-sp1 non-sp2(
1449    1    IN    SOA    non-sp1    non-sp2   (
1450 0: 1    IN    SOA    non-sp1    non-sp2   (
1451    *** Failers
1452No match
1453    1IN SOA non-sp1 non-sp2(
1454No match
1455
1456/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
1457    a.
1458 0: a.
1459    Z.
1460 0: Z.
1461    2.
1462 0: 2.
1463    ab-c.pq-r.
1464 0: ab-c.pq-r.
1465    sxk.zzz.ac.uk.
1466 0: sxk.zzz.ac.uk.
1467    x-.y-.
1468 0: x-.y-.
1469    *** Failers
1470No match
1471    -abc.peq.
1472No match
1473
1474/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
1475    *.a
1476 0: *.a
1477    *.b0-a
1478 0: *.b0-a
1479    *.c3-b.c
1480 0: *.c3-b.c
1481    *.c-a.b-c
1482 0: *.c-a.b-c
1483    *** Failers
1484No match
1485    *.0
1486No match
1487    *.a-
1488No match
1489    *.a-b.c-
1490No match
1491    *.c-a.0-c
1492No match
1493
1494/^(?=ab(de))(abd)(e)/
1495    abde
1496 0: abde
1497
1498/^(?!(ab)de|x)(abd)(f)/
1499    abdf
1500 0: abdf
1501
1502/^(?=(ab(cd)))(ab)/
1503    abcd
1504 0: ab
1505
1506/^[\da-f](\.[\da-f])*$/i
1507    a.b.c.d
1508 0: a.b.c.d
1509    A.B.C.D
1510 0: A.B.C.D
1511    a.b.c.1.2.3.C
1512 0: a.b.c.1.2.3.C
1513
1514/^\".*\"\s*(;.*)?$/
1515    \"1234\"
1516 0: "1234"
1517    \"abcd\" ;
1518 0: "abcd" ;
1519    \"\" ; rhubarb
1520 0: "" ; rhubarb
1521    *** Failers
1522No match
1523    \"1234\" : things
1524No match
1525
1526/^$/
1527    \
1528 0:
1529    *** Failers
1530No match
1531
1532/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
1533    ab c
1534 0: ab c
1535    *** Failers
1536No match
1537    abc
1538No match
1539    ab cde
1540No match
1541
1542/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
1543    ab c
1544 0: ab c
1545    *** Failers
1546No match
1547    abc
1548No match
1549    ab cde
1550No match
1551
1552/^   a\ b[c ]d       $/x
1553    a bcd
1554 0: a bcd
1555    a b d
1556 0: a b d
1557    *** Failers
1558No match
1559    abcd
1560No match
1561    ab d
1562No match
1563
1564/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
1565    abcdefhijklm
1566 0: abcdefhijklm
1567
1568/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
1569    abcdefhijklm
1570 0: abcdefhijklm
1571
1572/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
1573    a+ Z0+\x08\n\x1d\x12
1574 0: a+ Z0+\x08\x0a\x1d\x12
1575
1576/^[.^$|()*+?{,}]+/
1577    .^\$(*+)|{?,?}
1578 0: .^$(*+)|{?,?}
1579 1: .^$(*+)|{?,?
1580 2: .^$(*+)|{?,
1581 3: .^$(*+)|{?
1582 4: .^$(*+)|{
1583 5: .^$(*+)|
1584 6: .^$(*+)
1585 7: .^$(*+
1586 8: .^$(*
1587 9: .^$(
158810: .^$
158911: .^
159012: .
1591
1592/^a*\w/
1593    z
1594 0: z
1595    az
1596 0: az
1597 1: a
1598    aaaz
1599 0: aaaz
1600 1: aaa
1601 2: aa
1602 3: a
1603    a
1604 0: a
1605    aa
1606 0: aa
1607 1: a
1608    aaaa
1609 0: aaaa
1610 1: aaa
1611 2: aa
1612 3: a
1613    a+
1614 0: a
1615    aa+
1616 0: aa
1617 1: a
1618
1619/^a*?\w/
1620    z
1621 0: z
1622    az
1623 0: az
1624 1: a
1625    aaaz
1626 0: aaaz
1627 1: aaa
1628 2: aa
1629 3: a
1630    a
1631 0: a
1632    aa
1633 0: aa
1634 1: a
1635    aaaa
1636 0: aaaa
1637 1: aaa
1638 2: aa
1639 3: a
1640    a+
1641 0: a
1642    aa+
1643 0: aa
1644 1: a
1645
1646/^a+\w/
1647    az
1648 0: az
1649    aaaz
1650 0: aaaz
1651 1: aaa
1652 2: aa
1653    aa
1654 0: aa
1655    aaaa
1656 0: aaaa
1657 1: aaa
1658 2: aa
1659    aa+
1660 0: aa
1661
1662/^a+?\w/
1663    az
1664 0: az
1665    aaaz
1666 0: aaaz
1667 1: aaa
1668 2: aa
1669    aa
1670 0: aa
1671    aaaa
1672 0: aaaa
1673 1: aaa
1674 2: aa
1675    aa+
1676 0: aa
1677
1678/^\d{8}\w{2,}/
1679    1234567890
1680 0: 1234567890
1681    12345678ab
1682 0: 12345678ab
1683    12345678__
1684 0: 12345678__
1685    *** Failers
1686No match
1687    1234567
1688No match
1689
1690/^[aeiou\d]{4,5}$/
1691    uoie
1692 0: uoie
1693    1234
1694 0: 1234
1695    12345
1696 0: 12345
1697    aaaaa
1698 0: aaaaa
1699    *** Failers
1700No match
1701    123456
1702No match
1703
1704/^[aeiou\d]{4,5}?/
1705    uoie
1706 0: uoie
1707    1234
1708 0: 1234
1709    12345
1710 0: 12345
1711 1: 1234
1712    aaaaa
1713 0: aaaaa
1714 1: aaaa
1715    123456
1716 0: 12345
1717 1: 1234
1718
1719/^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]/
1720    From abcd  Mon Sep 01 12:33:02 1997
1721 0: From abcd  Mon Sep 01 12:33
1722
1723/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
1724    From abcd  Mon Sep 01 12:33:02 1997
1725 0: From abcd  Mon Sep 01 12:33
1726    From abcd  Mon Sep  1 12:33:02 1997
1727 0: From abcd  Mon Sep  1 12:33
1728    *** Failers
1729No match
1730    From abcd  Sep 01 12:33:02 1997
1731No match
1732
1733/^12.34/s
1734    12\n34
1735 0: 12\x0a34
1736    12\r34
1737 0: 12\x0d34
1738
1739/\w+(?=\t)/
1740    the quick brown\t fox
1741 0: brown
1742
1743/foo(?!bar)(.*)/
1744    foobar is foolish see?
1745 0: foolish see?
1746 1: foolish see
1747 2: foolish se
1748 3: foolish s
1749 4: foolish
1750 5: foolish
1751 6: foolis
1752 7: fooli
1753 8: fool
1754 9: foo
1755
1756/(?:(?!foo)...|^.{0,2})bar(.*)/
1757    foobar crowbar etc
1758 0: rowbar etc
1759 1: rowbar et
1760 2: rowbar e
1761 3: rowbar
1762 4: rowbar
1763    barrel
1764 0: barrel
1765 1: barre
1766 2: barr
1767 3: bar
1768    2barrel
1769 0: 2barrel
1770 1: 2barre
1771 2: 2barr
1772 3: 2bar
1773    A barrel
1774 0: A barrel
1775 1: A barre
1776 2: A barr
1777 3: A bar
1778
1779/^(\D*)(?=\d)(?!123)/
1780    abc456
1781 0: abc
1782    *** Failers
1783No match
1784    abc123
1785No match
1786
1787/^1234(?# test newlines
1788  inside)/
1789    1234
1790 0: 1234
1791
1792/^1234 #comment in extended re
1793  /x
1794    1234
1795 0: 1234
1796
1797/#rhubarb
1798  abcd/x
1799    abcd
1800 0: abcd
1801
1802/^abcd#rhubarb/x
1803    abcd
1804 0: abcd
1805
1806/(?!^)abc/
1807    the abc
1808 0: abc
1809    *** Failers
1810No match
1811    abc
1812No match
1813
1814/(?=^)abc/
1815    abc
1816 0: abc
1817    *** Failers
1818No match
1819    the abc
1820No match
1821
1822/^[ab]{1,3}(ab*|b)/
1823    aabbbbb
1824 0: aabbbbb
1825 1: aabbbb
1826 2: aabbb
1827 3: aabb
1828 4: aab
1829 5: aa
1830
1831/^[ab]{1,3}?(ab*|b)/
1832    aabbbbb
1833 0: aabbbbb
1834 1: aabbbb
1835 2: aabbb
1836 3: aabb
1837 4: aab
1838 5: aa
1839
1840/^[ab]{1,3}?(ab*?|b)/
1841    aabbbbb
1842 0: aabbbbb
1843 1: aabbbb
1844 2: aabbb
1845 3: aabb
1846 4: aab
1847 5: aa
1848
1849/^[ab]{1,3}(ab*?|b)/
1850    aabbbbb
1851 0: aabbbbb
1852 1: aabbbb
1853 2: aabbb
1854 3: aabb
1855 4: aab
1856 5: aa
1857
1858/  (?: [\040\t] |  \(
1859(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1860\)  )*                          # optional leading comment
1861(?:    (?:
1862[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1863(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1864|
1865" (?:                      # opening quote...
1866[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
1867|                     #    or
1868\\ [^\x80-\xff]           #   Escaped something (something != CR)
1869)* "  # closing quote
1870)                    # initial word
1871(?:  (?: [\040\t] |  \(
1872(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1873\)  )*  \.  (?: [\040\t] |  \(
1874(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1875\)  )*   (?:
1876[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1877(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1878|
1879" (?:                      # opening quote...
1880[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
1881|                     #    or
1882\\ [^\x80-\xff]           #   Escaped something (something != CR)
1883)* "  # closing quote
1884)  )* # further okay, if led by a period
1885(?: [\040\t] |  \(
1886(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1887\)  )*  @  (?: [\040\t] |  \(
1888(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1889\)  )*    (?:
1890[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1891(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1892|   \[                         # [
1893(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
1894\]                        #           ]
1895)                           # initial subdomain
1896(?:                                  #
1897(?: [\040\t] |  \(
1898(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1899\)  )*  \.                        # if led by a period...
1900(?: [\040\t] |  \(
1901(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1902\)  )*   (?:
1903[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1904(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1905|   \[                         # [
1906(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
1907\]                        #           ]
1908)                     #   ...further okay
1909)*
1910# address
1911|                     #  or
1912(?:
1913[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1914(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1915|
1916" (?:                      # opening quote...
1917[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
1918|                     #    or
1919\\ [^\x80-\xff]           #   Escaped something (something != CR)
1920)* "  # closing quote
1921)             # one word, optionally followed by....
1922(?:
1923[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
1924\(
1925(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1926\)       |  # comments, or...
1927
1928" (?:                      # opening quote...
1929[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
1930|                     #    or
1931\\ [^\x80-\xff]           #   Escaped something (something != CR)
1932)* "  # closing quote
1933# quoted strings
1934)*
1935<  (?: [\040\t] |  \(
1936(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1937\)  )*                     # leading <
1938(?:  @  (?: [\040\t] |  \(
1939(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1940\)  )*    (?:
1941[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1942(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1943|   \[                         # [
1944(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
1945\]                        #           ]
1946)                           # initial subdomain
1947(?:                                  #
1948(?: [\040\t] |  \(
1949(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1950\)  )*  \.                        # if led by a period...
1951(?: [\040\t] |  \(
1952(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1953\)  )*   (?:
1954[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1955(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1956|   \[                         # [
1957(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
1958\]                        #           ]
1959)                     #   ...further okay
1960)*
1961
1962(?:  (?: [\040\t] |  \(
1963(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1964\)  )*  ,  (?: [\040\t] |  \(
1965(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1966\)  )*  @  (?: [\040\t] |  \(
1967(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1968\)  )*    (?:
1969[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1970(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1971|   \[                         # [
1972(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
1973\]                        #           ]
1974)                           # initial subdomain
1975(?:                                  #
1976(?: [\040\t] |  \(
1977(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1978\)  )*  \.                        # if led by a period...
1979(?: [\040\t] |  \(
1980(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1981\)  )*   (?:
1982[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1983(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1984|   \[                         # [
1985(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
1986\]                        #           ]
1987)                     #   ...further okay
1988)*
1989)* # further okay, if led by comma
1990:                                # closing colon
1991(?: [\040\t] |  \(
1992(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
1993\)  )*  )? #       optional route
1994(?:
1995[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
1996(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1997|
1998" (?:                      # opening quote...
1999[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2000|                     #    or
2001\\ [^\x80-\xff]           #   Escaped something (something != CR)
2002)* "  # closing quote
2003)                    # initial word
2004(?:  (?: [\040\t] |  \(
2005(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2006\)  )*  \.  (?: [\040\t] |  \(
2007(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2008\)  )*   (?:
2009[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2010(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2011|
2012" (?:                      # opening quote...
2013[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2014|                     #    or
2015\\ [^\x80-\xff]           #   Escaped something (something != CR)
2016)* "  # closing quote
2017)  )* # further okay, if led by a period
2018(?: [\040\t] |  \(
2019(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2020\)  )*  @  (?: [\040\t] |  \(
2021(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2022\)  )*    (?:
2023[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2024(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2025|   \[                         # [
2026(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2027\]                        #           ]
2028)                           # initial subdomain
2029(?:                                  #
2030(?: [\040\t] |  \(
2031(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2032\)  )*  \.                        # if led by a period...
2033(?: [\040\t] |  \(
2034(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2035\)  )*   (?:
2036[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2037(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2038|   \[                         # [
2039(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2040\]                        #           ]
2041)                     #   ...further okay
2042)*
2043#       address spec
2044(?: [\040\t] |  \(
2045(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2046\)  )*  > #                  trailing >
2047# name and address
2048)  (?: [\040\t] |  \(
2049(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2050\)  )*                       # optional trailing comment
2051/x
2052    Alan Other <user\@dom.ain>
2053 0: Alan Other <user@dom.ain>
2054    <user\@dom.ain>
2055 0: user@dom.ain
2056 1: user@dom
2057    user\@dom.ain
2058 0: user@dom.ain
2059 1: user@dom
2060    \"A. Other\" <user.1234\@dom.ain> (a comment)
2061 0: "A. Other" <user.1234@dom.ain> (a comment)
2062 1: "A. Other" <user.1234@dom.ain>
2063 2: "A. Other" <user.1234@dom.ain>
2064    A. Other <user.1234\@dom.ain> (a comment)
2065 0:  Other <user.1234@dom.ain> (a comment)
2066 1:  Other <user.1234@dom.ain>
2067 2:  Other <user.1234@dom.ain>
2068    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
2069 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
2070 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
2071    A missing angle <user\@some.where
2072 0: user@some.where
2073 1: user@some
2074    *** Failers
2075No match
2076    The quick brown fox
2077No match
2078
2079/[\040\t]*                    # Nab whitespace.
2080(?:
2081\(                              #  (
2082[^\\\x80-\xff\n\015()] *                             #     normal*
2083(?:                                 #       (
2084(?:  \\ [^\x80-\xff]  |
2085\(                            #  (
2086[^\\\x80-\xff\n\015()] *                            #     normal*
2087(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2088\)                           #                       )
2089)    #         special
2090[^\\\x80-\xff\n\015()] *                         #         normal*
2091)*                                  #            )*
2092\)                             #                )
2093[\040\t]* )*    # If comment found, allow more spaces.
2094# optional leading comment
2095(?:
2096(?:
2097[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2098(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2099# Atom
2100|                       #  or
2101"                                     # "
2102[^\\\x80-\xff\n\015"] *                            #   normal
2103(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
2104"                                     #        "
2105# Quoted string
2106)
2107[\040\t]*                    # Nab whitespace.
2108(?:
2109\(                              #  (
2110[^\\\x80-\xff\n\015()] *                             #     normal*
2111(?:                                 #       (
2112(?:  \\ [^\x80-\xff]  |
2113\(                            #  (
2114[^\\\x80-\xff\n\015()] *                            #     normal*
2115(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2116\)                           #                       )
2117)    #         special
2118[^\\\x80-\xff\n\015()] *                         #         normal*
2119)*                                  #            )*
2120\)                             #                )
2121[\040\t]* )*    # If comment found, allow more spaces.
2122(?:
2123\.
2124[\040\t]*                    # Nab whitespace.
2125(?:
2126\(                              #  (
2127[^\\\x80-\xff\n\015()] *                             #     normal*
2128(?:                                 #       (
2129(?:  \\ [^\x80-\xff]  |
2130\(                            #  (
2131[^\\\x80-\xff\n\015()] *                            #     normal*
2132(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2133\)                           #                       )
2134)    #         special
2135[^\\\x80-\xff\n\015()] *                         #         normal*
2136)*                                  #            )*
2137\)                             #                )
2138[\040\t]* )*    # If comment found, allow more spaces.
2139(?:
2140[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2141(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2142# Atom
2143|                       #  or
2144"                                     # "
2145[^\\\x80-\xff\n\015"] *                            #   normal
2146(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
2147"                                     #        "
2148# Quoted string
2149)
2150[\040\t]*                    # Nab whitespace.
2151(?:
2152\(                              #  (
2153[^\\\x80-\xff\n\015()] *                             #     normal*
2154(?:                                 #       (
2155(?:  \\ [^\x80-\xff]  |
2156\(                            #  (
2157[^\\\x80-\xff\n\015()] *                            #     normal*
2158(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2159\)                           #                       )
2160)    #         special
2161[^\\\x80-\xff\n\015()] *                         #         normal*
2162)*                                  #            )*
2163\)                             #                )
2164[\040\t]* )*    # If comment found, allow more spaces.
2165# additional words
2166)*
2167@
2168[\040\t]*                    # Nab whitespace.
2169(?:
2170\(                              #  (
2171[^\\\x80-\xff\n\015()] *                             #     normal*
2172(?:                                 #       (
2173(?:  \\ [^\x80-\xff]  |
2174\(                            #  (
2175[^\\\x80-\xff\n\015()] *                            #     normal*
2176(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2177\)                           #                       )
2178)    #         special
2179[^\\\x80-\xff\n\015()] *                         #         normal*
2180)*                                  #            )*
2181\)                             #                )
2182[\040\t]* )*    # If comment found, allow more spaces.
2183(?:
2184[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2185(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2186|
2187\[                            # [
2188(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2189\]                           #           ]
2190)
2191[\040\t]*                    # Nab whitespace.
2192(?:
2193\(                              #  (
2194[^\\\x80-\xff\n\015()] *                             #     normal*
2195(?:                                 #       (
2196(?:  \\ [^\x80-\xff]  |
2197\(                            #  (
2198[^\\\x80-\xff\n\015()] *                            #     normal*
2199(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2200\)                           #                       )
2201)    #         special
2202[^\\\x80-\xff\n\015()] *                         #         normal*
2203)*                                  #            )*
2204\)                             #                )
2205[\040\t]* )*    # If comment found, allow more spaces.
2206# optional trailing comments
2207(?:
2208\.
2209[\040\t]*                    # Nab whitespace.
2210(?:
2211\(                              #  (
2212[^\\\x80-\xff\n\015()] *                             #     normal*
2213(?:                                 #       (
2214(?:  \\ [^\x80-\xff]  |
2215\(                            #  (
2216[^\\\x80-\xff\n\015()] *                            #     normal*
2217(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2218\)                           #                       )
2219)    #         special
2220[^\\\x80-\xff\n\015()] *                         #         normal*
2221)*                                  #            )*
2222\)                             #                )
2223[\040\t]* )*    # If comment found, allow more spaces.
2224(?:
2225[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2226(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2227|
2228\[                            # [
2229(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2230\]                           #           ]
2231)
2232[\040\t]*                    # Nab whitespace.
2233(?:
2234\(                              #  (
2235[^\\\x80-\xff\n\015()] *                             #     normal*
2236(?:                                 #       (
2237(?:  \\ [^\x80-\xff]  |
2238\(                            #  (
2239[^\\\x80-\xff\n\015()] *                            #     normal*
2240(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2241\)                           #                       )
2242)    #         special
2243[^\\\x80-\xff\n\015()] *                         #         normal*
2244)*                                  #            )*
2245\)                             #                )
2246[\040\t]* )*    # If comment found, allow more spaces.
2247# optional trailing comments
2248)*
2249# address
2250|                             #  or
2251(?:
2252[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2253(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2254# Atom
2255|                       #  or
2256"                                     # "
2257[^\\\x80-\xff\n\015"] *                            #   normal
2258(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
2259"                                     #        "
2260# Quoted string
2261)
2262# leading word
2263[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
2264(?:
2265(?:
2266\(                              #  (
2267[^\\\x80-\xff\n\015()] *                             #     normal*
2268(?:                                 #       (
2269(?:  \\ [^\x80-\xff]  |
2270\(                            #  (
2271[^\\\x80-\xff\n\015()] *                            #     normal*
2272(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2273\)                           #                       )
2274)    #         special
2275[^\\\x80-\xff\n\015()] *                         #         normal*
2276)*                                  #            )*
2277\)                             #                )
2278|
2279"                                     # "
2280[^\\\x80-\xff\n\015"] *                            #   normal
2281(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
2282"                                     #        "
2283) # "special" comment or quoted string
2284[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
2285)*
2286<
2287[\040\t]*                    # Nab whitespace.
2288(?:
2289\(                              #  (
2290[^\\\x80-\xff\n\015()] *                             #     normal*
2291(?:                                 #       (
2292(?:  \\ [^\x80-\xff]  |
2293\(                            #  (
2294[^\\\x80-\xff\n\015()] *                            #     normal*
2295(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2296\)                           #                       )
2297)    #         special
2298[^\\\x80-\xff\n\015()] *                         #         normal*
2299)*                                  #            )*
2300\)                             #                )
2301[\040\t]* )*    # If comment found, allow more spaces.
2302# <
2303(?:
2304@
2305[\040\t]*                    # Nab whitespace.
2306(?:
2307\(                              #  (
2308[^\\\x80-\xff\n\015()] *                             #     normal*
2309(?:                                 #       (
2310(?:  \\ [^\x80-\xff]  |
2311\(                            #  (
2312[^\\\x80-\xff\n\015()] *                            #     normal*
2313(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2314\)                           #                       )
2315)    #         special
2316[^\\\x80-\xff\n\015()] *                         #         normal*
2317)*                                  #            )*
2318\)                             #                )
2319[\040\t]* )*    # If comment found, allow more spaces.
2320(?:
2321[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2322(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2323|
2324\[                            # [
2325(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2326\]                           #           ]
2327)
2328[\040\t]*                    # Nab whitespace.
2329(?:
2330\(                              #  (
2331[^\\\x80-\xff\n\015()] *                             #     normal*
2332(?:                                 #       (
2333(?:  \\ [^\x80-\xff]  |
2334\(                            #  (
2335[^\\\x80-\xff\n\015()] *                            #     normal*
2336(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2337\)                           #                       )
2338)    #         special
2339[^\\\x80-\xff\n\015()] *                         #         normal*
2340)*                                  #            )*
2341\)                             #                )
2342[\040\t]* )*    # If comment found, allow more spaces.
2343# optional trailing comments
2344(?:
2345\.
2346[\040\t]*                    # Nab whitespace.
2347(?:
2348\(                              #  (
2349[^\\\x80-\xff\n\015()] *                             #     normal*
2350(?:                                 #       (
2351(?:  \\ [^\x80-\xff]  |
2352\(                            #  (
2353[^\\\x80-\xff\n\015()] *                            #     normal*
2354(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2355\)                           #                       )
2356)    #         special
2357[^\\\x80-\xff\n\015()] *                         #         normal*
2358)*                                  #            )*
2359\)                             #                )
2360[\040\t]* )*    # If comment found, allow more spaces.
2361(?:
2362[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2363(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2364|
2365\[                            # [
2366(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2367\]                           #           ]
2368)
2369[\040\t]*                    # Nab whitespace.
2370(?:
2371\(                              #  (
2372[^\\\x80-\xff\n\015()] *                             #     normal*
2373(?:                                 #       (
2374(?:  \\ [^\x80-\xff]  |
2375\(                            #  (
2376[^\\\x80-\xff\n\015()] *                            #     normal*
2377(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2378\)                           #                       )
2379)    #         special
2380[^\\\x80-\xff\n\015()] *                         #         normal*
2381)*                                  #            )*
2382\)                             #                )
2383[\040\t]* )*    # If comment found, allow more spaces.
2384# optional trailing comments
2385)*
2386(?: ,
2387[\040\t]*                    # Nab whitespace.
2388(?:
2389\(                              #  (
2390[^\\\x80-\xff\n\015()] *                             #     normal*
2391(?:                                 #       (
2392(?:  \\ [^\x80-\xff]  |
2393\(                            #  (
2394[^\\\x80-\xff\n\015()] *                            #     normal*
2395(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2396\)                           #                       )
2397)    #         special
2398[^\\\x80-\xff\n\015()] *                         #         normal*
2399)*                                  #            )*
2400\)                             #                )
2401[\040\t]* )*    # If comment found, allow more spaces.
2402@
2403[\040\t]*                    # Nab whitespace.
2404(?:
2405\(                              #  (
2406[^\\\x80-\xff\n\015()] *                             #     normal*
2407(?:                                 #       (
2408(?:  \\ [^\x80-\xff]  |
2409\(                            #  (
2410[^\\\x80-\xff\n\015()] *                            #     normal*
2411(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2412\)                           #                       )
2413)    #         special
2414[^\\\x80-\xff\n\015()] *                         #         normal*
2415)*                                  #            )*
2416\)                             #                )
2417[\040\t]* )*    # If comment found, allow more spaces.
2418(?:
2419[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2420(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2421|
2422\[                            # [
2423(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2424\]                           #           ]
2425)
2426[\040\t]*                    # Nab whitespace.
2427(?:
2428\(                              #  (
2429[^\\\x80-\xff\n\015()] *                             #     normal*
2430(?:                                 #       (
2431(?:  \\ [^\x80-\xff]  |
2432\(                            #  (
2433[^\\\x80-\xff\n\015()] *                            #     normal*
2434(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2435\)                           #                       )
2436)    #         special
2437[^\\\x80-\xff\n\015()] *                         #         normal*
2438)*                                  #            )*
2439\)                             #                )
2440[\040\t]* )*    # If comment found, allow more spaces.
2441# optional trailing comments
2442(?:
2443\.
2444[\040\t]*                    # Nab whitespace.
2445(?:
2446\(                              #  (
2447[^\\\x80-\xff\n\015()] *                             #     normal*
2448(?:                                 #       (
2449(?:  \\ [^\x80-\xff]  |
2450\(                            #  (
2451[^\\\x80-\xff\n\015()] *                            #     normal*
2452(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2453\)                           #                       )
2454)    #         special
2455[^\\\x80-\xff\n\015()] *                         #         normal*
2456)*                                  #            )*
2457\)                             #                )
2458[\040\t]* )*    # If comment found, allow more spaces.
2459(?:
2460[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2461(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2462|
2463\[                            # [
2464(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2465\]                           #           ]
2466)
2467[\040\t]*                    # Nab whitespace.
2468(?:
2469\(                              #  (
2470[^\\\x80-\xff\n\015()] *                             #     normal*
2471(?:                                 #       (
2472(?:  \\ [^\x80-\xff]  |
2473\(                            #  (
2474[^\\\x80-\xff\n\015()] *                            #     normal*
2475(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2476\)                           #                       )
2477)    #         special
2478[^\\\x80-\xff\n\015()] *                         #         normal*
2479)*                                  #            )*
2480\)                             #                )
2481[\040\t]* )*    # If comment found, allow more spaces.
2482# optional trailing comments
2483)*
2484)*  # additional domains
2485:
2486[\040\t]*                    # Nab whitespace.
2487(?:
2488\(                              #  (
2489[^\\\x80-\xff\n\015()] *                             #     normal*
2490(?:                                 #       (
2491(?:  \\ [^\x80-\xff]  |
2492\(                            #  (
2493[^\\\x80-\xff\n\015()] *                            #     normal*
2494(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2495\)                           #                       )
2496)    #         special
2497[^\\\x80-\xff\n\015()] *                         #         normal*
2498)*                                  #            )*
2499\)                             #                )
2500[\040\t]* )*    # If comment found, allow more spaces.
2501# optional trailing comments
2502)?     #       optional route
2503(?:
2504[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2505(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2506# Atom
2507|                       #  or
2508"                                     # "
2509[^\\\x80-\xff\n\015"] *                            #   normal
2510(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
2511"                                     #        "
2512# Quoted string
2513)
2514[\040\t]*                    # Nab whitespace.
2515(?:
2516\(                              #  (
2517[^\\\x80-\xff\n\015()] *                             #     normal*
2518(?:                                 #       (
2519(?:  \\ [^\x80-\xff]  |
2520\(                            #  (
2521[^\\\x80-\xff\n\015()] *                            #     normal*
2522(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2523\)                           #                       )
2524)    #         special
2525[^\\\x80-\xff\n\015()] *                         #         normal*
2526)*                                  #            )*
2527\)                             #                )
2528[\040\t]* )*    # If comment found, allow more spaces.
2529(?:
2530\.
2531[\040\t]*                    # Nab whitespace.
2532(?:
2533\(                              #  (
2534[^\\\x80-\xff\n\015()] *                             #     normal*
2535(?:                                 #       (
2536(?:  \\ [^\x80-\xff]  |
2537\(                            #  (
2538[^\\\x80-\xff\n\015()] *                            #     normal*
2539(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2540\)                           #                       )
2541)    #         special
2542[^\\\x80-\xff\n\015()] *                         #         normal*
2543)*                                  #            )*
2544\)                             #                )
2545[\040\t]* )*    # If comment found, allow more spaces.
2546(?:
2547[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2548(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2549# Atom
2550|                       #  or
2551"                                     # "
2552[^\\\x80-\xff\n\015"] *                            #   normal
2553(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
2554"                                     #        "
2555# Quoted string
2556)
2557[\040\t]*                    # Nab whitespace.
2558(?:
2559\(                              #  (
2560[^\\\x80-\xff\n\015()] *                             #     normal*
2561(?:                                 #       (
2562(?:  \\ [^\x80-\xff]  |
2563\(                            #  (
2564[^\\\x80-\xff\n\015()] *                            #     normal*
2565(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2566\)                           #                       )
2567)    #         special
2568[^\\\x80-\xff\n\015()] *                         #         normal*
2569)*                                  #            )*
2570\)                             #                )
2571[\040\t]* )*    # If comment found, allow more spaces.
2572# additional words
2573)*
2574@
2575[\040\t]*                    # Nab whitespace.
2576(?:
2577\(                              #  (
2578[^\\\x80-\xff\n\015()] *                             #     normal*
2579(?:                                 #       (
2580(?:  \\ [^\x80-\xff]  |
2581\(                            #  (
2582[^\\\x80-\xff\n\015()] *                            #     normal*
2583(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2584\)                           #                       )
2585)    #         special
2586[^\\\x80-\xff\n\015()] *                         #         normal*
2587)*                                  #            )*
2588\)                             #                )
2589[\040\t]* )*    # If comment found, allow more spaces.
2590(?:
2591[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2592(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2593|
2594\[                            # [
2595(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2596\]                           #           ]
2597)
2598[\040\t]*                    # Nab whitespace.
2599(?:
2600\(                              #  (
2601[^\\\x80-\xff\n\015()] *                             #     normal*
2602(?:                                 #       (
2603(?:  \\ [^\x80-\xff]  |
2604\(                            #  (
2605[^\\\x80-\xff\n\015()] *                            #     normal*
2606(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2607\)                           #                       )
2608)    #         special
2609[^\\\x80-\xff\n\015()] *                         #         normal*
2610)*                                  #            )*
2611\)                             #                )
2612[\040\t]* )*    # If comment found, allow more spaces.
2613# optional trailing comments
2614(?:
2615\.
2616[\040\t]*                    # Nab whitespace.
2617(?:
2618\(                              #  (
2619[^\\\x80-\xff\n\015()] *                             #     normal*
2620(?:                                 #       (
2621(?:  \\ [^\x80-\xff]  |
2622\(                            #  (
2623[^\\\x80-\xff\n\015()] *                            #     normal*
2624(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2625\)                           #                       )
2626)    #         special
2627[^\\\x80-\xff\n\015()] *                         #         normal*
2628)*                                  #            )*
2629\)                             #                )
2630[\040\t]* )*    # If comment found, allow more spaces.
2631(?:
2632[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2633(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2634|
2635\[                            # [
2636(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
2637\]                           #           ]
2638)
2639[\040\t]*                    # Nab whitespace.
2640(?:
2641\(                              #  (
2642[^\\\x80-\xff\n\015()] *                             #     normal*
2643(?:                                 #       (
2644(?:  \\ [^\x80-\xff]  |
2645\(                            #  (
2646[^\\\x80-\xff\n\015()] *                            #     normal*
2647(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
2648\)                           #                       )
2649)    #         special
2650[^\\\x80-\xff\n\015()] *                         #         normal*
2651)*                                  #            )*
2652\)                             #                )
2653[\040\t]* )*    # If comment found, allow more spaces.
2654# optional trailing comments
2655)*
2656#       address spec
2657>                    #                 >
2658# name and address
2659)
2660/x
2661    Alan Other <user\@dom.ain>
2662 0: Alan Other <user@dom.ain>
2663    <user\@dom.ain>
2664 0: user@dom.ain
2665 1: user@dom
2666    user\@dom.ain
2667 0: user@dom.ain
2668 1: user@dom
2669    \"A. Other\" <user.1234\@dom.ain> (a comment)
2670 0: "A. Other" <user.1234@dom.ain>
2671    A. Other <user.1234\@dom.ain> (a comment)
2672 0:  Other <user.1234@dom.ain>
2673    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
2674 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
2675 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
2676    A missing angle <user\@some.where
2677 0: user@some.where
2678 1: user@some
2679    *** Failers
2680No match
2681    The quick brown fox
2682No match
2683
2684/abc\0def\00pqr\000xyz\0000AB/
2685    abc\0def\00pqr\000xyz\0000AB
2686 0: abc\x00def\x00pqr\x00xyz\x000AB
2687    abc456 abc\0def\00pqr\000xyz\0000ABCDE
2688 0: abc\x00def\x00pqr\x00xyz\x000AB
2689
2690/abc\x0def\x00pqr\x000xyz\x0000AB/
2691    abc\x0def\x00pqr\x000xyz\x0000AB
2692 0: abc\x0def\x00pqr\x000xyz\x0000AB
2693    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
2694 0: abc\x0def\x00pqr\x000xyz\x0000AB
2695
2696/^[\000-\037]/
2697    \0A
2698 0: \x00
2699    \01B
2700 0: \x01
2701    \037C
2702 0: \x1f
2703
2704/\0*/
2705    \0\0\0\0
2706 0: \x00\x00\x00\x00
2707 1: \x00\x00\x00
2708 2: \x00\x00
2709 3: \x00
2710 4:
2711
2712/A\x0{2,3}Z/
2713    The A\x0\x0Z
2714 0: A\x00\x00Z
2715    An A\0\x0\0Z
2716 0: A\x00\x00\x00Z
2717    *** Failers
2718No match
2719    A\0Z
2720No match
2721    A\0\x0\0\x0Z
2722No match
2723
2724/^\s/
2725    \040abc
2726 0:
2727    \x0cabc
2728 0: \x0c
2729    \nabc
2730 0: \x0a
2731    \rabc
2732 0: \x0d
2733    \tabc
2734 0: \x09
2735    *** Failers
2736No match
2737    abc
2738No match
2739
2740/^a	b
2741      c/x
2742    abc
2743 0: abc
2744
2745/ab{1,3}bc/
2746    abbbbc
2747 0: abbbbc
2748    abbbc
2749 0: abbbc
2750    abbc
2751 0: abbc
2752    *** Failers
2753No match
2754    abc
2755No match
2756    abbbbbc
2757No match
2758
2759/([^.]*)\.([^:]*):[T ]+(.*)/
2760    track1.title:TBlah blah blah
2761 0: track1.title:TBlah blah blah
2762 1: track1.title:TBlah blah bla
2763 2: track1.title:TBlah blah bl
2764 3: track1.title:TBlah blah b
2765 4: track1.title:TBlah blah
2766 5: track1.title:TBlah blah
2767 6: track1.title:TBlah bla
2768 7: track1.title:TBlah bl
2769 8: track1.title:TBlah b
2770 9: track1.title:TBlah
277110: track1.title:TBlah
277211: track1.title:TBla
277312: track1.title:TBl
277413: track1.title:TB
277514: track1.title:T
2776
2777/([^.]*)\.([^:]*):[T ]+(.*)/i
2778    track1.title:TBlah blah blah
2779 0: track1.title:TBlah blah blah
2780 1: track1.title:TBlah blah bla
2781 2: track1.title:TBlah blah bl
2782 3: track1.title:TBlah blah b
2783 4: track1.title:TBlah blah
2784 5: track1.title:TBlah blah
2785 6: track1.title:TBlah bla
2786 7: track1.title:TBlah bl
2787 8: track1.title:TBlah b
2788 9: track1.title:TBlah
278910: track1.title:TBlah
279011: track1.title:TBla
279112: track1.title:TBl
279213: track1.title:TB
279314: track1.title:T
2794
2795/([^.]*)\.([^:]*):[t ]+(.*)/i
2796    track1.title:TBlah blah blah
2797 0: track1.title:TBlah blah blah
2798 1: track1.title:TBlah blah bla
2799 2: track1.title:TBlah blah bl
2800 3: track1.title:TBlah blah b
2801 4: track1.title:TBlah blah
2802 5: track1.title:TBlah blah
2803 6: track1.title:TBlah bla
2804 7: track1.title:TBlah bl
2805 8: track1.title:TBlah b
2806 9: track1.title:TBlah
280710: track1.title:TBlah
280811: track1.title:TBla
280912: track1.title:TBl
281013: track1.title:TB
281114: track1.title:T
2812
2813/^[W-c]+$/
2814    WXY_^abc
2815 0: WXY_^abc
2816    *** Failers
2817No match
2818    wxy
2819No match
2820
2821/^[W-c]+$/i
2822    WXY_^abc
2823 0: WXY_^abc
2824    wxy_^ABC
2825 0: wxy_^ABC
2826
2827/^[\x3f-\x5F]+$/i
2828    WXY_^abc
2829 0: WXY_^abc
2830    wxy_^ABC
2831 0: wxy_^ABC
2832
2833/^abc$/m
2834    abc
2835 0: abc
2836    qqq\nabc
2837 0: abc
2838    abc\nzzz
2839 0: abc
2840    qqq\nabc\nzzz
2841 0: abc
2842
2843/^abc$/
2844    abc
2845 0: abc
2846    *** Failers
2847No match
2848    qqq\nabc
2849No match
2850    abc\nzzz
2851No match
2852    qqq\nabc\nzzz
2853No match
2854
2855/\Aabc\Z/m
2856    abc
2857 0: abc
2858    abc\n
2859 0: abc
2860    *** Failers
2861No match
2862    qqq\nabc
2863No match
2864    abc\nzzz
2865No match
2866    qqq\nabc\nzzz
2867No match
2868
2869/\A(.)*\Z/s
2870    abc\ndef
2871 0: abc\x0adef
2872
2873/\A(.)*\Z/m
2874    *** Failers
2875 0: *** Failers
2876    abc\ndef
2877No match
2878
2879/(?:b)|(?::+)/
2880    b::c
2881 0: b
2882    c::b
2883 0: ::
2884 1: :
2885
2886/[-az]+/
2887    az-
2888 0: az-
2889 1: az
2890 2: a
2891    *** Failers
2892 0: a
2893    b
2894No match
2895
2896/[az-]+/
2897    za-
2898 0: za-
2899 1: za
2900 2: z
2901    *** Failers
2902 0: a
2903    b
2904No match
2905
2906/[a\-z]+/
2907    a-z
2908 0: a-z
2909 1: a-
2910 2: a
2911    *** Failers
2912 0: a
2913    b
2914No match
2915
2916/[a-z]+/
2917    abcdxyz
2918 0: abcdxyz
2919 1: abcdxy
2920 2: abcdx
2921 3: abcd
2922 4: abc
2923 5: ab
2924 6: a
2925
2926/[\d-]+/
2927    12-34
2928 0: 12-34
2929 1: 12-3
2930 2: 12-
2931 3: 12
2932 4: 1
2933    *** Failers
2934No match
2935    aaa
2936No match
2937
2938/[\d-z]+/
2939    12-34z
2940 0: 12-34z
2941 1: 12-34
2942 2: 12-3
2943 3: 12-
2944 4: 12
2945 5: 1
2946    *** Failers
2947No match
2948    aaa
2949No match
2950
2951/\x5c/
2952    \\
2953 0: \
2954
2955/\x20Z/
2956    the Zoo
2957 0:  Z
2958    *** Failers
2959No match
2960    Zulu
2961No match
2962
2963/ab{3cd/
2964    ab{3cd
2965 0: ab{3cd
2966
2967/ab{3,cd/
2968    ab{3,cd
2969 0: ab{3,cd
2970
2971/ab{3,4a}cd/
2972    ab{3,4a}cd
2973 0: ab{3,4a}cd
2974
2975/{4,5a}bc/
2976    {4,5a}bc
2977 0: {4,5a}bc
2978
2979/^a.b/<lf>
2980    a\rb
2981 0: a\x0db
2982    *** Failers
2983No match
2984    a\nb
2985No match
2986
2987/abc$/
2988    abc
2989 0: abc
2990    abc\n
2991 0: abc
2992    *** Failers
2993No match
2994    abc\ndef
2995No match
2996
2997/(abc)\123/
2998    abc\x53
2999 0: abcS
3000
3001/(abc)\223/
3002    abc\x93
3003 0: abc\x93
3004
3005/(abc)\323/
3006    abc\xd3
3007 0: abc\xd3
3008
3009/(abc)\100/
3010    abc\x40
3011 0: abc@
3012    abc\100
3013 0: abc@
3014
3015/(abc)\1000/
3016    abc\x400
3017 0: abc@0
3018    abc\x40\x30
3019 0: abc@0
3020    abc\1000
3021 0: abc@0
3022    abc\100\x30
3023 0: abc@0
3024    abc\100\060
3025 0: abc@0
3026    abc\100\60
3027 0: abc@0
3028
3029/abc\81/
3030    abc\081
3031 0: abc\x0081
3032    abc\0\x38\x31
3033 0: abc\x0081
3034
3035/abc\91/
3036    abc\091
3037 0: abc\x0091
3038    abc\0\x39\x31
3039 0: abc\x0091
3040
3041/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
3042    abcdefghijk\12S
3043 0: abcdefghijk\x0aS
3044
3045/ab\idef/
3046    abidef
3047 0: abidef
3048
3049/a{0}bc/
3050    bc
3051 0: bc
3052
3053/(a|(bc)){0,0}?xyz/
3054    xyz
3055 0: xyz
3056
3057/abc[\10]de/
3058    abc\010de
3059 0: abc\x08de
3060
3061/abc[\1]de/
3062    abc\1de
3063 0: abc\x01de
3064
3065/(abc)[\1]de/
3066    abc\1de
3067 0: abc\x01de
3068
3069/(?s)a.b/
3070    a\nb
3071 0: a\x0ab
3072
3073/^([^a])([^\b])([^c]*)([^d]{3,4})/
3074    baNOTccccd
3075 0: baNOTcccc
3076 1: baNOTccc
3077 2: baNOTcc
3078 3: baNOTc
3079 4: baNOT
3080    baNOTcccd
3081 0: baNOTccc
3082 1: baNOTcc
3083 2: baNOTc
3084 3: baNOT
3085    baNOTccd
3086 0: baNOTcc
3087 1: baNOTc
3088 2: baNOT
3089    bacccd
3090 0: baccc
3091    *** Failers
3092 0: *** Failers
3093 1: *** Failer
3094 2: *** Faile
3095 3: *** Fail
3096 4: *** Fai
3097 5: *** Fa
3098 6: *** F
3099    anything
3100No match
3101    b\bc
3102No match
3103    baccd
3104No match
3105
3106/[^a]/
3107    Abc
3108 0: A
3109
3110/[^a]/i
3111    Abc
3112 0: b
3113
3114/[^a]+/
3115    AAAaAbc
3116 0: AAA
3117 1: AA
3118 2: A
3119
3120/[^a]+/i
3121    AAAaAbc
3122 0: bc
3123 1: b
3124
3125/[^a]+/
3126    bbb\nccc
3127 0: bbb\x0accc
3128 1: bbb\x0acc
3129 2: bbb\x0ac
3130 3: bbb\x0a
3131 4: bbb
3132 5: bb
3133 6: b
3134
3135/[^k]$/
3136    abc
3137 0: c
3138    *** Failers
3139 0: s
3140    abk
3141No match
3142
3143/[^k]{2,3}$/
3144    abc
3145 0: abc
3146    kbc
3147 0: bc
3148    kabc
3149 0: abc
3150    *** Failers
3151 0: ers
3152    abk
3153No match
3154    akb
3155No match
3156    akk
3157No match
3158
3159/^\d{8,}\@.+[^k]$/
3160    12345678\@a.b.c.d
3161 0: 12345678@a.b.c.d
3162    123456789\@x.y.z
3163 0: 123456789@x.y.z
3164    *** Failers
3165No match
3166    12345678\@x.y.uk
3167No match
3168    1234567\@a.b.c.d
3169No match
3170
3171/[^a]/
3172    aaaabcd
3173 0: b
3174    aaAabcd
3175 0: A
3176
3177/[^a]/i
3178    aaaabcd
3179 0: b
3180    aaAabcd
3181 0: b
3182
3183/[^az]/
3184    aaaabcd
3185 0: b
3186    aaAabcd
3187 0: A
3188
3189/[^az]/i
3190    aaaabcd
3191 0: b
3192    aaAabcd
3193 0: b
3194
3195/\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/
3196 \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
3197 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
3198
3199/P[^*]TAIRE[^*]{1,6}?LL/
3200    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
3201 0: PSTAIREISLL
3202
3203/P[^*]TAIRE[^*]{1,}?LL/
3204    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
3205 0: PSTAIREISLL
3206
3207/(\.\d\d[1-9]?)\d+/
3208    1.230003938
3209 0: .230003938
3210 1: .23000393
3211 2: .2300039
3212 3: .230003
3213 4: .23000
3214 5: .2300
3215 6: .230
3216    1.875000282
3217 0: .875000282
3218 1: .87500028
3219 2: .8750002
3220 3: .875000
3221 4: .87500
3222 5: .8750
3223 6: .875
3224    1.235
3225 0: .235
3226
3227/(\.\d\d((?=0)|\d(?=\d)))/
3228    1.230003938
3229 0: .230
3230 1: .23
3231    1.875000282
3232 0: .875
3233    *** Failers
3234No match
3235    1.235
3236No match
3237
3238/a(?)b/
3239    ab
3240 0: ab
3241
3242/\b(foo)\s+(\w+)/i
3243    Food is on the foo table
3244 0: foo table
3245 1: foo tabl
3246 2: foo tab
3247 3: foo ta
3248 4: foo t
3249
3250/foo(.*)bar/
3251    The food is under the bar in the barn.
3252 0: food is under the bar in the bar
3253 1: food is under the bar
3254
3255/foo(.*?)bar/
3256    The food is under the bar in the barn.
3257 0: food is under the bar in the bar
3258 1: food is under the bar
3259
3260/(.*)(\d*)/
3261    I have 2 numbers: 53147
3262Matched, but too many subsidiary matches
3263 0: I have 2 numbers: 53147
3264 1: I have 2 numbers: 5314
3265 2: I have 2 numbers: 531
3266 3: I have 2 numbers: 53
3267 4: I have 2 numbers: 5
3268 5: I have 2 numbers:
3269 6: I have 2 numbers:
3270 7: I have 2 numbers
3271 8: I have 2 number
3272 9: I have 2 numbe
327310: I have 2 numb
327411: I have 2 num
327512: I have 2 nu
327613: I have 2 n
327714: I have 2
327815: I have 2
327916: I have
328017: I have
328118: I hav
328219: I ha
328320: I h
328421: I
3285
3286/(.*)(\d+)/
3287    I have 2 numbers: 53147
3288 0: I have 2 numbers: 53147
3289 1: I have 2 numbers: 5314
3290 2: I have 2 numbers: 531
3291 3: I have 2 numbers: 53
3292 4: I have 2 numbers: 5
3293 5: I have 2
3294
3295/(.*?)(\d*)/
3296    I have 2 numbers: 53147
3297Matched, but too many subsidiary matches
3298 0: I have 2 numbers: 53147
3299 1: I have 2 numbers: 5314
3300 2: I have 2 numbers: 531
3301 3: I have 2 numbers: 53
3302 4: I have 2 numbers: 5
3303 5: I have 2 numbers:
3304 6: I have 2 numbers:
3305 7: I have 2 numbers
3306 8: I have 2 number
3307 9: I have 2 numbe
330810: I have 2 numb
330911: I have 2 num
331012: I have 2 nu
331113: I have 2 n
331214: I have 2
331315: I have 2
331416: I have
331517: I have
331618: I hav
331719: I ha
331820: I h
331921: I
3320
3321/(.*?)(\d+)/
3322    I have 2 numbers: 53147
3323 0: I have 2 numbers: 53147
3324 1: I have 2 numbers: 5314
3325 2: I have 2 numbers: 531
3326 3: I have 2 numbers: 53
3327 4: I have 2 numbers: 5
3328 5: I have 2
3329
3330/(.*)(\d+)$/
3331    I have 2 numbers: 53147
3332 0: I have 2 numbers: 53147
3333
3334/(.*?)(\d+)$/
3335    I have 2 numbers: 53147
3336 0: I have 2 numbers: 53147
3337
3338/(.*)\b(\d+)$/
3339    I have 2 numbers: 53147
3340 0: I have 2 numbers: 53147
3341
3342/(.*\D)(\d+)$/
3343    I have 2 numbers: 53147
3344 0: I have 2 numbers: 53147
3345
3346/^\D*(?!123)/
3347    ABC123
3348 0: AB
3349 1: A
3350 2:
3351
3352/^(\D*)(?=\d)(?!123)/
3353    ABC445
3354 0: ABC
3355    *** Failers
3356No match
3357    ABC123
3358No match
3359
3360/^[W-]46]/
3361    W46]789
3362 0: W46]
3363    -46]789
3364 0: -46]
3365    *** Failers
3366No match
3367    Wall
3368No match
3369    Zebra
3370No match
3371    42
3372No match
3373    [abcd]
3374No match
3375    ]abcd[
3376No match
3377
3378/^[W-\]46]/
3379    W46]789
3380 0: W
3381    Wall
3382 0: W
3383    Zebra
3384 0: Z
3385    Xylophone
3386 0: X
3387    42
3388 0: 4
3389    [abcd]
3390 0: [
3391    ]abcd[
3392 0: ]
3393    \\backslash
3394 0: \
3395    *** Failers
3396No match
3397    -46]789
3398No match
3399    well
3400No match
3401
3402/\d\d\/\d\d\/\d\d\d\d/
3403    01/01/2000
3404 0: 01/01/2000
3405
3406/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
3407  word cat dog elephant mussel cow horse canary baboon snake shark otherword
3408 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
3409  word cat dog elephant mussel cow horse canary baboon snake shark
3410No match
3411
3412/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
3413  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
3414No match
3415
3416/^(a){0,0}/
3417    bcd
3418 0:
3419    abc
3420 0:
3421    aab
3422 0:
3423
3424/^(a){0,1}/
3425    bcd
3426 0:
3427    abc
3428 0: a
3429 1:
3430    aab
3431 0: a
3432 1:
3433
3434/^(a){0,2}/
3435    bcd
3436 0:
3437    abc
3438 0: a
3439 1:
3440    aab
3441 0: aa
3442 1: a
3443 2:
3444
3445/^(a){0,3}/
3446    bcd
3447 0:
3448    abc
3449 0: a
3450 1:
3451    aab
3452 0: aa
3453 1: a
3454 2:
3455    aaa
3456 0: aaa
3457 1: aa
3458 2: a
3459 3:
3460
3461/^(a){0,}/
3462    bcd
3463 0:
3464    abc
3465 0: a
3466 1:
3467    aab
3468 0: aa
3469 1: a
3470 2:
3471    aaa
3472 0: aaa
3473 1: aa
3474 2: a
3475 3:
3476    aaaaaaaa
3477 0: aaaaaaaa
3478 1: aaaaaaa
3479 2: aaaaaa
3480 3: aaaaa
3481 4: aaaa
3482 5: aaa
3483 6: aa
3484 7: a
3485 8:
3486
3487/^(a){1,1}/
3488    bcd
3489No match
3490    abc
3491 0: a
3492    aab
3493 0: a
3494
3495/^(a){1,2}/
3496    bcd
3497No match
3498    abc
3499 0: a
3500    aab
3501 0: aa
3502 1: a
3503
3504/^(a){1,3}/
3505    bcd
3506No match
3507    abc
3508 0: a
3509    aab
3510 0: aa
3511 1: a
3512    aaa
3513 0: aaa
3514 1: aa
3515 2: a
3516
3517/^(a){1,}/
3518    bcd
3519No match
3520    abc
3521 0: a
3522    aab
3523 0: aa
3524 1: a
3525    aaa
3526 0: aaa
3527 1: aa
3528 2: a
3529    aaaaaaaa
3530 0: aaaaaaaa
3531 1: aaaaaaa
3532 2: aaaaaa
3533 3: aaaaa
3534 4: aaaa
3535 5: aaa
3536 6: aa
3537 7: a
3538
3539/.*\.gif/
3540    borfle\nbib.gif\nno
3541 0: bib.gif
3542
3543/.{0,}\.gif/
3544    borfle\nbib.gif\nno
3545 0: bib.gif
3546
3547/.*\.gif/m
3548    borfle\nbib.gif\nno
3549 0: bib.gif
3550
3551/.*\.gif/s
3552    borfle\nbib.gif\nno
3553 0: borfle\x0abib.gif
3554
3555/.*\.gif/ms
3556    borfle\nbib.gif\nno
3557 0: borfle\x0abib.gif
3558
3559/.*$/
3560    borfle\nbib.gif\nno
3561 0: no
3562
3563/.*$/m
3564    borfle\nbib.gif\nno
3565 0: borfle
3566
3567/.*$/s
3568    borfle\nbib.gif\nno
3569 0: borfle\x0abib.gif\x0ano
3570
3571/.*$/ms
3572    borfle\nbib.gif\nno
3573 0: borfle\x0abib.gif\x0ano
3574 1: borfle\x0abib.gif
3575 2: borfle
3576
3577/.*$/
3578    borfle\nbib.gif\nno\n
3579 0: no
3580
3581/.*$/m
3582    borfle\nbib.gif\nno\n
3583 0: borfle
3584
3585/.*$/s
3586    borfle\nbib.gif\nno\n
3587 0: borfle\x0abib.gif\x0ano\x0a
3588 1: borfle\x0abib.gif\x0ano
3589
3590/.*$/ms
3591    borfle\nbib.gif\nno\n
3592 0: borfle\x0abib.gif\x0ano\x0a
3593 1: borfle\x0abib.gif\x0ano
3594 2: borfle\x0abib.gif
3595 3: borfle
3596
3597/(.*X|^B)/
3598    abcde\n1234Xyz
3599 0: 1234X
3600    BarFoo
3601 0: B
3602    *** Failers
3603No match
3604    abcde\nBar
3605No match
3606
3607/(.*X|^B)/m
3608    abcde\n1234Xyz
3609 0: 1234X
3610    BarFoo
3611 0: B
3612    abcde\nBar
3613 0: B
3614
3615/(.*X|^B)/s
3616    abcde\n1234Xyz
3617 0: abcde\x0a1234X
3618    BarFoo
3619 0: B
3620    *** Failers
3621No match
3622    abcde\nBar
3623No match
3624
3625/(.*X|^B)/ms
3626    abcde\n1234Xyz
3627 0: abcde\x0a1234X
3628    BarFoo
3629 0: B
3630    abcde\nBar
3631 0: B
3632
3633/(?s)(.*X|^B)/
3634    abcde\n1234Xyz
3635 0: abcde\x0a1234X
3636    BarFoo
3637 0: B
3638    *** Failers
3639No match
3640    abcde\nBar
3641No match
3642
3643/(?s:.*X|^B)/
3644    abcde\n1234Xyz
3645 0: abcde\x0a1234X
3646    BarFoo
3647 0: B
3648    *** Failers
3649No match
3650    abcde\nBar
3651No match
3652
3653/^.*B/
3654    **** Failers
3655No match
3656    abc\nB
3657No match
3658
3659/(?s)^.*B/
3660    abc\nB
3661 0: abc\x0aB
3662
3663/(?m)^.*B/
3664    abc\nB
3665 0: B
3666
3667/(?ms)^.*B/
3668    abc\nB
3669 0: abc\x0aB
3670
3671/(?ms)^B/
3672    abc\nB
3673 0: B
3674
3675/(?s)B$/
3676    B\n
3677 0: B
3678
3679/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
3680    123456654321
3681 0: 123456654321
3682
3683/^\d\d\d\d\d\d\d\d\d\d\d\d/
3684    123456654321
3685 0: 123456654321
3686
3687/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
3688    123456654321
3689 0: 123456654321
3690
3691/^[abc]{12}/
3692    abcabcabcabc
3693 0: abcabcabcabc
3694
3695/^[a-c]{12}/
3696    abcabcabcabc
3697 0: abcabcabcabc
3698
3699/^(a|b|c){12}/
3700    abcabcabcabc
3701 0: abcabcabcabc
3702
3703/^[abcdefghijklmnopqrstuvwxy0123456789]/
3704    n
3705 0: n
3706    *** Failers
3707No match
3708    z
3709No match
3710
3711/abcde{0,0}/
3712    abcd
3713 0: abcd
3714    *** Failers
3715No match
3716    abce
3717No match
3718
3719/ab[cd]{0,0}e/
3720    abe
3721 0: abe
3722    *** Failers
3723No match
3724    abcde
3725No match
3726
3727/ab(c){0,0}d/
3728    abd
3729 0: abd
3730    *** Failers
3731No match
3732    abcd
3733No match
3734
3735/a(b*)/
3736    a
3737 0: a
3738    ab
3739 0: ab
3740 1: a
3741    abbbb
3742 0: abbbb
3743 1: abbb
3744 2: abb
3745 3: ab
3746 4: a
3747    *** Failers
3748 0: a
3749    bbbbb
3750No match
3751
3752/ab\d{0}e/
3753    abe
3754 0: abe
3755    *** Failers
3756No match
3757    ab1e
3758No match
3759
3760/"([^\\"]+|\\.)*"/
3761    the \"quick\" brown fox
3762 0: "quick"
3763    \"the \\\"quick\\\" brown fox\"
3764 0: "the \"quick\" brown fox"
3765
3766/.*?/g+
3767    abc
3768 0: abc
3769 0+
3770 1: ab
3771 2: a
3772 3:
3773 0:
3774 0+
3775
3776/\b/g+
3777    abc
3778 0:
3779 0+ abc
3780 0:
3781 0+
3782
3783/\b/+g
3784    abc
3785 0:
3786 0+ abc
3787 0:
3788 0+
3789
3790//g
3791    abc
3792 0:
3793 0:
3794 0:
3795 0:
3796
3797/<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
3798  <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>
3799 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>
3800
3801/a[^a]b/
3802    acb
3803 0: acb
3804    a\nb
3805 0: a\x0ab
3806
3807/a.b/
3808    acb
3809 0: acb
3810    *** Failers
3811No match
3812    a\nb
3813No match
3814
3815/a[^a]b/s
3816    acb
3817 0: acb
3818    a\nb
3819 0: a\x0ab
3820
3821/a.b/s
3822    acb
3823 0: acb
3824    a\nb
3825 0: a\x0ab
3826
3827/^(b+?|a){1,2}?c/
3828    bac
3829 0: bac
3830    bbac
3831 0: bbac
3832    bbbac
3833 0: bbbac
3834    bbbbac
3835 0: bbbbac
3836    bbbbbac
3837 0: bbbbbac
3838
3839/^(b+|a){1,2}?c/
3840    bac
3841 0: bac
3842    bbac
3843 0: bbac
3844    bbbac
3845 0: bbbac
3846    bbbbac
3847 0: bbbbac
3848    bbbbbac
3849 0: bbbbbac
3850
3851/(?!\A)x/m
3852    x\nb\n
3853No match
3854    a\bx\n
3855 0: x
3856
3857/\x0{ab}/
3858    \0{ab}
3859 0: \x00{ab}
3860
3861/(A|B)*?CD/
3862    CD
3863 0: CD
3864
3865/(A|B)*CD/
3866    CD
3867 0: CD
3868
3869/(?<!bar)foo/
3870    foo
3871 0: foo
3872    catfood
3873 0: foo
3874    arfootle
3875 0: foo
3876    rfoosh
3877 0: foo
3878    *** Failers
3879No match
3880    barfoo
3881No match
3882    towbarfoo
3883No match
3884
3885/\w{3}(?<!bar)foo/
3886    catfood
3887 0: catfoo
3888    *** Failers
3889No match
3890    foo
3891No match
3892    barfoo
3893No match
3894    towbarfoo
3895No match
3896
3897/(?<=(foo)a)bar/
3898    fooabar
3899 0: bar
3900    *** Failers
3901No match
3902    bar
3903No match
3904    foobbar
3905No match
3906
3907/\Aabc\z/m
3908    abc
3909 0: abc
3910    *** Failers
3911No match
3912    abc\n
3913No match
3914    qqq\nabc
3915No match
3916    abc\nzzz
3917No match
3918    qqq\nabc\nzzz
3919No match
3920
3921"(?>.*/)foo"
3922    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
3923No match
3924
3925"(?>.*/)foo"
3926    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
3927 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
3928
3929/(?>(\.\d\d[1-9]?))\d+/
3930    1.230003938
3931 0: .230003938
3932 1: .23000393
3933 2: .2300039
3934 3: .230003
3935 4: .23000
3936 5: .2300
3937 6: .230
3938    1.875000282
3939 0: .875000282
3940 1: .87500028
3941 2: .8750002
3942 3: .875000
3943 4: .87500
3944 5: .8750
3945    *** Failers
3946No match
3947    1.235
3948No match
3949
3950/^((?>\w+)|(?>\s+))*$/
3951    now is the time for all good men to come to the aid of the party
3952 0: now is the time for all good men to come to the aid of the party
3953    *** Failers
3954No match
3955    this is not a line with only words and spaces!
3956No match
3957
3958/(\d+)(\w)/
3959    12345a
3960 0: 12345a
3961 1: 12345
3962 2: 1234
3963 3: 123
3964 4: 12
3965    12345+
3966 0: 12345
3967 1: 1234
3968 2: 123
3969 3: 12
3970
3971/((?>\d+))(\w)/
3972    12345a
3973 0: 12345a
3974    *** Failers
3975No match
3976    12345+
3977No match
3978
3979/(?>a+)b/
3980    aaab
3981 0: aaab
3982
3983/((?>a+)b)/
3984    aaab
3985 0: aaab
3986
3987/(?>(a+))b/
3988    aaab
3989 0: aaab
3990
3991/(?>b)+/
3992    aaabbbccc
3993 0: bbb
3994 1: bb
3995 2: b
3996
3997/(?>a+|b+|c+)*c/
3998    aaabbbbccccd
3999 0: aaabbbbcccc
4000 1: aaabbbbc
4001
4002/(a+|b+|c+)*c/
4003    aaabbbbccccd
4004 0: aaabbbbcccc
4005 1: aaabbbbccc
4006 2: aaabbbbcc
4007 3: aaabbbbc
4008
4009/((?>[^()]+)|\([^()]*\))+/
4010    ((abc(ade)ufh()()x
4011 0: abc(ade)ufh()()x
4012 1: abc(ade)ufh()()
4013 2: abc(ade)ufh()
4014 3: abc(ade)ufh
4015 4: abc(ade)
4016 5: abc
4017
4018/\(((?>[^()]+)|\([^()]+\))+\)/
4019    (abc)
4020 0: (abc)
4021    (abc(def)xyz)
4022 0: (abc(def)xyz)
4023    *** Failers
4024No match
4025    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4026No match
4027
4028/a(?-i)b/i
4029    ab
4030 0: ab
4031    Ab
4032 0: Ab
4033    *** Failers
4034No match
4035    aB
4036No match
4037    AB
4038No match
4039
4040/(a (?x)b c)d e/
4041    a bcd e
4042 0: a bcd e
4043    *** Failers
4044No match
4045    a b cd e
4046No match
4047    abcd e
4048No match
4049    a bcde
4050No match
4051
4052/(a b(?x)c d (?-x)e f)/
4053    a bcde f
4054 0: a bcde f
4055    *** Failers
4056No match
4057    abcdef
4058No match
4059
4060/(a(?i)b)c/
4061    abc
4062 0: abc
4063    aBc
4064 0: aBc
4065    *** Failers
4066No match
4067    abC
4068No match
4069    aBC
4070No match
4071    Abc
4072No match
4073    ABc
4074No match
4075    ABC
4076No match
4077    AbC
4078No match
4079
4080/a(?i:b)c/
4081    abc
4082 0: abc
4083    aBc
4084 0: aBc
4085    *** Failers
4086No match
4087    ABC
4088No match
4089    abC
4090No match
4091    aBC
4092No match
4093
4094/a(?i:b)*c/
4095    aBc
4096 0: aBc
4097    aBBc
4098 0: aBBc
4099    *** Failers
4100No match
4101    aBC
4102No match
4103    aBBC
4104No match
4105
4106/a(?=b(?i)c)\w\wd/
4107    abcd
4108 0: abcd
4109    abCd
4110 0: abCd
4111    *** Failers
4112No match
4113    aBCd
4114No match
4115    abcD
4116No match
4117
4118/(?s-i:more.*than).*million/i
4119    more than million
4120 0: more than million
4121    more than MILLION
4122 0: more than MILLION
4123    more \n than Million
4124 0: more \x0a than Million
4125    *** Failers
4126No match
4127    MORE THAN MILLION
4128No match
4129    more \n than \n million
4130No match
4131
4132/(?:(?s-i)more.*than).*million/i
4133    more than million
4134 0: more than million
4135    more than MILLION
4136 0: more than MILLION
4137    more \n than Million
4138 0: more \x0a than Million
4139    *** Failers
4140No match
4141    MORE THAN MILLION
4142No match
4143    more \n than \n million
4144No match
4145
4146/(?>a(?i)b+)+c/
4147    abc
4148 0: abc
4149    aBbc
4150 0: aBbc
4151    aBBc
4152 0: aBBc
4153    *** Failers
4154No match
4155    Abc
4156No match
4157    abAb
4158No match
4159    abbC
4160No match
4161
4162/(?=a(?i)b)\w\wc/
4163    abc
4164 0: abc
4165    aBc
4166 0: aBc
4167    *** Failers
4168No match
4169    Ab
4170No match
4171    abC
4172No match
4173    aBC
4174No match
4175
4176/(?<=a(?i)b)(\w\w)c/
4177    abxxc
4178 0: xxc
4179    aBxxc
4180 0: xxc
4181    *** Failers
4182No match
4183    Abxxc
4184No match
4185    ABxxc
4186No match
4187    abxxC
4188No match
4189
4190/^(?(?=abc)\w{3}:|\d\d)$/
4191    abc:
4192 0: abc:
4193    12
4194 0: 12
4195    *** Failers
4196No match
4197    123
4198No match
4199    xyz
4200No match
4201
4202/^(?(?!abc)\d\d|\w{3}:)$/
4203    abc:
4204 0: abc:
4205    12
4206 0: 12
4207    *** Failers
4208No match
4209    123
4210No match
4211    xyz
4212No match
4213
4214/(?(?<=foo)bar|cat)/
4215    foobar
4216 0: bar
4217    cat
4218 0: cat
4219    fcat
4220 0: cat
4221    focat
4222 0: cat
4223    *** Failers
4224No match
4225    foocat
4226No match
4227
4228/(?(?<!foo)cat|bar)/
4229    foobar
4230 0: bar
4231    cat
4232 0: cat
4233    fcat
4234 0: cat
4235    focat
4236 0: cat
4237    *** Failers
4238No match
4239    foocat
4240No match
4241
4242/(?>a*)*/
4243    a
4244 0: a
4245 1:
4246    aa
4247 0: aa
4248 1:
4249    aaaa
4250 0: aaaa
4251 1:
4252
4253/(abc|)+/
4254    abc
4255 0: abc
4256 1:
4257    abcabc
4258 0: abcabc
4259 1: abc
4260 2:
4261    abcabcabc
4262 0: abcabcabc
4263 1: abcabc
4264 2: abc
4265 3:
4266    xyz
4267 0:
4268
4269/([a]*)*/
4270    a
4271 0: a
4272 1:
4273    aaaaa
4274 0: aaaaa
4275 1: aaaa
4276 2: aaa
4277 3: aa
4278 4: a
4279 5:
4280
4281/([ab]*)*/
4282    a
4283 0: a
4284 1:
4285    b
4286 0: b
4287 1:
4288    ababab
4289 0: ababab
4290 1: ababa
4291 2: abab
4292 3: aba
4293 4: ab
4294 5: a
4295 6:
4296    aaaabcde
4297 0: aaaab
4298 1: aaaa
4299 2: aaa
4300 3: aa
4301 4: a
4302 5:
4303    bbbb
4304 0: bbbb
4305 1: bbb
4306 2: bb
4307 3: b
4308 4:
4309
4310/([^a]*)*/
4311    b
4312 0: b
4313 1:
4314    bbbb
4315 0: bbbb
4316 1: bbb
4317 2: bb
4318 3: b
4319 4:
4320    aaa
4321 0:
4322
4323/([^ab]*)*/
4324    cccc
4325 0: cccc
4326 1: ccc
4327 2: cc
4328 3: c
4329 4:
4330    abab
4331 0:
4332
4333/([a]*?)*/
4334    a
4335 0: a
4336 1:
4337    aaaa
4338 0: aaaa
4339 1: aaa
4340 2: aa
4341 3: a
4342 4:
4343
4344/([ab]*?)*/
4345    a
4346 0: a
4347 1:
4348    b
4349 0: b
4350 1:
4351    abab
4352 0: abab
4353 1: aba
4354 2: ab
4355 3: a
4356 4:
4357    baba
4358 0: baba
4359 1: bab
4360 2: ba
4361 3: b
4362 4:
4363
4364/([^a]*?)*/
4365    b
4366 0: b
4367 1:
4368    bbbb
4369 0: bbbb
4370 1: bbb
4371 2: bb
4372 3: b
4373 4:
4374    aaa
4375 0:
4376
4377/([^ab]*?)*/
4378    c
4379 0: c
4380 1:
4381    cccc
4382 0: cccc
4383 1: ccc
4384 2: cc
4385 3: c
4386 4:
4387    baba
4388 0:
4389
4390/(?>a*)*/
4391    a
4392 0: a
4393 1:
4394    aaabcde
4395 0: aaa
4396 1:
4397
4398/((?>a*))*/
4399    aaaaa
4400 0: aaaaa
4401 1:
4402    aabbaa
4403 0: aa
4404 1:
4405
4406/((?>a*?))*/
4407    aaaaa
4408 0: aaaaa
4409 1:
4410    aabbaa
4411 0: aa
4412 1:
4413
4414/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
4415    12-sep-98
4416 0: 12-sep-98
4417    12-09-98
4418 0: 12-09-98
4419    *** Failers
4420No match
4421    sep-12-98
4422No match
4423
4424/(?i:saturday|sunday)/
4425    saturday
4426 0: saturday
4427    sunday
4428 0: sunday
4429    Saturday
4430 0: Saturday
4431    Sunday
4432 0: Sunday
4433    SATURDAY
4434 0: SATURDAY
4435    SUNDAY
4436 0: SUNDAY
4437    SunDay
4438 0: SunDay
4439
4440/(a(?i)bc|BB)x/
4441    abcx
4442 0: abcx
4443    aBCx
4444 0: aBCx
4445    bbx
4446 0: bbx
4447    BBx
4448 0: BBx
4449    *** Failers
4450No match
4451    abcX
4452No match
4453    aBCX
4454No match
4455    bbX
4456No match
4457    BBX
4458No match
4459
4460/^([ab](?i)[cd]|[ef])/
4461    ac
4462 0: ac
4463    aC
4464 0: aC
4465    bD
4466 0: bD
4467    elephant
4468 0: e
4469    Europe
4470 0: E
4471    frog
4472 0: f
4473    France
4474 0: F
4475    *** Failers
4476No match
4477    Africa
4478No match
4479
4480/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
4481    ab
4482 0: ab
4483    aBd
4484 0: aBd
4485    xy
4486 0: xy
4487    xY
4488 0: xY
4489    zebra
4490 0: z
4491    Zambesi
4492 0: Z
4493    *** Failers
4494No match
4495    aCD
4496No match
4497    XY
4498No match
4499
4500/(?<=foo\n)^bar/m
4501    foo\nbar
4502 0: bar
4503    *** Failers
4504No match
4505    bar
4506No match
4507    baz\nbar
4508No match
4509
4510/(?<=(?<!foo)bar)baz/
4511    barbaz
4512 0: baz
4513    barbarbaz
4514 0: baz
4515    koobarbaz
4516 0: baz
4517    *** Failers
4518No match
4519    baz
4520No match
4521    foobarbaz
4522No match
4523
4524/The following tests are taken from the Perl 5.005 test suite; some of them/
4525/are compatible with 5.004, but I'd rather not have to sort them out./
4526No match
4527
4528/abc/
4529    abc
4530 0: abc
4531    xabcy
4532 0: abc
4533    ababc
4534 0: abc
4535    *** Failers
4536No match
4537    xbc
4538No match
4539    axc
4540No match
4541    abx
4542No match
4543
4544/ab*c/
4545    abc
4546 0: abc
4547
4548/ab*bc/
4549    abc
4550 0: abc
4551    abbc
4552 0: abbc
4553    abbbbc
4554 0: abbbbc
4555
4556/.{1}/
4557    abbbbc
4558 0: a
4559
4560/.{3,4}/
4561    abbbbc
4562 0: abbb
4563 1: abb
4564
4565/ab{0,}bc/
4566    abbbbc
4567 0: abbbbc
4568
4569/ab+bc/
4570    abbc
4571 0: abbc
4572    *** Failers
4573No match
4574    abc
4575No match
4576    abq
4577No match
4578
4579/ab+bc/
4580    abbbbc
4581 0: abbbbc
4582
4583/ab{1,}bc/
4584    abbbbc
4585 0: abbbbc
4586
4587/ab{1,3}bc/
4588    abbbbc
4589 0: abbbbc
4590
4591/ab{3,4}bc/
4592    abbbbc
4593 0: abbbbc
4594
4595/ab{4,5}bc/
4596    *** Failers
4597No match
4598    abq
4599No match
4600    abbbbc
4601No match
4602
4603/ab?bc/
4604    abbc
4605 0: abbc
4606    abc
4607 0: abc
4608
4609/ab{0,1}bc/
4610    abc
4611 0: abc
4612
4613/ab?bc/
4614
4615/ab?c/
4616    abc
4617 0: abc
4618
4619/ab{0,1}c/
4620    abc
4621 0: abc
4622
4623/^abc$/
4624    abc
4625 0: abc
4626    *** Failers
4627No match
4628    abbbbc
4629No match
4630    abcc
4631No match
4632
4633/^abc/
4634    abcc
4635 0: abc
4636
4637/^abc$/
4638
4639/abc$/
4640    aabc
4641 0: abc
4642    *** Failers
4643No match
4644    aabc
4645 0: abc
4646    aabcd
4647No match
4648
4649/^/
4650    abc
4651 0:
4652
4653/$/
4654    abc
4655 0:
4656
4657/a.c/
4658    abc
4659 0: abc
4660    axc
4661 0: axc
4662
4663/a.*c/
4664    axyzc
4665 0: axyzc
4666
4667/a[bc]d/
4668    abd
4669 0: abd
4670    *** Failers
4671No match
4672    axyzd
4673No match
4674    abc
4675No match
4676
4677/a[b-d]e/
4678    ace
4679 0: ace
4680
4681/a[b-d]/
4682    aac
4683 0: ac
4684
4685/a[-b]/
4686    a-
4687 0: a-
4688
4689/a[b-]/
4690    a-
4691 0: a-
4692
4693/a]/
4694    a]
4695 0: a]
4696
4697/a[]]b/
4698    a]b
4699 0: a]b
4700
4701/a[^bc]d/
4702    aed
4703 0: aed
4704    *** Failers
4705No match
4706    abd
4707No match
4708    abd
4709No match
4710
4711/a[^-b]c/
4712    adc
4713 0: adc
4714
4715/a[^]b]c/
4716    adc
4717 0: adc
4718    *** Failers
4719No match
4720    a-c
4721 0: a-c
4722    a]c
4723No match
4724
4725/\ba\b/
4726    a-
4727 0: a
4728    -a
4729 0: a
4730    -a-
4731 0: a
4732
4733/\by\b/
4734    *** Failers
4735No match
4736    xy
4737No match
4738    yz
4739No match
4740    xyz
4741No match
4742
4743/\Ba\B/
4744    *** Failers
4745 0: a
4746    a-
4747No match
4748    -a
4749No match
4750    -a-
4751No match
4752
4753/\By\b/
4754    xy
4755 0: y
4756
4757/\by\B/
4758    yz
4759 0: y
4760
4761/\By\B/
4762    xyz
4763 0: y
4764
4765/\w/
4766    a
4767 0: a
4768
4769/\W/
4770    -
4771 0: -
4772    *** Failers
4773 0: *
4774    -
4775 0: -
4776    a
4777No match
4778
4779/a\sb/
4780    a b
4781 0: a b
4782
4783/a\Sb/
4784    a-b
4785 0: a-b
4786    *** Failers
4787No match
4788    a-b
4789 0: a-b
4790    a b
4791No match
4792
4793/\d/
4794    1
4795 0: 1
4796
4797/\D/
4798    -
4799 0: -
4800    *** Failers
4801 0: *
4802    -
4803 0: -
4804    1
4805No match
4806
4807/[\w]/
4808    a
4809 0: a
4810
4811/[\W]/
4812    -
4813 0: -
4814    *** Failers
4815 0: *
4816    -
4817 0: -
4818    a
4819No match
4820
4821/a[\s]b/
4822    a b
4823 0: a b
4824
4825/a[\S]b/
4826    a-b
4827 0: a-b
4828    *** Failers
4829No match
4830    a-b
4831 0: a-b
4832    a b
4833No match
4834
4835/[\d]/
4836    1
4837 0: 1
4838
4839/[\D]/
4840    -
4841 0: -
4842    *** Failers
4843 0: *
4844    -
4845 0: -
4846    1
4847No match
4848
4849/ab|cd/
4850    abc
4851 0: ab
4852    abcd
4853 0: ab
4854
4855/()ef/
4856    def
4857 0: ef
4858
4859/$b/
4860
4861/a\(b/
4862    a(b
4863 0: a(b
4864
4865/a\(*b/
4866    ab
4867 0: ab
4868    a((b
4869 0: a((b
4870
4871/a\\b/
4872    a\b
4873No match
4874
4875/((a))/
4876    abc
4877 0: a
4878
4879/(a)b(c)/
4880    abc
4881 0: abc
4882
4883/a+b+c/
4884    aabbabc
4885 0: abc
4886
4887/a{1,}b{1,}c/
4888    aabbabc
4889 0: abc
4890
4891/a.+?c/
4892    abcabc
4893 0: abcabc
4894 1: abc
4895
4896/(a+|b)*/
4897    ab
4898 0: ab
4899 1: a
4900 2:
4901
4902/(a+|b){0,}/
4903    ab
4904 0: ab
4905 1: a
4906 2:
4907
4908/(a+|b)+/
4909    ab
4910 0: ab
4911 1: a
4912
4913/(a+|b){1,}/
4914    ab
4915 0: ab
4916 1: a
4917
4918/(a+|b)?/
4919    ab
4920 0: a
4921 1:
4922
4923/(a+|b){0,1}/
4924    ab
4925 0: a
4926 1:
4927
4928/[^ab]*/
4929    cde
4930 0: cde
4931 1: cd
4932 2: c
4933 3:
4934
4935/abc/
4936    *** Failers
4937No match
4938    b
4939No match
4940
4941
4942/a*/
4943
4944
4945/([abc])*d/
4946    abbbcd
4947 0: abbbcd
4948
4949/([abc])*bcd/
4950    abcd
4951 0: abcd
4952
4953/a|b|c|d|e/
4954    e
4955 0: e
4956
4957/(a|b|c|d|e)f/
4958    ef
4959 0: ef
4960
4961/abcd*efg/
4962    abcdefg
4963 0: abcdefg
4964
4965/ab*/
4966    xabyabbbz
4967 0: ab
4968 1: a
4969    xayabbbz
4970 0: a
4971
4972/(ab|cd)e/
4973    abcde
4974 0: cde
4975
4976/[abhgefdc]ij/
4977    hij
4978 0: hij
4979
4980/^(ab|cd)e/
4981
4982/(abc|)ef/
4983    abcdef
4984 0: ef
4985
4986/(a|b)c*d/
4987    abcd
4988 0: bcd
4989
4990/(ab|ab*)bc/
4991    abc
4992 0: abc
4993
4994/a([bc]*)c*/
4995    abc
4996 0: abc
4997 1: ab
4998 2: a
4999
5000/a([bc]*)(c*d)/
5001    abcd
5002 0: abcd
5003
5004/a([bc]+)(c*d)/
5005    abcd
5006 0: abcd
5007
5008/a([bc]*)(c+d)/
5009    abcd
5010 0: abcd
5011
5012/a[bcd]*dcdcde/
5013    adcdcde
5014 0: adcdcde
5015
5016/a[bcd]+dcdcde/
5017    *** Failers
5018No match
5019    abcde
5020No match
5021    adcdcde
5022No match
5023
5024/(ab|a)b*c/
5025    abc
5026 0: abc
5027
5028/((a)(b)c)(d)/
5029    abcd
5030 0: abcd
5031
5032/[a-zA-Z_][a-zA-Z0-9_]*/
5033    alpha
5034 0: alpha
5035 1: alph
5036 2: alp
5037 3: al
5038 4: a
5039
5040/^a(bc+|b[eh])g|.h$/
5041    abh
5042 0: bh
5043
5044/(bc+d$|ef*g.|h?i(j|k))/
5045    effgz
5046 0: effgz
5047    ij
5048 0: ij
5049    reffgz
5050 0: effgz
5051    *** Failers
5052No match
5053    effg
5054No match
5055    bcdd
5056No match
5057
5058/((((((((((a))))))))))/
5059    a
5060 0: a
5061
5062/(((((((((a)))))))))/
5063    a
5064 0: a
5065
5066/multiple words of text/
5067    *** Failers
5068No match
5069    aa
5070No match
5071    uh-uh
5072No match
5073
5074/multiple words/
5075    multiple words, yeah
5076 0: multiple words
5077
5078/(.*)c(.*)/
5079    abcde
5080 0: abcde
5081 1: abcd
5082 2: abc
5083
5084/\((.*), (.*)\)/
5085    (a, b)
5086 0: (a, b)
5087
5088/[k]/
5089
5090/abcd/
5091    abcd
5092 0: abcd
5093
5094/a(bc)d/
5095    abcd
5096 0: abcd
5097
5098/a[-]?c/
5099    ac
5100 0: ac
5101
5102/abc/i
5103    ABC
5104 0: ABC
5105    XABCY
5106 0: ABC
5107    ABABC
5108 0: ABC
5109    *** Failers
5110No match
5111    aaxabxbaxbbx
5112No match
5113    XBC
5114No match
5115    AXC
5116No match
5117    ABX
5118No match
5119
5120/ab*c/i
5121    ABC
5122 0: ABC
5123
5124/ab*bc/i
5125    ABC
5126 0: ABC
5127    ABBC
5128 0: ABBC
5129
5130/ab*?bc/i
5131    ABBBBC
5132 0: ABBBBC
5133
5134/ab{0,}?bc/i
5135    ABBBBC
5136 0: ABBBBC
5137
5138/ab+?bc/i
5139    ABBC
5140 0: ABBC
5141
5142/ab+bc/i
5143    *** Failers
5144No match
5145    ABC
5146No match
5147    ABQ
5148No match
5149
5150/ab{1,}bc/i
5151
5152/ab+bc/i
5153    ABBBBC
5154 0: ABBBBC
5155
5156/ab{1,}?bc/i
5157    ABBBBC
5158 0: ABBBBC
5159
5160/ab{1,3}?bc/i
5161    ABBBBC
5162 0: ABBBBC
5163
5164/ab{3,4}?bc/i
5165    ABBBBC
5166 0: ABBBBC
5167
5168/ab{4,5}?bc/i
5169    *** Failers
5170No match
5171    ABQ
5172No match
5173    ABBBBC
5174No match
5175
5176/ab??bc/i
5177    ABBC
5178 0: ABBC
5179    ABC
5180 0: ABC
5181
5182/ab{0,1}?bc/i
5183    ABC
5184 0: ABC
5185
5186/ab??bc/i
5187
5188/ab??c/i
5189    ABC
5190 0: ABC
5191
5192/ab{0,1}?c/i
5193    ABC
5194 0: ABC
5195
5196/^abc$/i
5197    ABC
5198 0: ABC
5199    *** Failers
5200No match
5201    ABBBBC
5202No match
5203    ABCC
5204No match
5205
5206/^abc/i
5207    ABCC
5208 0: ABC
5209
5210/^abc$/i
5211
5212/abc$/i
5213    AABC
5214 0: ABC
5215
5216/^/i
5217    ABC
5218 0:
5219
5220/$/i
5221    ABC
5222 0:
5223
5224/a.c/i
5225    ABC
5226 0: ABC
5227    AXC
5228 0: AXC
5229
5230/a.*?c/i
5231    AXYZC
5232 0: AXYZC
5233
5234/a.*c/i
5235    *** Failers
5236No match
5237    AABC
5238 0: AABC
5239    AXYZD
5240No match
5241
5242/a[bc]d/i
5243    ABD
5244 0: ABD
5245
5246/a[b-d]e/i
5247    ACE
5248 0: ACE
5249    *** Failers
5250No match
5251    ABC
5252No match
5253    ABD
5254No match
5255
5256/a[b-d]/i
5257    AAC
5258 0: AC
5259
5260/a[-b]/i
5261    A-
5262 0: A-
5263
5264/a[b-]/i
5265    A-
5266 0: A-
5267
5268/a]/i
5269    A]
5270 0: A]
5271
5272/a[]]b/i
5273    A]B
5274 0: A]B
5275
5276/a[^bc]d/i
5277    AED
5278 0: AED
5279
5280/a[^-b]c/i
5281    ADC
5282 0: ADC
5283    *** Failers
5284No match
5285    ABD
5286No match
5287    A-C
5288No match
5289
5290/a[^]b]c/i
5291    ADC
5292 0: ADC
5293
5294/ab|cd/i
5295    ABC
5296 0: AB
5297    ABCD
5298 0: AB
5299
5300/()ef/i
5301    DEF
5302 0: EF
5303
5304/$b/i
5305    *** Failers
5306No match
5307    A]C
5308No match
5309    B
5310No match
5311
5312/a\(b/i
5313    A(B
5314 0: A(B
5315
5316/a\(*b/i
5317    AB
5318 0: AB
5319    A((B
5320 0: A((B
5321
5322/a\\b/i
5323    A\B
5324No match
5325
5326/((a))/i
5327    ABC
5328 0: A
5329
5330/(a)b(c)/i
5331    ABC
5332 0: ABC
5333
5334/a+b+c/i
5335    AABBABC
5336 0: ABC
5337
5338/a{1,}b{1,}c/i
5339    AABBABC
5340 0: ABC
5341
5342/a.+?c/i
5343    ABCABC
5344 0: ABCABC
5345 1: ABC
5346
5347/a.*?c/i
5348    ABCABC
5349 0: ABCABC
5350 1: ABC
5351
5352/a.{0,5}?c/i
5353    ABCABC
5354 0: ABCABC
5355 1: ABC
5356
5357/(a+|b)*/i
5358    AB
5359 0: AB
5360 1: A
5361 2:
5362
5363/(a+|b){0,}/i
5364    AB
5365 0: AB
5366 1: A
5367 2:
5368
5369/(a+|b)+/i
5370    AB
5371 0: AB
5372 1: A
5373
5374/(a+|b){1,}/i
5375    AB
5376 0: AB
5377 1: A
5378
5379/(a+|b)?/i
5380    AB
5381 0: A
5382 1:
5383
5384/(a+|b){0,1}/i
5385    AB
5386 0: A
5387 1:
5388
5389/(a+|b){0,1}?/i
5390    AB
5391 0: A
5392 1:
5393
5394/[^ab]*/i
5395    CDE
5396 0: CDE
5397 1: CD
5398 2: C
5399 3:
5400
5401/abc/i
5402
5403/a*/i
5404
5405
5406/([abc])*d/i
5407    ABBBCD
5408 0: ABBBCD
5409
5410/([abc])*bcd/i
5411    ABCD
5412 0: ABCD
5413
5414/a|b|c|d|e/i
5415    E
5416 0: E
5417
5418/(a|b|c|d|e)f/i
5419    EF
5420 0: EF
5421
5422/abcd*efg/i
5423    ABCDEFG
5424 0: ABCDEFG
5425
5426/ab*/i
5427    XABYABBBZ
5428 0: AB
5429 1: A
5430    XAYABBBZ
5431 0: A
5432
5433/(ab|cd)e/i
5434    ABCDE
5435 0: CDE
5436
5437/[abhgefdc]ij/i
5438    HIJ
5439 0: HIJ
5440
5441/^(ab|cd)e/i
5442    ABCDE
5443No match
5444
5445/(abc|)ef/i
5446    ABCDEF
5447 0: EF
5448
5449/(a|b)c*d/i
5450    ABCD
5451 0: BCD
5452
5453/(ab|ab*)bc/i
5454    ABC
5455 0: ABC
5456
5457/a([bc]*)c*/i
5458    ABC
5459 0: ABC
5460 1: AB
5461 2: A
5462
5463/a([bc]*)(c*d)/i
5464    ABCD
5465 0: ABCD
5466
5467/a([bc]+)(c*d)/i
5468    ABCD
5469 0: ABCD
5470
5471/a([bc]*)(c+d)/i
5472    ABCD
5473 0: ABCD
5474
5475/a[bcd]*dcdcde/i
5476    ADCDCDE
5477 0: ADCDCDE
5478
5479/a[bcd]+dcdcde/i
5480
5481/(ab|a)b*c/i
5482    ABC
5483 0: ABC
5484
5485/((a)(b)c)(d)/i
5486    ABCD
5487 0: ABCD
5488
5489/[a-zA-Z_][a-zA-Z0-9_]*/i
5490    ALPHA
5491 0: ALPHA
5492 1: ALPH
5493 2: ALP
5494 3: AL
5495 4: A
5496
5497/^a(bc+|b[eh])g|.h$/i
5498    ABH
5499 0: BH
5500
5501/(bc+d$|ef*g.|h?i(j|k))/i
5502    EFFGZ
5503 0: EFFGZ
5504    IJ
5505 0: IJ
5506    REFFGZ
5507 0: EFFGZ
5508    *** Failers
5509No match
5510    ADCDCDE
5511No match
5512    EFFG
5513No match
5514    BCDD
5515No match
5516
5517/((((((((((a))))))))))/i
5518    A
5519 0: A
5520
5521/(((((((((a)))))))))/i
5522    A
5523 0: A
5524
5525/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
5526    A
5527 0: A
5528
5529/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
5530    C
5531 0: C
5532
5533/multiple words of text/i
5534    *** Failers
5535No match
5536    AA
5537No match
5538    UH-UH
5539No match
5540
5541/multiple words/i
5542    MULTIPLE WORDS, YEAH
5543 0: MULTIPLE WORDS
5544
5545/(.*)c(.*)/i
5546    ABCDE
5547 0: ABCDE
5548 1: ABCD
5549 2: ABC
5550
5551/\((.*), (.*)\)/i
5552    (A, B)
5553 0: (A, B)
5554
5555/[k]/i
5556
5557/abcd/i
5558    ABCD
5559 0: ABCD
5560
5561/a(bc)d/i
5562    ABCD
5563 0: ABCD
5564
5565/a[-]?c/i
5566    AC
5567 0: AC
5568
5569/a(?!b)./
5570    abad
5571 0: ad
5572
5573/a(?=d)./
5574    abad
5575 0: ad
5576
5577/a(?=c|d)./
5578    abad
5579 0: ad
5580
5581/a(?:b|c|d)(.)/
5582    ace
5583 0: ace
5584
5585/a(?:b|c|d)*(.)/
5586    ace
5587 0: ace
5588 1: ac
5589
5590/a(?:b|c|d)+?(.)/
5591    ace
5592 0: ace
5593    acdbcdbe
5594 0: acdbcdbe
5595 1: acdbcdb
5596 2: acdbcd
5597 3: acdbc
5598 4: acdb
5599 5: acd
5600
5601/a(?:b|c|d)+(.)/
5602    acdbcdbe
5603 0: acdbcdbe
5604 1: acdbcdb
5605 2: acdbcd
5606 3: acdbc
5607 4: acdb
5608 5: acd
5609
5610/a(?:b|c|d){2}(.)/
5611    acdbcdbe
5612 0: acdb
5613
5614/a(?:b|c|d){4,5}(.)/
5615    acdbcdbe
5616 0: acdbcdb
5617 1: acdbcd
5618
5619/a(?:b|c|d){4,5}?(.)/
5620    acdbcdbe
5621 0: acdbcdb
5622 1: acdbcd
5623
5624/((foo)|(bar))*/
5625    foobar
5626 0: foobar
5627 1: foo
5628 2:
5629
5630/a(?:b|c|d){6,7}(.)/
5631    acdbcdbe
5632 0: acdbcdbe
5633
5634/a(?:b|c|d){6,7}?(.)/
5635    acdbcdbe
5636 0: acdbcdbe
5637
5638/a(?:b|c|d){5,6}(.)/
5639    acdbcdbe
5640 0: acdbcdbe
5641 1: acdbcdb
5642
5643/a(?:b|c|d){5,6}?(.)/
5644    acdbcdbe
5645 0: acdbcdbe
5646 1: acdbcdb
5647
5648/a(?:b|c|d){5,7}(.)/
5649    acdbcdbe
5650 0: acdbcdbe
5651 1: acdbcdb
5652
5653/a(?:b|c|d){5,7}?(.)/
5654    acdbcdbe
5655 0: acdbcdbe
5656 1: acdbcdb
5657
5658/a(?:b|(c|e){1,2}?|d)+?(.)/
5659    ace
5660 0: ace
5661
5662/^(.+)?B/
5663    AB
5664 0: AB
5665
5666/^([^a-z])|(\^)$/
5667    .
5668 0: .
5669
5670/^[<>]&/
5671    <&OUT
5672 0: <&
5673
5674/(?:(f)(o)(o)|(b)(a)(r))*/
5675    foobar
5676 0: foobar
5677 1: foo
5678 2:
5679
5680/(?<=a)b/
5681    ab
5682 0: b
5683    *** Failers
5684No match
5685    cb
5686No match
5687    b
5688No match
5689
5690/(?<!c)b/
5691    ab
5692 0: b
5693    b
5694 0: b
5695    b
5696 0: b
5697
5698/(?:..)*a/
5699    aba
5700 0: aba
5701 1: a
5702
5703/(?:..)*?a/
5704    aba
5705 0: aba
5706 1: a
5707
5708/^(){3,5}/
5709    abc
5710 0:
5711
5712/^(a+)*ax/
5713    aax
5714 0: aax
5715
5716/^((a|b)+)*ax/
5717    aax
5718 0: aax
5719
5720/^((a|bc)+)*ax/
5721    aax
5722 0: aax
5723
5724/(a|x)*ab/
5725    cab
5726 0: ab
5727
5728/(a)*ab/
5729    cab
5730 0: ab
5731
5732/(?:(?i)a)b/
5733    ab
5734 0: ab
5735
5736/((?i)a)b/
5737    ab
5738 0: ab
5739
5740/(?:(?i)a)b/
5741    Ab
5742 0: Ab
5743
5744/((?i)a)b/
5745    Ab
5746 0: Ab
5747
5748/(?:(?i)a)b/
5749    *** Failers
5750No match
5751    cb
5752No match
5753    aB
5754No match
5755
5756/((?i)a)b/
5757
5758/(?i:a)b/
5759    ab
5760 0: ab
5761
5762/((?i:a))b/
5763    ab
5764 0: ab
5765
5766/(?i:a)b/
5767    Ab
5768 0: Ab
5769
5770/((?i:a))b/
5771    Ab
5772 0: Ab
5773
5774/(?i:a)b/
5775    *** Failers
5776No match
5777    aB
5778No match
5779    aB
5780No match
5781
5782/((?i:a))b/
5783
5784/(?:(?-i)a)b/i
5785    ab
5786 0: ab
5787
5788/((?-i)a)b/i
5789    ab
5790 0: ab
5791
5792/(?:(?-i)a)b/i
5793    aB
5794 0: aB
5795
5796/((?-i)a)b/i
5797    aB
5798 0: aB
5799
5800/(?:(?-i)a)b/i
5801    *** Failers
5802No match
5803    aB
5804 0: aB
5805    Ab
5806No match
5807
5808/((?-i)a)b/i
5809
5810/(?:(?-i)a)b/i
5811    aB
5812 0: aB
5813
5814/((?-i)a)b/i
5815    aB
5816 0: aB
5817
5818/(?:(?-i)a)b/i
5819    *** Failers
5820No match
5821    Ab
5822No match
5823    AB
5824No match
5825
5826/((?-i)a)b/i
5827
5828/(?-i:a)b/i
5829    ab
5830 0: ab
5831
5832/((?-i:a))b/i
5833    ab
5834 0: ab
5835
5836/(?-i:a)b/i
5837    aB
5838 0: aB
5839
5840/((?-i:a))b/i
5841    aB
5842 0: aB
5843
5844/(?-i:a)b/i
5845    *** Failers
5846No match
5847    AB
5848No match
5849    Ab
5850No match
5851
5852/((?-i:a))b/i
5853
5854/(?-i:a)b/i
5855    aB
5856 0: aB
5857
5858/((?-i:a))b/i
5859    aB
5860 0: aB
5861
5862/(?-i:a)b/i
5863    *** Failers
5864No match
5865    Ab
5866No match
5867    AB
5868No match
5869
5870/((?-i:a))b/i
5871
5872/((?-i:a.))b/i
5873    *** Failers
5874No match
5875    AB
5876No match
5877    a\nB
5878No match
5879
5880/((?s-i:a.))b/i
5881    a\nB
5882 0: a\x0aB
5883
5884/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
5885    cabbbb
5886 0: cabbbb
5887
5888/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
5889    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
5890 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
5891
5892/foo\w*\d{4}baz/
5893    foobar1234baz
5894 0: foobar1234baz
5895
5896/x(~~)*(?:(?:F)?)?/
5897    x~~
5898 0: x~~
5899 1: x
5900
5901/^a(?#xxx){3}c/
5902    aaac
5903 0: aaac
5904
5905/^a (?#xxx) (?#yyy) {3}c/x
5906    aaac
5907 0: aaac
5908
5909/(?<![cd])b/
5910    *** Failers
5911No match
5912    B\nB
5913No match
5914    dbcb
5915No match
5916
5917/(?<![cd])[ab]/
5918    dbaacb
5919 0: a
5920
5921/(?<!(c|d))b/
5922
5923/(?<!(c|d))[ab]/
5924    dbaacb
5925 0: a
5926
5927/(?<!cd)[ab]/
5928    cdaccb
5929 0: b
5930
5931/^(?:a?b?)*$/
5932    *** Failers
5933No match
5934    dbcb
5935No match
5936    a--
5937No match
5938
5939/((?s)^a(.))((?m)^b$)/
5940    a\nb\nc\n
5941 0: a\x0ab
5942
5943/((?m)^b$)/
5944    a\nb\nc\n
5945 0: b
5946
5947/(?m)^b/
5948    a\nb\n
5949 0: b
5950
5951/(?m)^(b)/
5952    a\nb\n
5953 0: b
5954
5955/((?m)^b)/
5956    a\nb\n
5957 0: b
5958
5959/\n((?m)^b)/
5960    a\nb\n
5961 0: \x0ab
5962
5963/((?s).)c(?!.)/
5964    a\nb\nc\n
5965 0: \x0ac
5966    a\nb\nc\n
5967 0: \x0ac
5968
5969/((?s)b.)c(?!.)/
5970    a\nb\nc\n
5971 0: b\x0ac
5972    a\nb\nc\n
5973 0: b\x0ac
5974
5975/^b/
5976
5977/()^b/
5978    *** Failers
5979No match
5980    a\nb\nc\n
5981No match
5982    a\nb\nc\n
5983No match
5984
5985/((?m)^b)/
5986    a\nb\nc\n
5987 0: b
5988
5989/(?(?!a)a|b)/
5990
5991/(?(?!a)b|a)/
5992    a
5993 0: a
5994
5995/(?(?=a)b|a)/
5996    *** Failers
5997No match
5998    a
5999No match
6000    a
6001No match
6002
6003/(?(?=a)a|b)/
6004    a
6005 0: a
6006
6007/(\w+:)+/
6008    one:
6009 0: one:
6010
6011/$(?<=^(a))/
6012    a
6013 0:
6014
6015/([\w:]+::)?(\w+)$/
6016    abcd
6017 0: abcd
6018    xy:z:::abcd
6019 0: xy:z:::abcd
6020
6021/^[^bcd]*(c+)/
6022    aexycd
6023 0: aexyc
6024
6025/(a*)b+/
6026    caab
6027 0: aab
6028
6029/([\w:]+::)?(\w+)$/
6030    abcd
6031 0: abcd
6032    xy:z:::abcd
6033 0: xy:z:::abcd
6034    *** Failers
6035 0: Failers
6036    abcd:
6037No match
6038    abcd:
6039No match
6040
6041/^[^bcd]*(c+)/
6042    aexycd
6043 0: aexyc
6044
6045/(>a+)ab/
6046
6047/(?>a+)b/
6048    aaab
6049 0: aaab
6050
6051/([[:]+)/
6052    a:[b]:
6053 0: :[
6054 1: :
6055
6056/([[=]+)/
6057    a=[b]=
6058 0: =[
6059 1: =
6060
6061/([[.]+)/
6062    a.[b].
6063 0: .[
6064 1: .
6065
6066/((?>a+)b)/
6067    aaab
6068 0: aaab
6069
6070/(?>(a+))b/
6071    aaab
6072 0: aaab
6073
6074/((?>[^()]+)|\([^()]*\))+/
6075    ((abc(ade)ufh()()x
6076 0: abc(ade)ufh()()x
6077 1: abc(ade)ufh()()
6078 2: abc(ade)ufh()
6079 3: abc(ade)ufh
6080 4: abc(ade)
6081 5: abc
6082
6083/a\Z/
6084    *** Failers
6085No match
6086    aaab
6087No match
6088    a\nb\n
6089No match
6090
6091/b\Z/
6092    a\nb\n
6093 0: b
6094
6095/b\z/
6096
6097/b\Z/
6098    a\nb
6099 0: b
6100
6101/b\z/
6102    a\nb
6103 0: b
6104    *** Failers
6105No match
6106
6107/(?>.*)(?<=(abcd|wxyz))/
6108    alphabetabcd
6109 0: alphabetabcd
6110    endingwxyz
6111 0: endingwxyz
6112    *** Failers
6113No match
6114    a rather long string that doesn't end with one of them
6115No match
6116
6117/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
6118    word cat dog elephant mussel cow horse canary baboon snake shark otherword
6119 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
6120    word cat dog elephant mussel cow horse canary baboon snake shark
6121No match
6122
6123/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
6124    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
6125No match
6126
6127/(?<=\d{3}(?!999))foo/
6128    999foo
6129 0: foo
6130    123999foo
6131 0: foo
6132    *** Failers
6133No match
6134    123abcfoo
6135No match
6136
6137/(?<=(?!...999)\d{3})foo/
6138    999foo
6139 0: foo
6140    123999foo
6141 0: foo
6142    *** Failers
6143No match
6144    123abcfoo
6145No match
6146
6147/(?<=\d{3}(?!999)...)foo/
6148    123abcfoo
6149 0: foo
6150    123456foo
6151 0: foo
6152    *** Failers
6153No match
6154    123999foo
6155No match
6156
6157/(?<=\d{3}...)(?<!999)foo/
6158    123abcfoo
6159 0: foo
6160    123456foo
6161 0: foo
6162    *** Failers
6163No match
6164    123999foo
6165No match
6166
6167/((Z)+|A)*/
6168    ZABCDEFG
6169 0: ZA
6170 1: Z
6171 2:
6172
6173/(Z()|A)*/
6174    ZABCDEFG
6175 0: ZA
6176 1: Z
6177 2:
6178
6179/(Z(())|A)*/
6180    ZABCDEFG
6181 0: ZA
6182 1: Z
6183 2:
6184
6185/((?>Z)+|A)*/
6186    ZABCDEFG
6187 0: ZA
6188 1: Z
6189 2:
6190
6191/((?>)+|A)*/
6192    ZABCDEFG
6193 0:
6194
6195/a*/g
6196    abbab
6197 0: a
6198 1:
6199 0:
6200 0:
6201 0: a
6202 1:
6203 0:
6204 0:
6205
6206/^[a-\d]/
6207    abcde
6208 0: a
6209    -things
6210 0: -
6211    0digit
6212 0: 0
6213    *** Failers
6214No match
6215    bcdef
6216No match
6217
6218/^[\d-a]/
6219    abcde
6220 0: a
6221    -things
6222 0: -
6223    0digit
6224 0: 0
6225    *** Failers
6226No match
6227    bcdef
6228No match
6229
6230/[[:space:]]+/
6231    > \x09\x0a\x0c\x0d\x0b<
6232 0:  \x09\x0a\x0c\x0d\x0b
6233 1:  \x09\x0a\x0c\x0d
6234 2:  \x09\x0a\x0c
6235 3:  \x09\x0a
6236 4:  \x09
6237 5:
6238
6239/[[:blank:]]+/
6240    > \x09\x0a\x0c\x0d\x0b<
6241 0:  \x09
6242 1:
6243
6244/[\s]+/
6245    > \x09\x0a\x0c\x0d\x0b<
6246 0:  \x09\x0a\x0c\x0d
6247 1:  \x09\x0a\x0c
6248 2:  \x09\x0a
6249 3:  \x09
6250 4:
6251
6252/\s+/
6253    > \x09\x0a\x0c\x0d\x0b<
6254 0:  \x09\x0a\x0c\x0d
6255 1:  \x09\x0a\x0c
6256 2:  \x09\x0a
6257 3:  \x09
6258 4:
6259
6260/ab/x
6261    ab
6262No match
6263
6264/(?!\A)x/m
6265  a\nxb\n
6266 0: x
6267
6268/(?!^)x/m
6269  a\nxb\n
6270No match
6271
6272/abc\Qabc\Eabc/
6273    abcabcabc
6274 0: abcabcabc
6275
6276/abc\Q(*+|\Eabc/
6277    abc(*+|abc
6278 0: abc(*+|abc
6279
6280/   abc\Q abc\Eabc/x
6281    abc abcabc
6282 0: abc abcabc
6283    *** Failers
6284No match
6285    abcabcabc
6286No match
6287
6288/abc#comment
6289    \Q#not comment
6290    literal\E/x
6291    abc#not comment\n    literal
6292 0: abc#not comment\x0a    literal
6293
6294/abc#comment
6295    \Q#not comment
6296    literal/x
6297    abc#not comment\n    literal
6298 0: abc#not comment\x0a    literal
6299
6300/abc#comment
6301    \Q#not comment
6302    literal\E #more comment
6303    /x
6304    abc#not comment\n    literal
6305 0: abc#not comment\x0a    literal
6306
6307/abc#comment
6308    \Q#not comment
6309    literal\E #more comment/x
6310    abc#not comment\n    literal
6311 0: abc#not comment\x0a    literal
6312
6313/\Qabc\$xyz\E/
6314    abc\\\$xyz
6315 0: abc\$xyz
6316
6317/\Qabc\E\$\Qxyz\E/
6318    abc\$xyz
6319 0: abc$xyz
6320
6321/\Gabc/
6322    abc
6323 0: abc
6324    *** Failers
6325No match
6326    xyzabc
6327No match
6328
6329/\Gabc./g
6330    abc1abc2xyzabc3
6331 0: abc1
6332 0: abc2
6333
6334/abc./g
6335    abc1abc2xyzabc3
6336 0: abc1
6337 0: abc2
6338 0: abc3
6339
6340/a(?x: b c )d/
6341    XabcdY
6342 0: abcd
6343    *** Failers
6344No match
6345    Xa b c d Y
6346No match
6347
6348/((?x)x y z | a b c)/
6349    XabcY
6350 0: abc
6351    AxyzB
6352 0: xyz
6353
6354/(?i)AB(?-i)C/
6355    XabCY
6356 0: abC
6357    *** Failers
6358No match
6359    XabcY
6360No match
6361
6362/((?i)AB(?-i)C|D)E/
6363    abCE
6364 0: abCE
6365    DE
6366 0: DE
6367    *** Failers
6368No match
6369    abcE
6370No match
6371    abCe
6372No match
6373    dE
6374No match
6375    De
6376No match
6377
6378/[z\Qa-d]\E]/
6379    z
6380 0: z
6381    a
6382 0: a
6383    -
6384 0: -
6385    d
6386 0: d
6387    ]
6388 0: ]
6389    *** Failers
6390 0: a
6391    b
6392No match
6393
6394/[\z\C]/
6395    z
6396 0: z
6397    C
6398 0: C
6399
6400/\M/
6401    M
6402 0: M
6403
6404/(a+)*b/
6405    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6406No match
6407
6408/(?i)reg(?:ul(?:[a�]|ae)r|ex)/
6409    REGular
6410 0: REGular
6411    regulaer
6412 0: regulaer
6413    Regex
6414 0: Regex
6415    regul�r
6416 0: regul\xe4r
6417
6418/����[�-��-�]+/
6419    �����
6420 0: \xc5\xe6\xe5\xe4\xe0
6421    �����
6422 0: \xc5\xe6\xe5\xe4\xff
6423    �����
6424 0: \xc5\xe6\xe5\xe4\xc0
6425    �����
6426 0: \xc5\xe6\xe5\xe4\xdf
6427
6428/(?<=Z)X./
6429    \x84XAZXB
6430 0: XB
6431
6432/^(?(2)a|(1)(2))+$/
6433    123a
6434Error -17
6435
6436/(?<=a|bbbb)c/
6437    ac
6438 0: c
6439    bbbbc
6440 0: c
6441
6442/abc/>testsavedregex
6443Compiled regex written to testsavedregex
6444<testsavedregex
6445Compiled regex loaded from testsavedregex
6446No study data
6447    abc
6448 0: abc
6449    *** Failers
6450No match
6451    bca
6452No match
6453
6454/abc/F>testsavedregex
6455Compiled regex written to testsavedregex
6456<testsavedregex
6457Compiled regex (byte-inverted) loaded from testsavedregex
6458No study data
6459    abc
6460 0: abc
6461    *** Failers
6462No match
6463    bca
6464No match
6465
6466/(a|b)/S>testsavedregex
6467Compiled regex written to testsavedregex
6468Study data written to testsavedregex
6469<testsavedregex
6470Compiled regex loaded from testsavedregex
6471Study data loaded from testsavedregex
6472    abc
6473 0: a
6474    *** Failers
6475 0: a
6476    def
6477No match
6478
6479/(a|b)/SF>testsavedregex
6480Compiled regex written to testsavedregex
6481Study data written to testsavedregex
6482<testsavedregex
6483Compiled regex (byte-inverted) loaded from testsavedregex
6484Study data loaded from testsavedregex
6485    abc
6486 0: a
6487    *** Failers
6488 0: a
6489    def
6490No match
6491
6492/line\nbreak/
6493    this is a line\nbreak
6494 0: line\x0abreak
6495    line one\nthis is a line\nbreak in the second line
6496 0: line\x0abreak
6497
6498/line\nbreak/f
6499    this is a line\nbreak
6500 0: line\x0abreak
6501    ** Failers
6502No match
6503    line one\nthis is a line\nbreak in the second line
6504No match
6505
6506/line\nbreak/mf
6507    this is a line\nbreak
6508 0: line\x0abreak
6509    ** Failers
6510No match
6511    line one\nthis is a line\nbreak in the second line
6512No match
6513
6514/1234/
6515    123\P
6516Partial match: 123
6517    a4\P\R
6518No match
6519
6520/1234/
6521    123\P
6522Partial match: 123
6523    4\P\R
6524 0: 4
6525
6526/^/mg
6527    a\nb\nc\n
6528 0:
6529 0:
6530 0:
6531    \
6532 0:
6533
6534/(?<=C\n)^/mg
6535    A\nC\nC\n
6536 0:
6537
6538/(?s)A?B/
6539    AB
6540 0: AB
6541    aB
6542 0: B
6543
6544/(?s)A*B/
6545    AB
6546 0: AB
6547    aB
6548 0: B
6549
6550/(?m)A?B/
6551    AB
6552 0: AB
6553    aB
6554 0: B
6555
6556/(?m)A*B/
6557    AB
6558 0: AB
6559    aB
6560 0: B
6561
6562/Content-Type\x3A[^\r\n]{6,}/
6563    Content-Type:xxxxxyyy
6564 0: Content-Type:xxxxxyyy
6565 1: Content-Type:xxxxxyy
6566 2: Content-Type:xxxxxy
6567
6568/Content-Type\x3A[^\r\n]{6,}z/
6569    Content-Type:xxxxxyyyz
6570 0: Content-Type:xxxxxyyyz
6571
6572/Content-Type\x3A[^a]{6,}/
6573    Content-Type:xxxyyy
6574 0: Content-Type:xxxyyy
6575
6576/Content-Type\x3A[^a]{6,}z/
6577    Content-Type:xxxyyyz
6578 0: Content-Type:xxxyyyz
6579
6580/^abc/m
6581    xyz\nabc
6582 0: abc
6583    xyz\nabc\<lf>
6584 0: abc
6585    xyz\r\nabc\<lf>
6586 0: abc
6587    xyz\rabc\<cr>
6588 0: abc
6589    xyz\r\nabc\<crlf>
6590 0: abc
6591    ** Failers
6592No match
6593    xyz\nabc\<cr>
6594No match
6595    xyz\r\nabc\<cr>
6596No match
6597    xyz\nabc\<crlf>
6598No match
6599    xyz\rabc\<crlf>
6600No match
6601    xyz\rabc\<lf>
6602No match
6603
6604/abc$/m<lf>
6605    xyzabc
6606 0: abc
6607    xyzabc\n
6608 0: abc
6609    xyzabc\npqr
6610 0: abc
6611    xyzabc\r\<cr>
6612 0: abc
6613    xyzabc\rpqr\<cr>
6614 0: abc
6615    xyzabc\r\n\<crlf>
6616 0: abc
6617    xyzabc\r\npqr\<crlf>
6618 0: abc
6619    ** Failers
6620No match
6621    xyzabc\r
6622No match
6623    xyzabc\rpqr
6624No match
6625    xyzabc\r\n
6626No match
6627    xyzabc\r\npqr
6628No match
6629
6630/^abc/m<cr>
6631    xyz\rabcdef
6632 0: abc
6633    xyz\nabcdef\<lf>
6634 0: abc
6635    ** Failers
6636No match
6637    xyz\nabcdef
6638No match
6639
6640/^abc/m<lf>
6641    xyz\nabcdef
6642 0: abc
6643    xyz\rabcdef\<cr>
6644 0: abc
6645    ** Failers
6646No match
6647    xyz\rabcdef
6648No match
6649
6650/^abc/m<crlf>
6651    xyz\r\nabcdef
6652 0: abc
6653    xyz\rabcdef\<cr>
6654 0: abc
6655    ** Failers
6656No match
6657    xyz\rabcdef
6658No match
6659
6660/.*/<lf>
6661    abc\ndef
6662 0: abc
6663 1: ab
6664 2: a
6665 3:
6666    abc\rdef
6667 0: abc\x0ddef
6668 1: abc\x0dde
6669 2: abc\x0dd
6670 3: abc\x0d
6671 4: abc
6672 5: ab
6673 6: a
6674 7:
6675    abc\r\ndef
6676 0: abc\x0d
6677 1: abc
6678 2: ab
6679 3: a
6680 4:
6681    \<cr>abc\ndef
6682 0: abc\x0adef
6683 1: abc\x0ade
6684 2: abc\x0ad
6685 3: abc\x0a
6686 4: abc
6687 5: ab
6688 6: a
6689 7:
6690    \<cr>abc\rdef
6691 0: abc
6692 1: ab
6693 2: a
6694 3:
6695    \<cr>abc\r\ndef
6696 0: abc
6697 1: ab
6698 2: a
6699 3:
6700    \<crlf>abc\ndef
6701 0: abc\x0adef
6702 1: abc\x0ade
6703 2: abc\x0ad
6704 3: abc\x0a
6705 4: abc
6706 5: ab
6707 6: a
6708 7:
6709    \<crlf>abc\rdef
6710 0: abc\x0ddef
6711 1: abc\x0dde
6712 2: abc\x0dd
6713 3: abc\x0d
6714 4: abc
6715 5: ab
6716 6: a
6717 7:
6718    \<crlf>abc\r\ndef
6719 0: abc
6720 1: ab
6721 2: a
6722 3:
6723
6724/\w+(.)(.)?def/s
6725    abc\ndef
6726 0: abc\x0adef
6727    abc\rdef
6728 0: abc\x0ddef
6729    abc\r\ndef
6730 0: abc\x0d\x0adef
6731
6732/^\w+=.*(\\\n.*)*/
6733    abc=xyz\\\npqr
6734 0: abc=xyz\\x0apqr
6735 1: abc=xyz\\x0apq
6736 2: abc=xyz\\x0ap
6737 3: abc=xyz\\x0a
6738 4: abc=xyz\
6739 5: abc=xyz
6740 6: abc=xy
6741 7: abc=x
6742 8: abc=
6743
6744/^(a()*)*/
6745    aaaa
6746 0: aaaa
6747 1: aaa
6748 2: aa
6749 3: a
6750 4:
6751
6752/^(?:a(?:(?:))*)*/
6753    aaaa
6754 0: aaaa
6755 1: aaa
6756 2: aa
6757 3: a
6758 4:
6759
6760/^(a()+)+/
6761    aaaa
6762 0: aaaa
6763 1: aaa
6764 2: aa
6765 3: a
6766
6767/^(?:a(?:(?:))+)+/
6768    aaaa
6769 0: aaaa
6770 1: aaa
6771 2: aa
6772 3: a
6773
6774/(a|)*\d/
6775  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6776No match
6777  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6778 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6779
6780/(?>a|)*\d/
6781  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6782No match
6783  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6784 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6785
6786/(?:a|)*\d/
6787  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6788No match
6789  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6790 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
6791
6792/^a.b/<lf>
6793    a\rb
6794 0: a\x0db
6795    a\nb\<cr>
6796 0: a\x0ab
6797    ** Failers
6798No match
6799    a\nb
6800No match
6801    a\nb\<any>
6802No match
6803    a\rb\<cr>
6804No match
6805    a\rb\<any>
6806No match
6807
6808/^abc./mgx<any>
6809    abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
6810 0: abc1
6811 0: abc2
6812 0: abc3
6813 0: abc4
6814 0: abc5
6815 0: abc6
6816 0: abc7
6817
6818/abc.$/mgx<any>
6819    abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
6820 0: abc1
6821 0: abc2
6822 0: abc3
6823 0: abc4
6824 0: abc5
6825 0: abc6
6826 0: abc9
6827
6828/^a\Rb/<bsr_unicode>
6829    a\nb
6830 0: a\x0ab
6831    a\rb
6832 0: a\x0db
6833    a\r\nb
6834 0: a\x0d\x0ab
6835    a\x0bb
6836 0: a\x0bb
6837    a\x0cb
6838 0: a\x0cb
6839    a\x85b
6840 0: a\x85b
6841    ** Failers
6842No match
6843    a\n\rb
6844No match
6845
6846/^a\R*b/<bsr_unicode>
6847    ab
6848 0: ab
6849    a\nb
6850 0: a\x0ab
6851    a\rb
6852 0: a\x0db
6853    a\r\nb
6854 0: a\x0d\x0ab
6855    a\x0bb
6856 0: a\x0bb
6857    a\x0cb
6858 0: a\x0cb
6859    a\x85b
6860 0: a\x85b
6861    a\n\rb
6862 0: a\x0a\x0db
6863    a\n\r\x85\x0cb
6864 0: a\x0a\x0d\x85\x0cb
6865
6866/^a\R+b/<bsr_unicode>
6867    a\nb
6868 0: a\x0ab
6869    a\rb
6870 0: a\x0db
6871    a\r\nb
6872 0: a\x0d\x0ab
6873    a\x0bb
6874 0: a\x0bb
6875    a\x0cb
6876 0: a\x0cb
6877    a\x85b
6878 0: a\x85b
6879    a\n\rb
6880 0: a\x0a\x0db
6881    a\n\r\x85\x0cb
6882 0: a\x0a\x0d\x85\x0cb
6883    ** Failers
6884No match
6885    ab
6886No match
6887
6888/^a\R{1,3}b/<bsr_unicode>
6889    a\nb
6890 0: a\x0ab
6891    a\n\rb
6892 0: a\x0a\x0db
6893    a\n\r\x85b
6894 0: a\x0a\x0d\x85b
6895    a\r\n\r\nb
6896 0: a\x0d\x0a\x0d\x0ab
6897    a\r\n\r\n\r\nb
6898 0: a\x0d\x0a\x0d\x0a\x0d\x0ab
6899    a\n\r\n\rb
6900 0: a\x0a\x0d\x0a\x0db
6901    a\n\n\r\nb
6902 0: a\x0a\x0a\x0d\x0ab
6903    ** Failers
6904No match
6905    a\n\n\n\rb
6906No match
6907    a\r
6908No match
6909
6910/^a[\R]b/<bsr_unicode>
6911    aRb
6912 0: aRb
6913    ** Failers
6914No match
6915    a\nb
6916No match
6917
6918/.+foo/
6919    afoo
6920 0: afoo
6921    ** Failers
6922No match
6923    \r\nfoo
6924No match
6925    \nfoo
6926No match
6927
6928/.+foo/<crlf>
6929    afoo
6930 0: afoo
6931    \nfoo
6932 0: \x0afoo
6933    ** Failers
6934No match
6935    \r\nfoo
6936No match
6937
6938/.+foo/<any>
6939    afoo
6940 0: afoo
6941    ** Failers
6942No match
6943    \nfoo
6944No match
6945    \r\nfoo
6946No match
6947
6948/.+foo/s
6949    afoo
6950 0: afoo
6951    \r\nfoo
6952 0: \x0d\x0afoo
6953    \nfoo
6954 0: \x0afoo
6955
6956/^$/mg<any>
6957    abc\r\rxyz
6958 0:
6959    abc\n\rxyz
6960 0:
6961    ** Failers
6962No match
6963    abc\r\nxyz
6964No match
6965
6966/^X/m
6967    XABC
6968 0: X
6969    ** Failers
6970No match
6971    XABC\B
6972No match
6973
6974/(?m)^$/<any>g+
6975    abc\r\n\r\n
6976 0:
6977 0+ \x0d\x0a
6978
6979/(?m)^$|^\r\n/<any>g+
6980    abc\r\n\r\n
6981 0: \x0d\x0a
6982 0+
6983 1:
6984
6985/(?m)$/<any>g+
6986    abc\r\n\r\n
6987 0:
6988 0+ \x0d\x0a\x0d\x0a
6989 0:
6990 0+ \x0d\x0a
6991 0:
6992 0+
6993
6994/(?|(abc)|(xyz))/
6995   >abc<
6996 0: abc
6997   >xyz<
6998 0: xyz
6999
7000/(x)(?|(abc)|(xyz))(x)/
7001    xabcx
7002 0: xabcx
7003    xxyzx
7004 0: xxyzx
7005
7006/(x)(?|(abc)(pqr)|(xyz))(x)/
7007    xabcpqrx
7008 0: xabcpqrx
7009    xxyzx
7010 0: xxyzx
7011
7012/(?|(abc)|(xyz))(?1)/
7013    abcabc
7014 0: abcabc
7015    xyzabc
7016 0: xyzabc
7017    ** Failers
7018No match
7019    xyzxyz
7020No match
7021
7022/\H\h\V\v/
7023    X X\x0a
7024 0: X X\x0a
7025    X\x09X\x0b
7026 0: X\x09X\x0b
7027    ** Failers
7028No match
7029    \xa0 X\x0a
7030No match
7031
7032/\H*\h+\V?\v{3,4}/
7033    \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
7034 0: \x09 \xa0X\x0a\x0b\x0c\x0d
7035 1: \x09 \xa0X\x0a\x0b\x0c
7036    \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
7037 0: \x09 \xa0\x0a\x0b\x0c\x0d
7038 1: \x09 \xa0\x0a\x0b\x0c
7039    \x09\x20\xa0\x0a\x0b\x0c
7040 0: \x09 \xa0\x0a\x0b\x0c
7041    ** Failers
7042No match
7043    \x09\x20\xa0\x0a\x0b
7044No match
7045
7046/\H{3,4}/
7047    XY  ABCDE
7048 0: ABCD
7049 1: ABC
7050    XY  PQR ST
7051 0: PQR
7052
7053/.\h{3,4}./
7054    XY  AB    PQRS
7055 0: B    P
7056 1: B
7057
7058/\h*X\h?\H+Y\H?Z/
7059    >XNNNYZ
7060 0: XNNNYZ
7061    >  X NYQZ
7062 0:   X NYQZ
7063    ** Failers
7064No match
7065    >XYZ
7066No match
7067    >  X NY Z
7068No match
7069
7070/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
7071    >XY\x0aZ\x0aA\x0bNN\x0c
7072 0: XY\x0aZ\x0aA\x0bNN\x0c
7073    >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
7074 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
7075
7076/.+A/<crlf>
7077    \r\nA
7078No match
7079
7080/\nA/<crlf>
7081    \r\nA
7082 0: \x0aA
7083
7084/[\r\n]A/<crlf>
7085    \r\nA
7086 0: \x0aA
7087
7088/(\r|\n)A/<crlf>
7089    \r\nA
7090 0: \x0aA
7091
7092/a\Rb/I<bsr_anycrlf>
7093Capturing subpattern count = 0
7094Options: bsr_anycrlf
7095First char = 'a'
7096Need char = 'b'
7097    a\rb
7098 0: a\x0db
7099    a\nb
7100 0: a\x0ab
7101    a\r\nb
7102 0: a\x0d\x0ab
7103    ** Failers
7104No match
7105    a\x85b
7106No match
7107    a\x0bb
7108No match
7109
7110/a\Rb/I<bsr_unicode>
7111Capturing subpattern count = 0
7112Options: bsr_unicode
7113First char = 'a'
7114Need char = 'b'
7115    a\rb
7116 0: a\x0db
7117    a\nb
7118 0: a\x0ab
7119    a\r\nb
7120 0: a\x0d\x0ab
7121    a\x85b
7122 0: a\x85b
7123    a\x0bb
7124 0: a\x0bb
7125    ** Failers
7126No match
7127    a\x85b\<bsr_anycrlf>
7128No match
7129    a\x0bb\<bsr_anycrlf>
7130No match
7131
7132/a\R?b/I<bsr_anycrlf>
7133Capturing subpattern count = 0
7134Options: bsr_anycrlf
7135First char = 'a'
7136Need char = 'b'
7137    a\rb
7138 0: a\x0db
7139    a\nb
7140 0: a\x0ab
7141    a\r\nb
7142 0: a\x0d\x0ab
7143    ** Failers
7144No match
7145    a\x85b
7146No match
7147    a\x0bb
7148No match
7149
7150/a\R?b/I<bsr_unicode>
7151Capturing subpattern count = 0
7152Options: bsr_unicode
7153First char = 'a'
7154Need char = 'b'
7155    a\rb
7156 0: a\x0db
7157    a\nb
7158 0: a\x0ab
7159    a\r\nb
7160 0: a\x0d\x0ab
7161    a\x85b
7162 0: a\x85b
7163    a\x0bb
7164 0: a\x0bb
7165    ** Failers
7166No match
7167    a\x85b\<bsr_anycrlf>
7168No match
7169    a\x0bb\<bsr_anycrlf>
7170No match
7171
7172/a\R{2,4}b/I<bsr_anycrlf>
7173Capturing subpattern count = 0
7174Options: bsr_anycrlf
7175First char = 'a'
7176Need char = 'b'
7177    a\r\n\nb
7178 0: a\x0d\x0a\x0ab
7179    a\n\r\rb
7180 0: a\x0a\x0d\x0db
7181    a\r\n\r\n\r\n\r\nb
7182 0: a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0ab
7183    ** Failers
7184No match
7185    a\x85\85b
7186No match
7187    a\x0b\0bb
7188No match
7189
7190/a\R{2,4}b/I<bsr_unicode>
7191Capturing subpattern count = 0
7192Options: bsr_unicode
7193First char = 'a'
7194Need char = 'b'
7195    a\r\rb
7196 0: a\x0d\x0db
7197    a\n\n\nb
7198 0: a\x0a\x0a\x0ab
7199    a\r\n\n\r\rb
7200 0: a\x0d\x0a\x0a\x0d\x0db
7201    a\x85\85b
7202No match
7203    a\x0b\0bb
7204No match
7205    ** Failers
7206No match
7207    a\r\r\r\r\rb
7208No match
7209    a\x85\85b\<bsr_anycrlf>
7210No match
7211    a\x0b\0bb\<bsr_anycrlf>
7212No match
7213
7214/a(?!)|\wbc/
7215    abc
7216 0: abc
7217
7218/a[]b/<JS>
7219    ** Failers
7220No match
7221    ab
7222No match
7223
7224/a[]+b/<JS>
7225    ** Failers
7226No match
7227    ab
7228No match
7229
7230/a[]*+b/<JS>
7231    ** Failers
7232No match
7233    ab
7234No match
7235
7236/a[^]b/<JS>
7237    aXb
7238 0: aXb
7239    a\nb
7240 0: a\x0ab
7241    ** Failers
7242No match
7243    ab
7244No match
7245
7246/a[^]+b/<JS>
7247    aXb
7248 0: aXb
7249    a\nX\nXb
7250 0: a\x0aX\x0aXb
7251    ** Failers
7252No match
7253    ab
7254No match
7255
7256/X$/E
7257    X
7258 0: X
7259    ** Failers
7260No match
7261    X\n
7262No match
7263
7264/X$/
7265    X
7266 0: X
7267    X\n
7268 0: X
7269
7270/xyz/C
7271  xyz
7272--->xyz
7273 +0 ^       x
7274 +1 ^^      y
7275 +2 ^ ^     z
7276 +3 ^  ^
7277 0: xyz
7278  abcxyz
7279--->abcxyz
7280 +0    ^       x
7281 +1    ^^      y
7282 +2    ^ ^     z
7283 +3    ^  ^
7284 0: xyz
7285  abcxyz\Y
7286--->abcxyz
7287 +0 ^          x
7288 +0  ^         x
7289 +0   ^        x
7290 +0    ^       x
7291 +1    ^^      y
7292 +2    ^ ^     z
7293 +3    ^  ^
7294 0: xyz
7295  ** Failers
7296No match
7297  abc
7298No match
7299  abc\Y
7300--->abc
7301 +0 ^       x
7302 +0  ^      x
7303 +0   ^     x
7304 +0    ^    x
7305No match
7306  abcxypqr
7307No match
7308  abcxypqr\Y
7309--->abcxypqr
7310 +0 ^            x
7311 +0  ^           x
7312 +0   ^          x
7313 +0    ^         x
7314 +1    ^^        y
7315 +2    ^ ^       z
7316 +0     ^        x
7317 +0      ^       x
7318 +0       ^      x
7319 +0        ^     x
7320 +0         ^    x
7321No match
7322
7323/(*NO_START_OPT)xyz/C
7324  abcxyz
7325--->abcxyz
7326+15 ^          x
7327+15  ^         x
7328+15   ^        x
7329+15    ^       x
7330+16    ^^      y
7331+17    ^ ^     z
7332+18    ^  ^
7333 0: xyz
7334
7335/(?C)ab/
7336  ab
7337--->ab
7338  0 ^      a
7339 0: ab
7340  \C-ab
7341 0: ab
7342
7343/ab/C
7344  ab
7345--->ab
7346 +0 ^      a
7347 +1 ^^     b
7348 +2 ^ ^
7349 0: ab
7350  \C-ab
7351 0: ab
7352
7353/^"((?(?=[a])[^"])|b)*"$/C
7354    "ab"
7355--->"ab"
7356 +0 ^        ^
7357 +1 ^        "
7358 +2 ^^       ((?(?=[a])[^"])|b)*
7359+21 ^^       "
7360 +3 ^^       (?(?=[a])[^"])
7361+18 ^^       b
7362 +5 ^^       (?=[a])
7363 +8  ^       [a]
7364+11  ^^      )
7365+12 ^^       [^"]
7366+16 ^ ^      )
7367+17 ^ ^      |
7368+21 ^ ^      "
7369 +3 ^ ^      (?(?=[a])[^"])
7370+18 ^ ^      b
7371 +5 ^ ^      (?=[a])
7372 +8   ^      [a]
7373+19 ^  ^     )
7374+21 ^  ^     "
7375 +3 ^  ^     (?(?=[a])[^"])
7376+18 ^  ^     b
7377 +5 ^  ^     (?=[a])
7378 +8    ^     [a]
7379+17 ^  ^     |
7380+22 ^   ^    $
7381+23 ^   ^
7382 0: "ab"
7383    \C-"ab"
7384 0: "ab"
7385
7386/\d+X|9+Y/
7387    ++++123999\P
7388Partial match: 123999
7389    ++++123999Y\P
7390 0: 999Y
7391
7392/Z(*F)/
7393    Z\P
7394No match
7395    ZA\P
7396No match
7397
7398/Z(?!)/
7399    Z\P
7400No match
7401    ZA\P
7402No match
7403
7404/dog(sbody)?/
7405    dogs\P
7406 0: dog
7407    dogs\P\P
7408Partial match: dogs
7409
7410/dog(sbody)??/
7411    dogs\P
7412 0: dog
7413    dogs\P\P
7414Partial match: dogs
7415
7416/dog|dogsbody/
7417    dogs\P
7418 0: dog
7419    dogs\P\P
7420Partial match: dogs
7421
7422/dogsbody|dog/
7423    dogs\P
7424 0: dog
7425    dogs\P\P
7426Partial match: dogs
7427
7428/Z(*F)Q|ZXY/
7429    Z\P
7430Partial match: Z
7431    ZA\P
7432No match
7433    X\P
7434No match
7435
7436/\bthe cat\b/
7437    the cat\P
7438 0: the cat
7439    the cat\P\P
7440Partial match: the cat
7441
7442/dog(sbody)?/
7443    dogs\D\P
7444 0: dog
7445    body\D\R
7446 0: body
7447
7448/dog(sbody)?/
7449    dogs\D\P\P
7450Partial match: dogs
7451    body\D\R
7452 0: body
7453
7454/abc/
7455   abc\P
7456 0: abc
7457   abc\P\P
7458 0: abc
7459
7460/abc\K123/
7461    xyzabc123pqr
7462Error -16
7463
7464/(?<=abc)123/
7465    xyzabc123pqr
7466 0: 123
7467    xyzabc12\P
7468Partial match: abc12
7469    xyzabc12\P\P
7470Partial match: abc12
7471
7472/\babc\b/
7473    +++abc+++
7474 0: abc
7475    +++ab\P
7476Partial match: +ab
7477    +++ab\P\P
7478Partial match: +ab
7479
7480/(?=C)/g+
7481    ABCDECBA
7482 0:
7483 0+ CDECBA
7484 0:
7485 0+ CBA
7486
7487/(abc|def|xyz)/I
7488Capturing subpattern count = 1
7489No options
7490No first char
7491No need char
7492    terhjk;abcdaadsfe
7493 0: abc
7494    the quick xyz brown fox
7495 0: xyz
7496    \Yterhjk;abcdaadsfe
7497 0: abc
7498    \Ythe quick xyz brown fox
7499 0: xyz
7500    ** Failers
7501No match
7502    thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
7503No match
7504    \Ythejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
7505No match
7506
7507/(abc|def|xyz)/SI
7508Capturing subpattern count = 1
7509No options
7510No first char
7511No need char
7512Subject length lower bound = 3
7513Starting byte set: a d x
7514    terhjk;abcdaadsfe
7515 0: abc
7516    the quick xyz brown fox
7517 0: xyz
7518    \Yterhjk;abcdaadsfe
7519 0: abc
7520    \Ythe quick xyz brown fox
7521 0: xyz
7522    ** Failers
7523No match
7524    thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
7525No match
7526    \Ythejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
7527No match
7528
7529/abcd*/+
7530    xxxxabcd\P
7531 0: abcd
7532 0+
7533 1: abc
7534    xxxxabcd\P\P
7535Partial match: abcd
7536    dddxxx\R
7537 0: ddd
7538 0+ xxx
7539 1: dd
7540 2: d
7541 3:
7542    xxxxabcd\P\P
7543Partial match: abcd
7544    xxx\R
7545 0:
7546 0+ xxx
7547
7548/abcd*/i
7549    xxxxabcd\P
7550 0: abcd
7551 1: abc
7552    xxxxabcd\P\P
7553Partial match: abcd
7554    XXXXABCD\P
7555 0: ABCD
7556 1: ABC
7557    XXXXABCD\P\P
7558Partial match: ABCD
7559
7560/abc\d*/
7561    xxxxabc1\P
7562 0: abc1
7563 1: abc
7564    xxxxabc1\P\P
7565Partial match: abc1
7566
7567/abc[de]*/
7568    xxxxabcde\P
7569 0: abcde
7570 1: abcd
7571 2: abc
7572    xxxxabcde\P\P
7573Partial match: abcde
7574
7575/(?:(?1)|B)(A(*F)|C)/
7576    ABCD
7577 0: BC
7578    CCD
7579 0: CC
7580    ** Failers
7581No match
7582    CAD
7583No match
7584
7585/^(?:(?1)|B)(A(*F)|C)/
7586    CCD
7587 0: CC
7588    BCD
7589 0: BC
7590    ** Failers
7591No match
7592    ABCD
7593No match
7594    CAD
7595No match
7596    BAD
7597No match
7598
7599/^(?!a(*SKIP)b)/
7600    ac
7601Error -16
7602
7603/^(?=a(*SKIP)b|ac)/
7604    ** Failers
7605No match
7606    ac
7607Error -16
7608
7609/^(?=a(*THEN)b|ac)/
7610    ac
7611Error -16
7612
7613/^(?=a(*PRUNE)b)/
7614    ab
7615Error -16
7616    ** Failers
7617No match
7618    ac
7619Error -16
7620
7621/^(?(?!a(*SKIP)b))/
7622    ac
7623Error -16
7624
7625/(?<=abc)def/
7626    abc\P\P
7627Partial match: abc
7628
7629/abc$/
7630    abc
7631 0: abc
7632    abc\P
7633 0: abc
7634    abc\P\P
7635Partial match: abc
7636
7637/abc$/m
7638    abc
7639 0: abc
7640    abc\n
7641 0: abc
7642    abc\P\P
7643Partial match: abc
7644    abc\n\P\P
7645 0: abc
7646    abc\P
7647 0: abc
7648    abc\n\P
7649 0: abc
7650
7651/abc\z/
7652    abc
7653 0: abc
7654    abc\P
7655 0: abc
7656    abc\P\P
7657Partial match: abc
7658
7659/abc\Z/
7660    abc
7661 0: abc
7662    abc\P
7663 0: abc
7664    abc\P\P
7665Partial match: abc
7666
7667/abc\b/
7668    abc
7669 0: abc
7670    abc\P
7671 0: abc
7672    abc\P\P
7673Partial match: abc
7674
7675/abc\B/
7676    abc
7677No match
7678    abc\P
7679Partial match: abc
7680    abc\P\P
7681Partial match: abc
7682
7683/.+/
7684    abc\>0
7685 0: abc
7686 1: ab
7687 2: a
7688    abc\>1
7689 0: bc
7690 1: b
7691    abc\>2
7692 0: c
7693    abc\>3
7694No match
7695    abc\>4
7696Error -24
7697    abc\>-4
7698Error -24
7699
7700/-- End of testinput7 --/
7701