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