blob: fd4ae0158261f807380c612ec8bde713e2a90fd5 [file] [log] [blame]
Tristan Matthews04616462013-11-14 16:09:34 -05001/-- These tests are for the Perl >= 5.10 features that PCRE supports. --/
2
3/\H\h\V\v/
4 X X\x0a
5 0: X X\x0a
6 X\x09X\x0b
7 0: X\x09X\x0b
8 ** Failers
9No match
10 \xa0 X\x0a
11No match
12
13/\H*\h+\V?\v{3,4}/
14 \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
15 0: \x09 \xa0X\x0a\x0b\x0c\x0d
16 \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
17 0: \x09 \xa0\x0a\x0b\x0c\x0d
18 \x09\x20\xa0\x0a\x0b\x0c
19 0: \x09 \xa0\x0a\x0b\x0c
20 ** Failers
21No match
22 \x09\x20\xa0\x0a\x0b
23No match
24
25/\H{3,4}/
26 XY ABCDE
27 0: ABCD
28 XY PQR ST
29 0: PQR
30
31/.\h{3,4}./
32 XY AB PQRS
33 0: B P
34
35/\h*X\h?\H+Y\H?Z/
36 >XNNNYZ
37 0: XNNNYZ
38 > X NYQZ
39 0: X NYQZ
40 ** Failers
41No match
42 >XYZ
43No match
44 > X NY Z
45No match
46
47/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
48 >XY\x0aZ\x0aA\x0bNN\x0c
49 0: XY\x0aZ\x0aA\x0bNN\x0c
50 >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
51 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
52
53/(foo)\Kbar/
54 foobar
55 0: bar
56 1: foo
57
58/(foo)(\Kbar|baz)/
59 foobar
60 0: bar
61 1: foo
62 2: bar
63 foobaz
64 0: foobaz
65 1: foo
66 2: baz
67
68/(foo\Kbar)baz/
69 foobarbaz
70 0: barbaz
71 1: foobar
72
73/abc\K|def\K/g+
74 Xabcdefghi
75 0:
76 0+ defghi
77 0:
78 0+ ghi
79
80/ab\Kc|de\Kf/g+
81 Xabcdefghi
82 0: c
83 0+ defghi
84 0: f
85 0+ ghi
86
87/(?=C)/g+
88 ABCDECBA
89 0:
90 0+ CDECBA
91 0:
92 0+ CBA
93
94/^abc\K/+
95 abcdef
96 0:
97 0+ def
98 ** Failers
99No match
100 defabcxyz
101No match
102
103/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
104 ababababbbabZXXXX
105 0: ababababbbabZ
106 1: ab
107 2: b
108
109/(?<A>tom|bon)-\g{A}/
110 tom-tom
111 0: tom-tom
112 1: tom
113 bon-bon
114 0: bon-bon
115 1: bon
116
117/(^(a|b\g{-1}))/
118 bacxxx
119No match
120
121/(?|(abc)|(xyz))\1/
122 abcabc
123 0: abcabc
124 1: abc
125 xyzxyz
126 0: xyzxyz
127 1: xyz
128 ** Failers
129No match
130 abcxyz
131No match
132 xyzabc
133No match
134
135/(?|(abc)|(xyz))(?1)/
136 abcabc
137 0: abcabc
138 1: abc
139 xyzabc
140 0: xyzabc
141 1: xyz
142 ** Failers
143No match
144 xyzxyz
145No match
146
147/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
148 XYabcdY
149 0: XYabcdY
150 1: a
151 2: b
152 3: c
153 4: d
154 5: Y
155
156/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
157 XYabcdY
158 0: XYabcdY
159 1: a
160 2: b
161 3: <unset>
162 4: <unset>
163 5: c
164 6: d
165 7: Y
166
167/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
168 XYabcdY
169 0: XYabcdY
170 1: a
171 2: b
172 3: <unset>
173 4: <unset>
174 5: c
175 6: d
176 7: Y
177
178/(?'abc'\w+):\k<abc>{2}/
179 a:aaxyz
180 0: a:aa
181 1: a
182 ab:ababxyz
183 0: ab:abab
184 1: ab
185 ** Failers
186No match
187 a:axyz
188No match
189 ab:abxyz
190No match
191
192/(?'abc'\w+):\g{abc}{2}/
193 a:aaxyz
194 0: a:aa
195 1: a
196 ab:ababxyz
197 0: ab:abab
198 1: ab
199 ** Failers
200No match
201 a:axyz
202No match
203 ab:abxyz
204No match
205
206/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
207 abd
208 0: abd
209 1: a
210 ce
211 0: ce
212
213/^(a.)\g-1Z/
214 aXaXZ
215 0: aXaXZ
216 1: aX
217
218/^(a.)\g{-1}Z/
219 aXaXZ
220 0: aXaXZ
221 1: aX
222
223/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
224 abcd
225 0: ab
226
227/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
228 (?(DEFINE)
229 (?<NAME_PAT>[a-z]+)
230 (?<ADDRESS_PAT>\d+)
231 )/x
232 metcalfe 33
233 0: metcalfe 33
234 1: metcalfe
235 2: 33
236
237/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
238 1.2.3.4
239 0: 1.2.3.4
240 1: <unset>
241 2: .4
242 131.111.10.206
243 0: 131.111.10.206
244 1: <unset>
245 2: .206
246 10.0.0.0
247 0: 10.0.0.0
248 1: <unset>
249 2: .0
250 ** Failers
251No match
252 10.6
253No match
254 455.3.4.5
255No match
256
257/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
258 1.2.3.4
259 0: 1.2.3.4
260 1: .4
261 131.111.10.206
262 0: 131.111.10.206
263 1: .206
264 10.0.0.0
265 0: 10.0.0.0
266 1: .0
267 ** Failers
268No match
269 10.6
270No match
271 455.3.4.5
272No match
273
274/^(\w++|\s++)*$/
275 now is the time for all good men to come to the aid of the party
276 0: now is the time for all good men to come to the aid of the party
277 1: party
278 *** Failers
279No match
280 this is not a line with only words and spaces!
281No match
282
283/(\d++)(\w)/
284 12345a
285 0: 12345a
286 1: 12345
287 2: a
288 *** Failers
289No match
290 12345+
291No match
292
293/a++b/
294 aaab
295 0: aaab
296
297/(a++b)/
298 aaab
299 0: aaab
300 1: aaab
301
302/(a++)b/
303 aaab
304 0: aaab
305 1: aaa
306
307/([^()]++|\([^()]*\))+/
308 ((abc(ade)ufh()()x
309 0: abc(ade)ufh()()x
310 1: x
311
312/\(([^()]++|\([^()]+\))+\)/
313 (abc)
314 0: (abc)
315 1: abc
316 (abc(def)xyz)
317 0: (abc(def)xyz)
318 1: xyz
319 *** Failers
320No match
321 ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
322No match
323
324/^([^()]|\((?1)*\))*$/
325 abc
326 0: abc
327 1: c
328 a(b)c
329 0: a(b)c
330 1: c
331 a(b(c))d
332 0: a(b(c))d
333 1: d
334 *** Failers)
335No match
336 a(b(c)d
337No match
338
339/^>abc>([^()]|\((?1)*\))*<xyz<$/
340 >abc>123<xyz<
341 0: >abc>123<xyz<
342 1: 3
343 >abc>1(2)3<xyz<
344 0: >abc>1(2)3<xyz<
345 1: 3
346 >abc>(1(2)3)<xyz<
347 0: >abc>(1(2)3)<xyz<
348 1: (1(2)3)
349
350/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
351 1221
352 0: 1221
353 1: 1221
354 2: 1
355 Satanoscillatemymetallicsonatas
356 0: Satanoscillatemymetallicsonatas
357 1: <unset>
358 2: <unset>
359 3: Satanoscillatemymetallicsonatas
360 4: S
361 AmanaplanacanalPanama
362 0: AmanaplanacanalPanama
363 1: <unset>
364 2: <unset>
365 3: AmanaplanacanalPanama
366 4: A
367 AblewasIereIsawElba
368 0: AblewasIereIsawElba
369 1: <unset>
370 2: <unset>
371 3: AblewasIereIsawElba
372 4: A
373 *** Failers
374No match
375 Thequickbrownfox
376No match
377
378/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
379 12
380 0: 12
381 1: 12
382 (((2+2)*-3)-7)
383 0: (((2+2)*-3)-7)
384 1: (((2+2)*-3)-7)
385 2: -
386 -12
387 0: -12
388 1: -12
389 *** Failers
390No match
391 ((2+2)*-3)-7)
392No match
393
394/^(x(y|(?1){2})z)/
395 xyz
396 0: xyz
397 1: xyz
398 2: y
399 xxyzxyzz
400 0: xxyzxyzz
401 1: xxyzxyzz
402 2: xyzxyz
403 *** Failers
404No match
405 xxyzz
406No match
407 xxyzxyzxyzz
408No match
409
410/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
411 <>
412 0: <>
413 1: <>
414 2: <>
415 <abcd>
416 0: <abcd>
417 1: <abcd>
418 2: <abcd>
419 <abc <123> hij>
420 0: <abc <123> hij>
421 1: <abc <123> hij>
422 2: <abc <123> hij>
423 <abc <def> hij>
424 0: <def>
425 1: <def>
426 2: <def>
427 <abc<>def>
428 0: <abc<>def>
429 1: <abc<>def>
430 2: <abc<>def>
431 <abc<>
432 0: <>
433 1: <>
434 2: <>
435 *** Failers
436No match
437 <abc
438No match
439
440/^a+(*FAIL)/
441 aaaaaa
442No match
443
444/a+b?c+(*FAIL)/
445 aaabccc
446No match
447
448/a+b?(*PRUNE)c+(*FAIL)/
449 aaabccc
450No match
451
452/a+b?(*COMMIT)c+(*FAIL)/
453 aaabccc
454No match
455
456/a+b?(*SKIP)c+(*FAIL)/
457 aaabcccaaabccc
458No match
459
460/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
461 aaaxxxxxx
462 0: aaaxxxxxx
463 aaa++++++
464 0: aaa
465 bbbxxxxx
466 0: bbbxxxxx
467 bbb+++++
468 0: bbb
469 cccxxxx
470 0: cccxxxx
471 ccc++++
472 0: ccc
473 dddddddd
474 0: ddd
475
476/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
477 aaaxxxxxx
478 0: aaaxxxxxx
479 1: aaaxxxxxx
480 aaa++++++
481 0: aaa
482 1: aaa
483 bbbxxxxx
484 0: bbbxxxxx
485 1: bbbxxxxx
486 bbb+++++
487 0: bbb
488 1: bbb
489 cccxxxx
490 0: cccxxxx
491 1: cccxxxx
492 ccc++++
493 0: ccc
494 1: ccc
495 dddddddd
496 0: ddd
497 1: ddd
498
499/a+b?(*THEN)c+(*FAIL)/
500 aaabccc
501No match
502
503/(A (A|B(*ACCEPT)|C) D)(E)/x
504 AB
505 0: AB
506 1: AB
507 2: B
508 ABX
509 0: AB
510 1: AB
511 2: B
512 AADE
513 0: AADE
514 1: AAD
515 2: A
516 3: E
517 ACDE
518 0: ACDE
519 1: ACD
520 2: C
521 3: E
522 ** Failers
523No match
524 AD
525No match
526
527/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
528 1221
529 0: 1221
530 1: 1221
531 2: 1
532 Satan, oscillate my metallic sonatas!
533 0: Satan, oscillate my metallic sonatas!
534 1: <unset>
535 2: <unset>
536 3: Satan, oscillate my metallic sonatas
537 4: S
538 A man, a plan, a canal: Panama!
539 0: A man, a plan, a canal: Panama!
540 1: <unset>
541 2: <unset>
542 3: A man, a plan, a canal: Panama
543 4: A
544 Able was I ere I saw Elba.
545 0: Able was I ere I saw Elba.
546 1: <unset>
547 2: <unset>
548 3: Able was I ere I saw Elba
549 4: A
550 *** Failers
551No match
552 The quick brown fox
553No match
554
555/^((.)(?1)\2|.)$/
556 a
557 0: a
558 1: a
559 aba
560 0: aba
561 1: aba
562 2: a
563 aabaa
564 0: aabaa
565 1: aabaa
566 2: a
567 abcdcba
568 0: abcdcba
569 1: abcdcba
570 2: a
571 pqaabaaqp
572 0: pqaabaaqp
573 1: pqaabaaqp
574 2: p
575 ablewasiereisawelba
576 0: ablewasiereisawelba
577 1: ablewasiereisawelba
578 2: a
579 rhubarb
580No match
581 the quick brown fox
582No match
583
584/(a)(?<=b(?1))/
585 baz
586 0: a
587 1: a
588 ** Failers
589No match
590 caz
591No match
592
593/(?<=b(?1))(a)/
594 zbaaz
595 0: a
596 1: a
597 ** Failers
598No match
599 aaa
600No match
601
602/(?<X>a)(?<=b(?&X))/
603 baz
604 0: a
605 1: a
606
607/^(?|(abc)|(def))\1/
608 abcabc
609 0: abcabc
610 1: abc
611 defdef
612 0: defdef
613 1: def
614 ** Failers
615No match
616 abcdef
617No match
618 defabc
619No match
620
621/^(?|(abc)|(def))(?1)/
622 abcabc
623 0: abcabc
624 1: abc
625 defabc
626 0: defabc
627 1: def
628 ** Failers
629No match
630 defdef
631No match
632 abcdef
633No match
634
635/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
636 a\"aaaaa
637 0: a"aaaaa
638 1: "
639 2: <unset>
640 3: "
641 b\"aaaaa
642 0: b"aaaaa
643 1: <unset>
644 2: <unset>
645 3: <unset>
646 4: "
647 5: <unset>
648 6: "
649 ** Failers
650No match
651 b\"11111
652No match
653
654/(?:(?1)|B)(A(*F)|C)/
655 ABCD
656 0: BC
657 1: C
658 CCD
659 0: CC
660 1: C
661 ** Failers
662No match
663 CAD
664No match
665
666/^(?:(?1)|B)(A(*F)|C)/
667 CCD
668 0: CC
669 1: C
670 BCD
671 0: BC
672 1: C
673 ** Failers
674No match
675 ABCD
676No match
677 CAD
678No match
679 BAD
680No match
681
682/(?:(?1)|B)(A(*ACCEPT)XX|C)D/
683 AAD
684 0: AA
685 1: A
686 ACD
687 0: ACD
688 1: C
689 BAD
690 0: BA
691 1: A
692 BCD
693 0: BCD
694 1: C
695 BAX
696 0: BA
697 1: A
698 ** Failers
699No match
700 ACX
701No match
702 ABC
703No match
704
705/(?(DEFINE)(A))B(?1)C/
706 BAC
707 0: BAC
708
709/(?(DEFINE)((A)\2))B(?1)C/
710 BAAC
711 0: BAAC
712
713/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
714 (ab(cd)ef)
715 0: (ab(cd)ef)
716 1: (ab(cd)ef)
717 2: ef
718
719/^(?!a(*SKIP)b)/
720 ac
721 0:
722
723/^(?=a(*SKIP)b|ac)/
724 ** Failers
725No match
726 ac
727No match
728
729/^(?=a(*THEN)b|ac)/
730 ac
731 0:
732
733/^(?=a(*PRUNE)b)/
734 ab
735 0:
736 ** Failers
737No match
738 ac
739No match
740
741/^(?=a(*ACCEPT)b)/
742 ac
743 0:
744
745/^(?(?!a(*SKIP)b))/
746 ac
747 0:
748
749/(?>a\Kb)/
750 ab
751 0: b
752
753/((?>a\Kb))/
754 ab
755 0: b
756 1: ab
757
758/(a\Kb)/
759 ab
760 0: b
761 1: ab
762
763/^a\Kcz|ac/
764 ac
765 0: ac
766
767/(?>a\Kbz|ab)/
768 ab
769 0: ab
770
771/^(?&t)(?(DEFINE)(?<t>a\Kb))$/
772 ab
773 0: b
774
775/^([^()]|\((?1)*\))*$/
776 a(b)c
777 0: a(b)c
778 1: c
779 a(b(c)d)e
780 0: a(b(c)d)e
781 1: e
782
783/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
784 0
785 0: 0
786 1: 0
787 00
788 0: 00
789 1: 00
790 2: 0
791 0000
792 0: 0000
793 1: 0000
794 2: 0
795
796/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
797 0
798 0: 0
799 1: 0
800 2: 0
801 00
802 0: 0
803 1: 0
804 2: 0
805 0000
806 0: 0
807 1: 0
808 2: 0
809
810/--- This one does fail, as expected, in Perl. It needs the complex item at the
811 end of the pattern. A single letter instead of (B|D) makes it not fail,
812 which I think is a Perl bug. --- /
813
814/A(*COMMIT)(B|D)/
815 ACABX
816No match
817
818/--- Check the use of names for failure ---/
819
820/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
821 ** Failers
822No match
823 AC
824No match, mark = A
825 CB
826No match, mark = B
827
828/--- Force no study, otherwise mark is not seen. The studied version is in
829 test 2 because it isn't Perl-compatible. ---/
830
831/(*MARK:A)(*SKIP:B)(C|X)/KSS
832 C
833 0: C
834 1: C
835MK: A
836 D
837No match, mark = A
838
839/^(A(*THEN:A)B|C(*THEN:B)D)/K
840 ** Failers
841No match
842 CB
843No match, mark = B
844
845/^(?:A(*THEN:A)B|C(*THEN:B)D)/K
846 CB
847No match, mark = B
848
849/^(?>A(*THEN:A)B|C(*THEN:B)D)/K
850 CB
851No match, mark = B
852
853/--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
854that we have to have something complicated such as (B|Z) at the end because,
855for Perl, a simple character somehow causes an unwanted optimization to mess
856with the handling of backtracking verbs. ---/
857
858/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
859 AAAC
860 0: AC
861
862/--- Test skipping over a non-matching mark. ---/
863
864/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
865 AAAC
866 0: AC
867
868/--- Check shorthand for MARK ---/
869
870/A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
871 AAAC
872 0: AC
873
874/--- Don't loop! Force no study, otherwise mark is not seen. ---/
875
876/(*:A)A+(*SKIP:A)(B|Z)/KSS
877 AAAC
878No match, mark = A
879
880/--- This should succeed, as a non-existent skip name disables the skip ---/
881
882/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
883 AAAC
884 0: AC
885
886/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
887 AAAC
888 0: AC
889MK: B
890
891/--- COMMIT at the start of a pattern should act like an anchor. Again,
892however, we need the complication for Perl. ---/
893
894/(*COMMIT)(A|P)(B|P)(C|P)/
895 ABCDEFG
896 0: ABC
897 1: A
898 2: B
899 3: C
900 ** Failers
901No match
902 DEFGABC
903No match
904
905/--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
906
907/(\w+)(?>b(*COMMIT))\w{2}/
908 abbb
909 0: abbb
910 1: a
911
912/(\w+)b(*COMMIT)\w{2}/
913 abbb
914No match
915
916/--- Check opening parens in comment when seeking forward reference. ---/
917
918/(?&t)(?#()(?(DEFINE)(?<t>a))/
919 bac
920 0: a
921
922/--- COMMIT should override THEN ---/
923
924/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
925 yes
926No match
927
928/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
929 yes
930No match
931
932/b?(*SKIP)c/
933 bc
934 0: bc
935 abc
936 0: bc
937
938/(*SKIP)bc/
939 a
940No match
941
942/(*SKIP)b/
943 a
944No match
945
946/(?P<abn>(?P=abn)xxx|)+/
947 xxx
948 0:
949 1:
950
951/(?i:([^b]))(?1)/
952 aa
953 0: aa
954 1: a
955 aA
956 0: aA
957 1: a
958 ** Failers
959 0: **
960 1: *
961 ab
962No match
963 aB
964No match
965 Ba
966No match
967 ba
968No match
969
970/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
971 aaaaaaX
972 0: aaaaaaX
973 ** Failers
974No match
975 aaaaaa
976No match
977
978/^(?&t)*(?(DEFINE)(?<t>a))\w$/
979 aaaaaaX
980 0: aaaaaaX
981 aaaaaa
982 0: aaaaaa
983
984/^(a)*+(\w)/
985 aaaaX
986 0: aaaaX
987 1: a
988 2: X
989 YZ
990 0: Y
991 1: <unset>
992 2: Y
993 ** Failers
994No match
995 aaaa
996No match
997
998/^(?:a)*+(\w)/
999 aaaaX
1000 0: aaaaX
1001 1: X
1002 YZ
1003 0: Y
1004 1: Y
1005 ** Failers
1006No match
1007 aaaa
1008No match
1009
1010/^(a)++(\w)/
1011 aaaaX
1012 0: aaaaX
1013 1: a
1014 2: X
1015 ** Failers
1016No match
1017 aaaa
1018No match
1019 YZ
1020No match
1021
1022/^(?:a)++(\w)/
1023 aaaaX
1024 0: aaaaX
1025 1: X
1026 ** Failers
1027No match
1028 aaaa
1029No match
1030 YZ
1031No match
1032
1033/^(a)?+(\w)/
1034 aaaaX
1035 0: aa
1036 1: a
1037 2: a
1038 YZ
1039 0: Y
1040 1: <unset>
1041 2: Y
1042
1043/^(?:a)?+(\w)/
1044 aaaaX
1045 0: aa
1046 1: a
1047 YZ
1048 0: Y
1049 1: Y
1050
1051/^(a){2,}+(\w)/
1052 aaaaX
1053 0: aaaaX
1054 1: a
1055 2: X
1056 ** Failers
1057No match
1058 aaa
1059No match
1060 YZ
1061No match
1062
1063/^(?:a){2,}+(\w)/
1064 aaaaX
1065 0: aaaaX
1066 1: X
1067 ** Failers
1068No match
1069 aaa
1070No match
1071 YZ
1072No match
1073
1074/(a|)*(?1)b/
1075 b
1076 0: b
1077 1:
1078 ab
1079 0: ab
1080 1:
1081 aab
1082 0: aab
1083 1:
1084
1085/(a)++(?1)b/
1086 ** Failers
1087No match
1088 ab
1089No match
1090 aab
1091No match
1092
1093/(a)*+(?1)b/
1094 ** Failers
1095No match
1096 ab
1097No match
1098 aab
1099No match
1100
1101/(?1)(?:(b)){0}/
1102 b
1103 0: b
1104
1105/(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
1106 foo(bar(baz)+baz(bop))
1107 0: foo(bar(baz)+baz(bop))
1108 1: foo(bar(baz)+baz(bop))
1109 2: (bar(baz)+baz(bop))
1110 3: bar(baz)+baz(bop)
1111
1112/(A (A|B(*ACCEPT)|C) D)(E)/x
1113 AB
1114 0: AB
1115 1: AB
1116 2: B
1117
1118/\A.*?(?:a|b(*THEN)c)/
1119 ba
1120 0: ba
1121
1122/\A.*?(?:a|bc)/
1123 ba
1124 0: ba
1125
1126/\A.*?(a|b(*THEN)c)/
1127 ba
1128 0: ba
1129 1: a
1130
1131/\A.*?(a|bc)/
1132 ba
1133 0: ba
1134 1: a
1135
1136/\A.*?(?:a|b(*THEN)c)++/
1137 ba
1138 0: ba
1139
1140/\A.*?(?:a|bc)++/
1141 ba
1142 0: ba
1143
1144/\A.*?(a|b(*THEN)c)++/
1145 ba
1146 0: ba
1147 1: a
1148
1149/\A.*?(a|bc)++/
1150 ba
1151 0: ba
1152 1: a
1153
1154/\A.*?(?:a|b(*THEN)c|d)/
1155 ba
1156 0: ba
1157
1158/\A.*?(?:a|bc|d)/
1159 ba
1160 0: ba
1161
1162/(?:(b))++/
1163 beetle
1164 0: b
1165 1: b
1166
1167/(?(?=(a(*ACCEPT)z))a)/
1168 a
1169 0: a
1170 1: a
1171
1172/^(a)(?1)+ab/
1173 aaaab
1174 0: aaaab
1175 1: a
1176
1177/^(a)(?1)++ab/
1178 aaaab
1179No match
1180
1181/^(?=a(*:M))aZ/K
1182 aZbc
1183 0: aZ
1184MK: M
1185
1186/^(?!(*:M)b)aZ/K
1187 aZbc
1188 0: aZ
1189
1190/(?(DEFINE)(a))?b(?1)/
1191 backgammon
1192 0: ba
1193
1194/^\N+/
1195 abc\ndef
1196 0: abc
1197
1198/^\N{1,}/
1199 abc\ndef
1200 0: abc
1201
1202/(?(R)a+|(?R)b)/
1203 aaaabcde
1204 0: aaaab
1205
1206/(?(R)a+|((?R))b)/
1207 aaaabcde
1208 0: aaaab
1209 1: aaaa
1210
1211/((?(R)a+|(?1)b))/
1212 aaaabcde
1213 0: aaaab
1214 1: aaaab
1215
1216/((?(R1)a+|(?1)b))/
1217 aaaabcde
1218 0: aaaab
1219 1: aaaab
1220
1221/a(*:any
1222name)/K
1223 abc
1224 0: a
1225MK: any
1226name
1227
1228/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
1229 a
1230 0: a
1231 ba
1232 0: a
1233 bba
1234 0: a
1235
1236/--- Checking revised (*THEN) handling ---/
1237
1238/--- Capture ---/
1239
1240/^.*? (a(*THEN)b) c/x
1241 aabc
1242No match
1243
1244/^.*? (a(*THEN)b|(*F)) c/x
1245 aabc
1246 0: aabc
1247 1: ab
1248
1249/^.*? ( (a(*THEN)b) | (*F) ) c/x
1250 aabc
1251 0: aabc
1252 1: ab
1253 2: ab
1254
1255/^.*? ( (a(*THEN)b) ) c/x
1256 aabc
1257No match
1258
1259/--- Non-capture ---/
1260
1261/^.*? (?:a(*THEN)b) c/x
1262 aabc
1263No match
1264
1265/^.*? (?:a(*THEN)b|(*F)) c/x
1266 aabc
1267 0: aabc
1268
1269/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
1270 aabc
1271 0: aabc
1272
1273/^.*? (?: (?:a(*THEN)b) ) c/x
1274 aabc
1275No match
1276
1277/--- Atomic ---/
1278
1279/^.*? (?>a(*THEN)b) c/x
1280 aabc
1281No match
1282
1283/^.*? (?>a(*THEN)b|(*F)) c/x
1284 aabc
1285 0: aabc
1286
1287/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
1288 aabc
1289 0: aabc
1290
1291/^.*? (?> (?>a(*THEN)b) ) c/x
1292 aabc
1293No match
1294
1295/--- Possessive capture ---/
1296
1297/^.*? (a(*THEN)b)++ c/x
1298 aabc
1299No match
1300
1301/^.*? (a(*THEN)b|(*F))++ c/x
1302 aabc
1303 0: aabc
1304 1: ab
1305
1306/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
1307 aabc
1308 0: aabc
1309 1: ab
1310 2: ab
1311
1312/^.*? ( (a(*THEN)b)++ )++ c/x
1313 aabc
1314No match
1315
1316/--- Possessive non-capture ---/
1317
1318/^.*? (?:a(*THEN)b)++ c/x
1319 aabc
1320No match
1321
1322/^.*? (?:a(*THEN)b|(*F))++ c/x
1323 aabc
1324 0: aabc
1325
1326/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
1327 aabc
1328 0: aabc
1329
1330/^.*? (?: (?:a(*THEN)b)++ )++ c/x
1331 aabc
1332No match
1333
1334/--- Condition assertion ---/
1335
1336/^(?(?=a(*THEN)b)ab|ac)/
1337 ac
1338 0: ac
1339
1340/--- Condition ---/
1341
1342/^.*?(?(?=a)a|b(*THEN)c)/
1343 ba
1344No match
1345
1346/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
1347 ba
1348 0: ba
1349
1350/^.*?(?(?=a)a(*THEN)b|c)/
1351 ac
1352No match
1353
1354/--- Assertion ---/
1355
1356/^.*(?=a(*THEN)b)/
1357 aabc
1358 0: a
1359
1360/------------------------------/
1361
1362/(?>a(*:m))/imsxSK
1363 a
1364 0: a
1365MK: m
1366
1367/(?>(a)(*:m))/imsxSK
1368 a
1369 0: a
1370 1: a
1371MK: m
1372
1373/(?<=a(*ACCEPT)b)c/
1374 xacd
1375 0: c
1376
1377/(?<=(a(*ACCEPT)b))c/
1378 xacd
1379 0: c
1380 1: a
1381
1382/(?<=(a(*COMMIT)b))c/
1383 xabcd
1384 0: c
1385 1: ab
1386 ** Failers
1387No match
1388 xacd
1389No match
1390
1391/(?<!a(*FAIL)b)c/
1392 xcd
1393 0: c
1394 acd
1395 0: c
1396
1397/(?<=a(*:N)b)c/K
1398 xabcd
1399 0: c
1400MK: N
1401
1402/(?<=a(*PRUNE)b)c/
1403 xabcd
1404 0: c
1405
1406/(?<=a(*SKIP)b)c/
1407 xabcd
1408 0: c
1409
1410/(?<=a(*THEN)b)c/
1411 xabcd
1412 0: c
1413
1414/(a)(?2){2}(.)/
1415 abcd
1416 0: abcd
1417 1: a
1418 2: d
1419
1420/(*MARK:A)(*PRUNE:B)(C|X)/KS
1421 C
1422 0: C
1423 1: C
1424MK: B
1425 D
1426No match, mark = B
1427
1428/(*MARK:A)(*PRUNE:B)(C|X)/KSS
1429 C
1430 0: C
1431 1: C
1432MK: B
1433 D
1434No match, mark = B
1435
1436/(*MARK:A)(*THEN:B)(C|X)/KS
1437 C
1438 0: C
1439 1: C
1440MK: B
1441 D
1442No match, mark = B
1443
1444/(*MARK:A)(*THEN:B)(C|X)/KSY
1445 C
1446 0: C
1447 1: C
1448MK: B
1449 D
1450No match, mark = B
1451
1452/(*MARK:A)(*THEN:B)(C|X)/KSS
1453 C
1454 0: C
1455 1: C
1456MK: B
1457 D
1458No match, mark = B
1459
1460/--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
1461
1462/A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
1463 AAAC
1464No match, mark = A
1465
1466/--- Same --/
1467
1468/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
1469 AAAC
1470No match, mark = B
1471
1472/A(*:A)A+(*SKIP)(B|Z) | AC/xK
1473 AAAC
1474No match, mark = A
1475
1476/--- This should fail, as a null name is the same as no name ---/
1477
1478/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
1479 AAAC
1480No match, mark = A
1481
1482/--- A check on what happens after hitting a mark and them bumping along to
1483something that does not even start. Perl reports tags after the failures here,
1484though it does not when the individual letters are made into something
1485more complicated. ---/
1486
1487/A(*:A)B|XX(*:B)Y/K
1488 AABC
1489 0: AB
1490MK: A
1491 XXYZ
1492 0: XXY
1493MK: B
1494 ** Failers
1495No match
1496 XAQQ
1497No match, mark = A
1498 XAQQXZZ
1499No match, mark = A
1500 AXQQQ
1501No match, mark = A
1502 AXXQQQ
1503No match, mark = B
1504
1505/^(A(*THEN:A)B|C(*THEN:B)D)/K
1506 AB
1507 0: AB
1508 1: AB
1509MK: A
1510 CD
1511 0: CD
1512 1: CD
1513MK: B
1514 ** Failers
1515No match
1516 AC
1517No match, mark = A
1518 CB
1519No match, mark = B
1520
1521/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
1522 AB
1523 0: AB
1524 1: AB
1525MK: A
1526 CD
1527 0: CD
1528 1: CD
1529MK: B
1530 ** Failers
1531No match
1532 AC
1533No match, mark = A
1534 CB
1535No match, mark = B
1536
1537/--- An empty name does not pass back an empty string. It is the same as if no
1538name were given. ---/
1539
1540/^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
1541 AB
1542 0: AB
1543 1: AB
1544 CD
1545 0: CD
1546 1: CD
1547MK: B
1548
1549/--- PRUNE goes to next bumpalong; COMMIT does not. ---/
1550
1551/A(*PRUNE:A)B/K
1552 ACAB
1553 0: AB
1554MK: A
1555
1556/--- Mark names can be duplicated ---/
1557
1558/A(*:A)B|X(*:A)Y/K
1559 AABC
1560 0: AB
1561MK: A
1562 XXYZ
1563 0: XY
1564MK: A
1565
1566/b(*:m)f|a(*:n)w/K
1567 aw
1568 0: aw
1569MK: n
1570 ** Failers
1571No match, mark = n
1572 abc
1573No match, mark = m
1574
1575/b(*:m)f|aw/K
1576 abaw
1577 0: aw
1578 ** Failers
1579No match
1580 abc
1581No match, mark = m
1582 abax
1583No match, mark = m
1584
1585/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
1586 AAAC
1587 0: AAC
1588
1589/a(*PRUNE:X)bc|qq/KY
1590 ** Failers
1591No match, mark = X
1592 axy
1593No match, mark = X
1594
1595/a(*THEN:X)bc|qq/KY
1596 ** Failers
1597No match, mark = X
1598 axy
1599No match, mark = X
1600
1601/(?=a(*MARK:A)b)..x/K
1602 abxy
1603 0: abx
1604MK: A
1605 ** Failers
1606No match
1607 abpq
1608No match
1609
1610/(?=a(*MARK:A)b)..(*:Y)x/K
1611 abxy
1612 0: abx
1613MK: Y
1614 ** Failers
1615No match
1616 abpq
1617No match
1618
1619/(?=a(*PRUNE:A)b)..x/K
1620 abxy
1621 0: abx
1622MK: A
1623 ** Failers
1624No match
1625 abpq
1626No match
1627
1628/(?=a(*PRUNE:A)b)..(*:Y)x/K
1629 abxy
1630 0: abx
1631MK: Y
1632 ** Failers
1633No match
1634 abpq
1635No match
1636
1637/(?=a(*THEN:A)b)..x/K
1638 abxy
1639 0: abx
1640MK: A
1641 ** Failers
1642No match
1643 abpq
1644No match
1645
1646/(?=a(*THEN:A)b)..(*:Y)x/K
1647 abxy
1648 0: abx
1649MK: Y
1650 ** Failers
1651No match
1652 abpq
1653No match
1654
1655/-- End of testinput11 --/