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