blob: 0f33cb1b4a8030be0fd10021e896e6631bb0682b [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 X\x09X\x0b
6 ** Failers
7 \xa0 X\x0a
8
9/\H*\h+\V?\v{3,4}/
10 \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
11 \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
12 \x09\x20\xa0\x0a\x0b\x0c
13 ** Failers
14 \x09\x20\xa0\x0a\x0b
15
16/\H{3,4}/
17 XY ABCDE
18 XY PQR ST
19
20/.\h{3,4}./
21 XY AB PQRS
22
23/\h*X\h?\H+Y\H?Z/
24 >XNNNYZ
25 > X NYQZ
26 ** Failers
27 >XYZ
28 > X NY Z
29
30/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
31 >XY\x0aZ\x0aA\x0bNN\x0c
32 >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
33
34/(foo)\Kbar/
35 foobar
36
37/(foo)(\Kbar|baz)/
38 foobar
39 foobaz
40
41/(foo\Kbar)baz/
42 foobarbaz
43
44/abc\K|def\K/g+
45 Xabcdefghi
46
47/ab\Kc|de\Kf/g+
48 Xabcdefghi
49
50/(?=C)/g+
51 ABCDECBA
52
53/^abc\K/+
54 abcdef
55 ** Failers
56 defabcxyz
57
58/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
59 ababababbbabZXXXX
60
61/(?<A>tom|bon)-\g{A}/
62 tom-tom
63 bon-bon
64
65/(^(a|b\g{-1}))/
66 bacxxx
67
68/(?|(abc)|(xyz))\1/
69 abcabc
70 xyzxyz
71 ** Failers
72 abcxyz
73 xyzabc
74
75/(?|(abc)|(xyz))(?1)/
76 abcabc
77 xyzabc
78 ** Failers
79 xyzxyz
80
81/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
82 XYabcdY
83
84/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
85 XYabcdY
86
87/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
88 XYabcdY
89
90/(?'abc'\w+):\k<abc>{2}/
91 a:aaxyz
92 ab:ababxyz
93 ** Failers
94 a:axyz
95 ab:abxyz
96
97/(?'abc'\w+):\g{abc}{2}/
98 a:aaxyz
99 ab:ababxyz
100 ** Failers
101 a:axyz
102 ab:abxyz
103
104/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
105 abd
106 ce
107
108/^(a.)\g-1Z/
109 aXaXZ
110
111/^(a.)\g{-1}Z/
112 aXaXZ
113
114/^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
115 abcd
116
117/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
118 (?(DEFINE)
119 (?<NAME_PAT>[a-z]+)
120 (?<ADDRESS_PAT>\d+)
121 )/x
122 metcalfe 33
123
124/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
125 1.2.3.4
126 131.111.10.206
127 10.0.0.0
128 ** Failers
129 10.6
130 455.3.4.5
131
132/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
133 1.2.3.4
134 131.111.10.206
135 10.0.0.0
136 ** Failers
137 10.6
138 455.3.4.5
139
140/^(\w++|\s++)*$/
141 now is the time for all good men to come to the aid of the party
142 *** Failers
143 this is not a line with only words and spaces!
144
145/(\d++)(\w)/
146 12345a
147 *** Failers
148 12345+
149
150/a++b/
151 aaab
152
153/(a++b)/
154 aaab
155
156/(a++)b/
157 aaab
158
159/([^()]++|\([^()]*\))+/
160 ((abc(ade)ufh()()x
161
162/\(([^()]++|\([^()]+\))+\)/
163 (abc)
164 (abc(def)xyz)
165 *** Failers
166 ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
167
168/^([^()]|\((?1)*\))*$/
169 abc
170 a(b)c
171 a(b(c))d
172 *** Failers)
173 a(b(c)d
174
175/^>abc>([^()]|\((?1)*\))*<xyz<$/
176 >abc>123<xyz<
177 >abc>1(2)3<xyz<
178 >abc>(1(2)3)<xyz<
179
180/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
181 1221
182 Satanoscillatemymetallicsonatas
183 AmanaplanacanalPanama
184 AblewasIereIsawElba
185 *** Failers
186 Thequickbrownfox
187
188/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
189 12
190 (((2+2)*-3)-7)
191 -12
192 *** Failers
193 ((2+2)*-3)-7)
194
195/^(x(y|(?1){2})z)/
196 xyz
197 xxyzxyzz
198 *** Failers
199 xxyzz
200 xxyzxyzxyzz
201
202/((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
203 <>
204 <abcd>
205 <abc <123> hij>
206 <abc <def> hij>
207 <abc<>def>
208 <abc<>
209 *** Failers
210 <abc
211
212/^a+(*FAIL)/
213 aaaaaa
214
215/a+b?c+(*FAIL)/
216 aaabccc
217
218/a+b?(*PRUNE)c+(*FAIL)/
219 aaabccc
220
221/a+b?(*COMMIT)c+(*FAIL)/
222 aaabccc
223
224/a+b?(*SKIP)c+(*FAIL)/
225 aaabcccaaabccc
226
227/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
228 aaaxxxxxx
229 aaa++++++
230 bbbxxxxx
231 bbb+++++
232 cccxxxx
233 ccc++++
234 dddddddd
235
236/^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
237 aaaxxxxxx
238 aaa++++++
239 bbbxxxxx
240 bbb+++++
241 cccxxxx
242 ccc++++
243 dddddddd
244
245/a+b?(*THEN)c+(*FAIL)/
246 aaabccc
247
248/(A (A|B(*ACCEPT)|C) D)(E)/x
249 AB
250 ABX
251 AADE
252 ACDE
253 ** Failers
254 AD
255
256/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
257 1221
258 Satan, oscillate my metallic sonatas!
259 A man, a plan, a canal: Panama!
260 Able was I ere I saw Elba.
261 *** Failers
262 The quick brown fox
263
264/^((.)(?1)\2|.)$/
265 a
266 aba
267 aabaa
268 abcdcba
269 pqaabaaqp
270 ablewasiereisawelba
271 rhubarb
272 the quick brown fox
273
274/(a)(?<=b(?1))/
275 baz
276 ** Failers
277 caz
278
279/(?<=b(?1))(a)/
280 zbaaz
281 ** Failers
282 aaa
283
284/(?<X>a)(?<=b(?&X))/
285 baz
286
287/^(?|(abc)|(def))\1/
288 abcabc
289 defdef
290 ** Failers
291 abcdef
292 defabc
293
294/^(?|(abc)|(def))(?1)/
295 abcabc
296 defabc
297 ** Failers
298 defdef
299 abcdef
300
301/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
302 a\"aaaaa
303 b\"aaaaa
304 ** Failers
305 b\"11111
306
307/(?:(?1)|B)(A(*F)|C)/
308 ABCD
309 CCD
310 ** Failers
311 CAD
312
313/^(?:(?1)|B)(A(*F)|C)/
314 CCD
315 BCD
316 ** Failers
317 ABCD
318 CAD
319 BAD
320
321/(?:(?1)|B)(A(*ACCEPT)XX|C)D/
322 AAD
323 ACD
324 BAD
325 BCD
326 BAX
327 ** Failers
328 ACX
329 ABC
330
331/(?(DEFINE)(A))B(?1)C/
332 BAC
333
334/(?(DEFINE)((A)\2))B(?1)C/
335 BAAC
336
337/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
338 (ab(cd)ef)
339
340/^(?!a(*SKIP)b)/
341 ac
342
343/^(?=a(*SKIP)b|ac)/
344 ** Failers
345 ac
346
347/^(?=a(*THEN)b|ac)/
348 ac
349
350/^(?=a(*PRUNE)b)/
351 ab
352 ** Failers
353 ac
354
355/^(?=a(*ACCEPT)b)/
356 ac
357
358/^(?(?!a(*SKIP)b))/
359 ac
360
361/(?>a\Kb)/
362 ab
363
364/((?>a\Kb))/
365 ab
366
367/(a\Kb)/
368 ab
369
370/^a\Kcz|ac/
371 ac
372
373/(?>a\Kbz|ab)/
374 ab
375
376/^(?&t)(?(DEFINE)(?<t>a\Kb))$/
377 ab
378
379/^([^()]|\((?1)*\))*$/
380 a(b)c
381 a(b(c)d)e
382
383/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
384 0
385 00
386 0000
387
388/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
389 0
390 00
391 0000
392
393/--- This one does fail, as expected, in Perl. It needs the complex item at the
394 end of the pattern. A single letter instead of (B|D) makes it not fail,
395 which I think is a Perl bug. --- /
396
397/A(*COMMIT)(B|D)/
398 ACABX
399
400/--- Check the use of names for failure ---/
401
402/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
403 ** Failers
404 AC
405 CB
406
407/--- Force no study, otherwise mark is not seen. The studied version is in
408 test 2 because it isn't Perl-compatible. ---/
409
410/(*MARK:A)(*SKIP:B)(C|X)/KSS
411 C
412 D
413
414/^(A(*THEN:A)B|C(*THEN:B)D)/K
415 ** Failers
416 CB
417
418/^(?:A(*THEN:A)B|C(*THEN:B)D)/K
419 CB
420
421/^(?>A(*THEN:A)B|C(*THEN:B)D)/K
422 CB
423
424/--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
425that we have to have something complicated such as (B|Z) at the end because,
426for Perl, a simple character somehow causes an unwanted optimization to mess
427with the handling of backtracking verbs. ---/
428
429/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
430 AAAC
431
432/--- Test skipping over a non-matching mark. ---/
433
434/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
435 AAAC
436
437/--- Check shorthand for MARK ---/
438
439/A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
440 AAAC
441
442/--- Don't loop! Force no study, otherwise mark is not seen. ---/
443
444/(*:A)A+(*SKIP:A)(B|Z)/KSS
445 AAAC
446
447/--- This should succeed, as a non-existent skip name disables the skip ---/
448
449/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
450 AAAC
451
452/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
453 AAAC
454
455/--- COMMIT at the start of a pattern should act like an anchor. Again,
456however, we need the complication for Perl. ---/
457
458/(*COMMIT)(A|P)(B|P)(C|P)/
459 ABCDEFG
460 ** Failers
461 DEFGABC
462
463/--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
464
465/(\w+)(?>b(*COMMIT))\w{2}/
466 abbb
467
468/(\w+)b(*COMMIT)\w{2}/
469 abbb
470
471/--- Check opening parens in comment when seeking forward reference. ---/
472
473/(?&t)(?#()(?(DEFINE)(?<t>a))/
474 bac
475
476/--- COMMIT should override THEN ---/
477
478/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
479 yes
480
481/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
482 yes
483
484/b?(*SKIP)c/
485 bc
486 abc
487
488/(*SKIP)bc/
489 a
490
491/(*SKIP)b/
492 a
493
494/(?P<abn>(?P=abn)xxx|)+/
495 xxx
496
497/(?i:([^b]))(?1)/
498 aa
499 aA
500 ** Failers
501 ab
502 aB
503 Ba
504 ba
505
506/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
507 aaaaaaX
508 ** Failers
509 aaaaaa
510
511/^(?&t)*(?(DEFINE)(?<t>a))\w$/
512 aaaaaaX
513 aaaaaa
514
515/^(a)*+(\w)/
516 aaaaX
517 YZ
518 ** Failers
519 aaaa
520
521/^(?:a)*+(\w)/
522 aaaaX
523 YZ
524 ** Failers
525 aaaa
526
527/^(a)++(\w)/
528 aaaaX
529 ** Failers
530 aaaa
531 YZ
532
533/^(?:a)++(\w)/
534 aaaaX
535 ** Failers
536 aaaa
537 YZ
538
539/^(a)?+(\w)/
540 aaaaX
541 YZ
542
543/^(?:a)?+(\w)/
544 aaaaX
545 YZ
546
547/^(a){2,}+(\w)/
548 aaaaX
549 ** Failers
550 aaa
551 YZ
552
553/^(?:a){2,}+(\w)/
554 aaaaX
555 ** Failers
556 aaa
557 YZ
558
559/(a|)*(?1)b/
560 b
561 ab
562 aab
563
564/(a)++(?1)b/
565 ** Failers
566 ab
567 aab
568
569/(a)*+(?1)b/
570 ** Failers
571 ab
572 aab
573
574/(?1)(?:(b)){0}/
575 b
576
577/(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
578 foo(bar(baz)+baz(bop))
579
580/(A (A|B(*ACCEPT)|C) D)(E)/x
581 AB
582
583/\A.*?(?:a|b(*THEN)c)/
584 ba
585
586/\A.*?(?:a|bc)/
587 ba
588
589/\A.*?(a|b(*THEN)c)/
590 ba
591
592/\A.*?(a|bc)/
593 ba
594
595/\A.*?(?:a|b(*THEN)c)++/
596 ba
597
598/\A.*?(?:a|bc)++/
599 ba
600
601/\A.*?(a|b(*THEN)c)++/
602 ba
603
604/\A.*?(a|bc)++/
605 ba
606
607/\A.*?(?:a|b(*THEN)c|d)/
608 ba
609
610/\A.*?(?:a|bc|d)/
611 ba
612
613/(?:(b))++/
614 beetle
615
616/(?(?=(a(*ACCEPT)z))a)/
617 a
618
619/^(a)(?1)+ab/
620 aaaab
621
622/^(a)(?1)++ab/
623 aaaab
624
625/^(?=a(*:M))aZ/K
626 aZbc
627
628/^(?!(*:M)b)aZ/K
629 aZbc
630
631/(?(DEFINE)(a))?b(?1)/
632 backgammon
633
634/^\N+/
635 abc\ndef
636
637/^\N{1,}/
638 abc\ndef
639
640/(?(R)a+|(?R)b)/
641 aaaabcde
642
643/(?(R)a+|((?R))b)/
644 aaaabcde
645
646/((?(R)a+|(?1)b))/
647 aaaabcde
648
649/((?(R1)a+|(?1)b))/
650 aaaabcde
651
652/a(*:any
653name)/K
654 abc
655
656/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
657 a
658 ba
659 bba
660
661/--- Checking revised (*THEN) handling ---/
662
663/--- Capture ---/
664
665/^.*? (a(*THEN)b) c/x
666 aabc
667
668/^.*? (a(*THEN)b|(*F)) c/x
669 aabc
670
671/^.*? ( (a(*THEN)b) | (*F) ) c/x
672 aabc
673
674/^.*? ( (a(*THEN)b) ) c/x
675 aabc
676
677/--- Non-capture ---/
678
679/^.*? (?:a(*THEN)b) c/x
680 aabc
681
682/^.*? (?:a(*THEN)b|(*F)) c/x
683 aabc
684
685/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
686 aabc
687
688/^.*? (?: (?:a(*THEN)b) ) c/x
689 aabc
690
691/--- Atomic ---/
692
693/^.*? (?>a(*THEN)b) c/x
694 aabc
695
696/^.*? (?>a(*THEN)b|(*F)) c/x
697 aabc
698
699/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
700 aabc
701
702/^.*? (?> (?>a(*THEN)b) ) c/x
703 aabc
704
705/--- Possessive capture ---/
706
707/^.*? (a(*THEN)b)++ c/x
708 aabc
709
710/^.*? (a(*THEN)b|(*F))++ c/x
711 aabc
712
713/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
714 aabc
715
716/^.*? ( (a(*THEN)b)++ )++ c/x
717 aabc
718
719/--- Possessive non-capture ---/
720
721/^.*? (?:a(*THEN)b)++ c/x
722 aabc
723
724/^.*? (?:a(*THEN)b|(*F))++ c/x
725 aabc
726
727/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
728 aabc
729
730/^.*? (?: (?:a(*THEN)b)++ )++ c/x
731 aabc
732
733/--- Condition assertion ---/
734
735/^(?(?=a(*THEN)b)ab|ac)/
736 ac
737
738/--- Condition ---/
739
740/^.*?(?(?=a)a|b(*THEN)c)/
741 ba
742
743/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
744 ba
745
746/^.*?(?(?=a)a(*THEN)b|c)/
747 ac
748
749/--- Assertion ---/
750
751/^.*(?=a(*THEN)b)/
752 aabc
753
754/------------------------------/
755
756/(?>a(*:m))/imsxSK
757 a
758
759/(?>(a)(*:m))/imsxSK
760 a
761
762/(?<=a(*ACCEPT)b)c/
763 xacd
764
765/(?<=(a(*ACCEPT)b))c/
766 xacd
767
768/(?<=(a(*COMMIT)b))c/
769 xabcd
770 ** Failers
771 xacd
772
773/(?<!a(*FAIL)b)c/
774 xcd
775 acd
776
777/(?<=a(*:N)b)c/K
778 xabcd
779
780/(?<=a(*PRUNE)b)c/
781 xabcd
782
783/(?<=a(*SKIP)b)c/
784 xabcd
785
786/(?<=a(*THEN)b)c/
787 xabcd
788
789/(a)(?2){2}(.)/
790 abcd
791
792/(*MARK:A)(*PRUNE:B)(C|X)/KS
793 C
794 D
795
796/(*MARK:A)(*PRUNE:B)(C|X)/KSS
797 C
798 D
799
800/(*MARK:A)(*THEN:B)(C|X)/KS
801 C
802 D
803
804/(*MARK:A)(*THEN:B)(C|X)/KSY
805 C
806 D
807
808/(*MARK:A)(*THEN:B)(C|X)/KSS
809 C
810 D
811
812/--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
813
814/A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
815 AAAC
816
817/--- Same --/
818
819/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
820 AAAC
821
822/A(*:A)A+(*SKIP)(B|Z) | AC/xK
823 AAAC
824
825/--- This should fail, as a null name is the same as no name ---/
826
827/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
828 AAAC
829
830/--- A check on what happens after hitting a mark and them bumping along to
831something that does not even start. Perl reports tags after the failures here,
832though it does not when the individual letters are made into something
833more complicated. ---/
834
835/A(*:A)B|XX(*:B)Y/K
836 AABC
837 XXYZ
838 ** Failers
839 XAQQ
840 XAQQXZZ
841 AXQQQ
842 AXXQQQ
843
844/^(A(*THEN:A)B|C(*THEN:B)D)/K
845 AB
846 CD
847 ** Failers
848 AC
849 CB
850
851/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
852 AB
853 CD
854 ** Failers
855 AC
856 CB
857
858/--- An empty name does not pass back an empty string. It is the same as if no
859name were given. ---/
860
861/^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
862 AB
863 CD
864
865/--- PRUNE goes to next bumpalong; COMMIT does not. ---/
866
867/A(*PRUNE:A)B/K
868 ACAB
869
870/--- Mark names can be duplicated ---/
871
872/A(*:A)B|X(*:A)Y/K
873 AABC
874 XXYZ
875
876/b(*:m)f|a(*:n)w/K
877 aw
878 ** Failers
879 abc
880
881/b(*:m)f|aw/K
882 abaw
883 ** Failers
884 abc
885 abax
886
887/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
888 AAAC
889
890/a(*PRUNE:X)bc|qq/KY
891 ** Failers
892 axy
893
894/a(*THEN:X)bc|qq/KY
895 ** Failers
896 axy
897
898/(?=a(*MARK:A)b)..x/K
899 abxy
900 ** Failers
901 abpq
902
903/(?=a(*MARK:A)b)..(*:Y)x/K
904 abxy
905 ** Failers
906 abpq
907
908/(?=a(*PRUNE:A)b)..x/K
909 abxy
910 ** Failers
911 abpq
912
913/(?=a(*PRUNE:A)b)..(*:Y)x/K
914 abxy
915 ** Failers
916 abpq
917
918/(?=a(*THEN:A)b)..x/K
919 abxy
920 ** Failers
921 abpq
922
923/(?=a(*THEN:A)b)..(*:Y)x/K
924 abxy
925 ** Failers
926 abpq
927
928/-- End of testinput11 --/