/[pcre]/code/trunk/testdata/testinput2
ViewVC logotype

Diff of /code/trunk/testdata/testinput2

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 247 by ph10, Mon Sep 17 09:38:32 2007 UTC revision 550 by ph10, Sun Oct 10 16:24:11 2010 UTC
# Line 1  Line 1 
1    /-- This set of tests is not Perl-compatible. It checks on special features
2        of PCRE's API, error diagnostics, and the compiled code of some patterns.
3        It also checks the non-Perl syntax the PCRE supports (Python, .NET,
4        Oniguruma). Finally, there are some tests where PCRE and Perl differ,
5        either because PCRE can't be compatible, or there is a possible Perl
6        bug. --/
7    
8    /-- Originally, the Perl 5.10 and 5.11 things were in here too, but now I have
9        separated many (most?) of them out into test 11. However, there may still
10        be some that were overlooked. --/
11    
12  /(a)b|/I  /(a)b|/I
13    
14  /abc/I  /abc/I
# Line 40  Line 51 
51    
52  /(?X)[\B]/  /(?X)[\B]/
53    
54    /(?X)[\R]/
55    
56    /(?X)[\X]/
57    
58    /[\B]/BZ
59    
60    /[\R]/BZ
61    
62    /[\X]/BZ
63    
64  /[z-a]/  /[z-a]/
65    
66  /^*/  /^*/
# Line 123  Line 144 
144      defabc      defabc
145      \Zdefabc      \Zdefabc
146    
147  /abc/IP  /abc/P
148      abc      abc
149      *** Failers      *** Failers
150    
151  /^abc|def/IP  /^abc|def/P
152      abcdef      abcdef
153      abcdef\B      abcdef\B
154    
155  /.*((abc)$|(def))/IP  /.*((abc)$|(def))/P
156      defabc      defabc
157      \Zdefabc      \Zdefabc
158    
159  /the quick brown fox/IP  /the quick brown fox/P
160      the quick brown fox      the quick brown fox
161      *** Failers      *** Failers
162      The Quick Brown Fox      The Quick Brown Fox
163    
164  /the quick brown fox/IPi  /the quick brown fox/Pi
165      the quick brown fox      the quick brown fox
166      The Quick Brown Fox      The Quick Brown Fox
167    
168  /abc.def/IP  /abc.def/P
169      *** Failers      *** Failers
170      abc\ndef      abc\ndef
171    
172  /abc$/IP  /abc$/P
173      abc      abc
174      abc\n      abc\n
175    
176  /(abc)\2/IP  /(abc)\2/P
177    
178  /(abc\1)/IP  /(abc\1)/P
179      abc      abc
180    
181  /)/  /)/
# Line 333  Line 354 
354      *** Failers      *** Failers
355      a      a
356    
357  /This one is here because I think Perl 5.005_02 gets the setting of $1 wrong/I  /This one is here because Perl behaves differently; see also the following/I
358    
359  /^(a\1?){4}$/I  /^(a\1?){4}$/I
360        aaaa
361      aaaaaa      aaaaaa
362    
363    /Perl does not fail these two for the final subjects. Neither did PCRE until/
364    /release 8.01. The problem is in backtracking into a subpattern that contains/
365    /a recursive reference to itself. PCRE has now made these into atomic patterns./
366    
367    /^(xa|=?\1a){2}$/
368        xa=xaa
369        ** Failers
370        xa=xaaa
371    
372    /^(xa|=?\1a)+$/
373        xa=xaa
374        ** Failers
375        xa=xaaa
376    
377  /These are syntax tests from Perl 5.005/I  /These are syntax tests from Perl 5.005/I
378    
# Line 398  Line 434 
434    
435  /(?(1?)a|b)/  /(?(1?)a|b)/
436    
 /(?(1)a|b|c)/  
   
437  /[a[:xyz:/  /[a[:xyz:/
438    
439  /(?<=x+)y/  /(?<=x+)y/
# Line 568  Line 602 
602    
603  /ab\d+/I  /ab\d+/I
604    
605  /a(?(1)b)/I  /a(?(1)b)(.)/I
606    
607  /a(?(1)bag|big)/I  /a(?(1)bag|big)(.)/I
608    
609  /a(?(1)bag|big)*/I  /a(?(1)bag|big)*(.)/I
610    
611  /a(?(1)bag|big)+/I  /a(?(1)bag|big)+(.)/I
612    
613  /a(?(1)b..|b..)/I  /a(?(1)b..|b..)(.)/I
614    
615  /ab\d{0}e/I  /ab\d{0}e/I
616    
# Line 595  Line 629 
629      *** Failers      *** Failers
630      \Nabc      \Nabc
631    
632  /a*(b+)(z)(z)/IP  /a*(b+)(z)(z)/P
633      aaaabbbbzzzz      aaaabbbbzzzz
634      aaaabbbbzzzz\O0      aaaabbbbzzzz\O0
635      aaaabbbbzzzz\O1      aaaabbbbzzzz\O1
# Line 977  Line 1011 
1011    
1012  /()a/I  /()a/I
1013    
1014  /(?(1)ab|ac)/I  /(?(1)ab|ac)(.)/I
1015    
1016  /(?(1)abz|acz)/I  /(?(1)abz|acz)(.)/I
1017    
1018  /(?(1)abz)/I  /(?(1)abz)(.)/I
1019    
1020  /(?(1)abz)123/I  /(?(1)abz)(1)23/I
1021    
1022  /(a)+/I  /(a)+/I
1023    
# Line 1124  Line 1158 
1158    
1159  /(a(?1)+b)/DZ  /(a(?1)+b)/DZ
1160    
 /^\W*(?:((.)\W*(?1)\W*\2|)|((.)\W*(?3)\W*\4|\W*.\W*))\W*$/Ii  
     1221  
     Satan, oscillate my metallic sonatas!  
     A man, a plan, a canal: Panama!  
     Able was I ere I saw Elba.  
     *** Failers  
     The quick brown fox  
   
1161  /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/I  /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/I
1162      12      12
1163      (((2+2)*-3)-7)      (((2+2)*-3)-7)
# Line 1421  Line 1447 
1447      ** Failers      ** Failers
1448      line one\nthis is a line\nbreak in the second line      line one\nthis is a line\nbreak in the second line
1449    
1450  /ab.cd/IP  /ab.cd/P
1451      ab-cd      ab-cd
1452      ab=cd      ab=cd
1453      ** Failers      ** Failers
1454      ab\ncd      ab\ncd
1455    
1456  /ab.cd/IPs  /ab.cd/Ps
1457      ab-cd      ab-cd
1458      ab=cd      ab=cd
1459      ab\ncd      ab\ncd
# Line 1482  Line 1508 
1508      (this)      (this)
1509      ((this))      ((this))
1510    
1511  /a(b)c/IPN  /a(b)c/PN
1512      abc      abc
1513    
1514  /a(?P<name>b)c/IPN  /a(?P<name>b)c/PN
1515      abc      abc
1516    
1517  /\x{100}/I  /\x{100}/I
# Line 1917  a random value. /Ix Line 1943  a random value. /Ix
1943  /(?=(?'abc'\w+))\k<abc>:/I  /(?=(?'abc'\w+))\k<abc>:/I
1944      abcd:      abcd:
1945    
 /(?'abc'\w+):\k<abc>{2}/  
     a:aaxyz  
     ab:ababxyz  
     ** Failers  
     a:axyz  
     ab:abxyz  
   
1946  /(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/J  /(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/J
1947      adaa      adaa
1948      ** Failers      ** Failers
# Line 1936  a random value. /Ix Line 1955  a random value. /Ix
1955      ** Failers      ** Failers
1956      bddd      bddd
1957    
 /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x  
     abd  
     ce  
   
1958  /(?(<bc))/  /(?(<bc))/
1959    
1960  /(?(''))/  /(?(''))/
# Line 1957  a random value. /Ix Line 1972  a random value. /Ix
1972  /(?<1> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x  /(?<1> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x
1973      abcabc1Xabc2XabcXabcabc      abcabc1Xabc2XabcXabcabc
1974    
 /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x  
     abcd  
   
 /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))  
   (?(DEFINE)  
   (?<NAME_PAT>[a-z]+)  
   (?<ADDRESS_PAT>\d+)  
   )/x  
     metcalfe 33  
   
1975  /^(?(DEFINE) abc | xyz ) /x  /^(?(DEFINE) abc | xyz ) /x
1976    
1977  /(?(DEFINE) abc) xyz/xI  /(?(DEFINE) abc) xyz/xI
# Line 1990  a random value. /Ix Line 1995  a random value. /Ix
1995      a\rb\<anycrlf>      a\rb\<anycrlf>
1996    
1997  /^abc./mgx<any>  /^abc./mgx<any>
1998      abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 \x{2028}abc8 \x{2029}abc9 JUNK      abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
1999    
2000  /abc.$/mgx<any>  /abc.$/mgx<any>
2001      abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9      abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7 abc9
2002    
2003  /a/<cr><any>  /a/<cr><any>
2004    
# Line 2055  a random value. /Ix Line 2060  a random value. /Ix
2060  /(?1)X(?<abc>P)/I  /(?1)X(?<abc>P)/I
2061      abcPXP123      abcPXP123
2062    
 /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/  
     1.2.3.4  
     131.111.10.206  
     10.0.0.0  
     ** Failers  
     10.6  
     455.3.4.5  
   
 /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/  
     1.2.3.4  
     131.111.10.206  
     10.0.0.0  
     ** Failers  
     10.6  
     455.3.4.5  
   
2063  /(?:a(?&abc)b)*(?<abc>x)/  /(?:a(?&abc)b)*(?<abc>x)/
2064      123axbaxbaxbx456      123axbaxbaxbx456
2065      123axbaxbaxb456      123axbaxbaxb456
# Line 2092  a random value. /Ix Line 2081  a random value. /Ix
2081     defabcabcxyz     defabcabcxyz
2082     DEFabcABCXYZ     DEFabcABCXYZ
2083    
 /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/  
     ababababbbabZXXXX  
   
2084  /^(a)\g-2/  /^(a)\g-2/
2085    
2086  /^(a)\g/  /^(a)\g/
# Line 2149  a random value. /Ix Line 2135  a random value. /Ix
2135      abc\r\n\r\n      abc\r\n\r\n
2136    
2137  /abc.$/mgx<anycrlf>  /abc.$/mgx<anycrlf>
2138      abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7\x{2028} abc8\x{2029} abc9      abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
2139    
2140  /^X/m  /^X/m
2141      XABC      XABC
# Line 2190  a random value. /Ix Line 2176  a random value. /Ix
2176    
2177  /((?(-2)a))/BZ  /((?(-2)a))/BZ
2178    
2179  /^(?(+1)X|Y)/BZ  /^(?(+1)X|Y)(.)/BZ
2180      Y      Y!
   
 /(foo)\Kbar/  
     foobar  
   
 /(foo)(\Kbar|baz)/  
     foobar  
     foobaz  
   
 /(foo\Kbar)baz/  
     foobarbaz  
2181    
2182  /(?<A>tom|bon)-\k{A}/  /(?<A>tom|bon)-\k{A}/
2183      tom-tom      tom-tom
# Line 2209  a random value. /Ix Line 2185  a random value. /Ix
2185      ** Failers      ** Failers
2186      tom-bon      tom-bon
2187    
 /(?<A>tom|bon)-\g{A}/  
     tom-tom  
     bon-bon  
   
2188  /\g{A/  /\g{A/
2189    
2190  /(?|(abc)|(xyz))/BZ  /(?|(abc)|(xyz))/BZ
# Line 2227  a random value. /Ix Line 2199  a random value. /Ix
2199      xabcpqrx      xabcpqrx
2200      xxyzx      xxyzx
2201    
 /(?|(abc)|(xyz))\1/  
     abcabc  
     xyzxyz  
     ** Failers  
     abcxyz  
     xyzabc  
   
 /(?|(abc)|(xyz))(?1)/  
     abcabc  
     xyzabc  
     ** Failers  
     xyzxyz  
   
 /\H\h\V\v/  
     X X\x0a  
     X\x09X\x0b  
     ** Failers  
     \xa0 X\x0a  
   
 /\H*\h+\V?\v{3,4}/  
     \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a  
     \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a  
     \x09\x20\xa0\x0a\x0b\x0c  
     ** Failers  
     \x09\x20\xa0\x0a\x0b  
   
 /\H{3,4}/  
     XY  ABCDE  
     XY  PQR ST  
   
 /.\h{3,4}./  
     XY  AB    PQRS  
   
 /\h*X\h?\H+Y\H?Z/  
     >XNNNYZ  
     >  X NYQZ  
     ** Failers  
     >XYZ  
     >  X NY Z  
   
 /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/  
     >XY\x0aZ\x0aA\x0bNN\x0c  
     >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c  
   
2202  /[\h]/BZ  /[\h]/BZ
2203      >\x09<      >\x09<
2204    
# Line 2343  a random value. /Ix Line 2271  a random value. /Ix
2271    
2272  /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/BZ  /A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/BZ
2273    
 /^a+(*FAIL)/  
     aaaaaa  
   
 /a+b?c+(*FAIL)/  
     aaabccc  
   
 /a+b?(*PRUNE)c+(*FAIL)/  
     aaabccc  
   
 /a+b?(*COMMIT)c+(*FAIL)/  
     aaabccc  
   
 /a+b?(*SKIP)c+(*FAIL)/  
     aaabcccaaabccc  
   
 /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/  
     aaaxxxxxx  
     aaa++++++  
     bbbxxxxx  
     bbb+++++  
     cccxxxx  
     ccc++++  
     dddddddd  
   
 /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/  
     aaaxxxxxx  
     aaa++++++  
     bbbxxxxx  
     bbb+++++  
     cccxxxx  
     ccc++++  
     dddddddd  
   
 /a+b?(*THEN)c+(*FAIL)/  
     aaabccc  
   
 /(A (A|B(*ACCEPT)|C) D)(E)/x  
     ABX  
     AADE  
     ACDE  
     ** Failers  
     AD  
   
2274  /^a+(*FAIL)/C  /^a+(*FAIL)/C
2275      aaaaaa      aaaaaa
2276    
# Line 2404  a random value. /Ix Line 2289  a random value. /Ix
2289  /a+b?(*THEN)c+(*FAIL)/C  /a+b?(*THEN)c+(*FAIL)/C
2290      aaabccc      aaabccc
2291    
 /a(*PRUNE:XXX)b/  
   
2292  /a(*MARK)b/  /a(*MARK)b/
2293    
2294  /(?i:A{1,}\6666666666)/  /(?i:A{1,}\6666666666)/
# Line 2535  a random value. /Ix Line 2418  a random value. /Ix
2418    
2419  /(*CRLF)(*BSR_ANYCRLF)(*CR)ab/I  /(*CRLF)(*BSR_ANYCRLF)(*CR)ab/I
2420    
2421  / End of testinput2 /  /(?<a>)(?&)/
2422    
2423    /(?<abc>)(?&a)/
2424    
2425    /(?<a>)(?&aaaaaaaaaaaaaaaaaaaaaaa)/
2426    
2427    /(?+-a)/
2428    
2429    /(?-+a)/
2430    
2431    /(?(-1))/
2432    
2433    /(?(+10))/
2434    
2435    /(?(10))/
2436    
2437    /(?(+2))()()/
2438    
2439    /(?(2))()()/
2440    
2441    /\k''/
2442    
2443    /\k<>/
2444    
2445    /\k{}/
2446    
2447    /(?P=)/
2448    
2449    /(?P>)/
2450    
2451    /(?!\w)(?R)/
2452    
2453    /(?=\w)(?R)/
2454    
2455    /(?<!\w)(?R)/
2456    
2457    /(?<=\w)(?R)/
2458    
2459    /[[:foo:]]/
2460    
2461    /[[:1234:]]/
2462    
2463    /[[:f\oo:]]/
2464    
2465    /[[: :]]/
2466    
2467    /[[:...:]]/
2468    
2469    /[[:l\ower:]]/
2470    
2471    /[[:abc\:]]/
2472    
2473    /[abc[:x\]pqr:]]/
2474    
2475    /[[:a\dz:]]/
2476    
2477    /(^(a|b\g<-1'c))/
2478    
2479    /^(?+1)(?<a>x|y){0}z/
2480        xzxx
2481        yzyy
2482        ** Failers
2483        xxz
2484    
2485    /(\3)(\1)(a)/
2486        cat
2487    
2488    /(\3)(\1)(a)/<JS>
2489        cat
2490    
2491    /TA]/
2492        The ACTA] comes
2493    
2494    /TA]/<JS>
2495        The ACTA] comes
2496    
2497    /(?2)[]a()b](abc)/
2498        abcbabc
2499    
2500    /(?2)[^]a()b](abc)/
2501        abcbabc
2502    
2503    /(?1)[]a()b](abc)/
2504        abcbabc
2505        ** Failers
2506        abcXabc
2507    
2508    /(?1)[^]a()b](abc)/
2509        abcXabc
2510        ** Failers
2511        abcbabc
2512    
2513    /(?2)[]a()b](abc)(xyz)/
2514        xyzbabcxyz
2515    
2516    /(?&N)[]a(?<N>)](?<M>abc)/
2517       abc<abc
2518    
2519    /(?&N)[]a(?<N>)](abc)/
2520       abc<abc
2521    
2522    /a[]b/
2523    
2524    /a[^]b/
2525    
2526    /a[]b/<JS>
2527        ** Failers
2528        ab
2529    
2530    /a[]+b/<JS>
2531        ** Failers
2532        ab
2533    
2534    /a[]*+b/<JS>
2535        ** Failers
2536        ab
2537    
2538    /a[^]b/<JS>
2539        aXb
2540        a\nb
2541        ** Failers
2542        ab
2543    
2544    /a[^]+b/<JS>
2545        aXb
2546        a\nX\nXb
2547        ** Failers
2548        ab
2549    
2550    /a(?!)+b/
2551    
2552    /a(*FAIL)+b/
2553    
2554    /(abc|pqr|123){0}[xyz]/SI
2555    
2556    /(?(?=.*b)b|^)/CI
2557       adc
2558       abc
2559    
2560    /(?(?=b).*b|^d)/I
2561    
2562    /(?(?=.*b).*b|^d)/I
2563    
2564    /a?|b?/P
2565        abc
2566        ** Failers
2567        ddd\N
2568    
2569    /xyz/C
2570      xyz
2571      abcxyz
2572      abcxyz\Y
2573      ** Failers
2574      abc
2575      abc\Y
2576      abcxypqr
2577      abcxypqr\Y
2578    
2579    /^"((?(?=[a])[^"])|b)*"$/C
2580        "ab"
2581    
2582    /^"((?(?=[a])[^"])|b)*"$/
2583        "ab"
2584    
2585    /^X(?5)(a)(?|(b)|(q))(c)(d)Y/
2586        XYabcdY
2587    
2588    /^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/
2589        XYabcdY
2590    
2591    /Xa{2,4}b/
2592        X\P
2593        Xa\P
2594        Xaa\P
2595        Xaaa\P
2596        Xaaaa\P
2597    
2598    /Xa{2,4}?b/
2599        X\P
2600        Xa\P
2601        Xaa\P
2602        Xaaa\P
2603        Xaaaa\P
2604    
2605    /Xa{2,4}+b/
2606        X\P
2607        Xa\P
2608        Xaa\P
2609        Xaaa\P
2610        Xaaaa\P
2611    
2612    /X\d{2,4}b/
2613        X\P
2614        X3\P
2615        X33\P
2616        X333\P
2617        X3333\P
2618    
2619    /X\d{2,4}?b/
2620        X\P
2621        X3\P
2622        X33\P
2623        X333\P
2624        X3333\P
2625    
2626    /X\d{2,4}+b/
2627        X\P
2628        X3\P
2629        X33\P
2630        X333\P
2631        X3333\P
2632    
2633    /X\D{2,4}b/
2634        X\P
2635        Xa\P
2636        Xaa\P
2637        Xaaa\P
2638        Xaaaa\P
2639    
2640    /X\D{2,4}?b/
2641        X\P
2642        Xa\P
2643        Xaa\P
2644        Xaaa\P
2645        Xaaaa\P
2646    
2647    /X\D{2,4}+b/
2648        X\P
2649        Xa\P
2650        Xaa\P
2651        Xaaa\P
2652        Xaaaa\P
2653    
2654    /X[abc]{2,4}b/
2655        X\P
2656        Xa\P
2657        Xaa\P
2658        Xaaa\P
2659        Xaaaa\P
2660    
2661    /X[abc]{2,4}?b/
2662        X\P
2663        Xa\P
2664        Xaa\P
2665        Xaaa\P
2666        Xaaaa\P
2667    
2668    /X[abc]{2,4}+b/
2669        X\P
2670        Xa\P
2671        Xaa\P
2672        Xaaa\P
2673        Xaaaa\P
2674    
2675    /X[^a]{2,4}b/
2676        X\P
2677        Xz\P
2678        Xzz\P
2679        Xzzz\P
2680        Xzzzz\P
2681    
2682    /X[^a]{2,4}?b/
2683        X\P
2684        Xz\P
2685        Xzz\P
2686        Xzzz\P
2687        Xzzzz\P
2688    
2689    /X[^a]{2,4}+b/
2690        X\P
2691        Xz\P
2692        Xzz\P
2693        Xzzz\P
2694        Xzzzz\P
2695    
2696    /(Y)X\1{2,4}b/
2697        YX\P
2698        YXY\P
2699        YXYY\P
2700        YXYYY\P
2701        YXYYYY\P
2702    
2703    /(Y)X\1{2,4}?b/
2704        YX\P
2705        YXY\P
2706        YXYY\P
2707        YXYYY\P
2708        YXYYYY\P
2709    
2710    /(Y)X\1{2,4}+b/
2711        YX\P
2712        YXY\P
2713        YXYY\P
2714        YXYYY\P
2715        YXYYYY\P
2716    
2717    /\++\KZ|\d+X|9+Y/
2718        ++++123999\P
2719        ++++123999Y\P
2720        ++++Z1234\P
2721    
2722    /Z(*F)/
2723        Z\P
2724        ZA\P
2725    
2726    /Z(?!)/
2727        Z\P
2728        ZA\P
2729    
2730    /dog(sbody)?/
2731        dogs\P
2732        dogs\P\P
2733    
2734    /dog(sbody)??/
2735        dogs\P
2736        dogs\P\P
2737    
2738    /dog|dogsbody/
2739        dogs\P
2740        dogs\P\P
2741    
2742    /dogsbody|dog/
2743        dogs\P
2744        dogs\P\P
2745    
2746    /\bthe cat\b/
2747        the cat\P
2748        the cat\P\P
2749    
2750    /abc/
2751       abc\P
2752       abc\P\P
2753    
2754    /\w+A/P
2755       CDAAAAB
2756    
2757    /\w+A/PU
2758       CDAAAAB
2759    
2760    /abc\K123/
2761        xyzabc123pqr
2762        xyzabc12\P
2763        xyzabc12\P\P
2764    
2765    /(?<=abc)123/
2766        xyzabc123pqr
2767        xyzabc12\P
2768        xyzabc12\P\P
2769    
2770    /\babc\b/
2771        +++abc+++
2772        +++ab\P
2773        +++ab\P\P
2774    
2775    /(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\w*+))/BZ
2776    
2777    /(?&word)(?&element)(?(DEFINE)(?<element><[^\d][^>]>[^<])(?<word>\w*+))/BZ
2778    
2779    /(ab)(x(y)z(cd(*ACCEPT)))pq/BZ
2780    
2781    /abc\K/+
2782        abcdef
2783        abcdef\N\N
2784        xyzabcdef\N\N
2785        ** Failers
2786        abcdef\N
2787        xyzabcdef\N
2788    
2789    /^(?:(?=abc)|abc\K)/+
2790        abcdef
2791        abcdef\N\N
2792        ** Failers
2793        abcdef\N
2794    
2795    /a?b?/+
2796        xyz
2797        xyzabc
2798        xyzabc\N
2799        xyzabc\N\N
2800        xyz\N\N
2801        ** Failers
2802        xyz\N
2803    
2804    /^a?b?/+
2805        xyz
2806        xyzabc
2807        ** Failers
2808        xyzabc\N
2809        xyzabc\N\N
2810        xyz\N\N
2811        xyz\N
2812    
2813    /^(?<name>a|b\g<name>c)/
2814        aaaa
2815        bacxxx
2816        bbaccxxx
2817        bbbacccxx
2818    
2819    /^(?<name>a|b\g'name'c)/
2820        aaaa
2821        bacxxx
2822        bbaccxxx
2823        bbbacccxx
2824    
2825    /^(a|b\g<1>c)/
2826        aaaa
2827        bacxxx
2828        bbaccxxx
2829        bbbacccxx
2830    
2831    /^(a|b\g'1'c)/
2832        aaaa
2833        bacxxx
2834        bbaccxxx
2835        bbbacccxx
2836    
2837    /^(a|b\g'-1'c)/
2838        aaaa
2839        bacxxx
2840        bbaccxxx
2841        bbbacccxx
2842    
2843    /(^(a|b\g<-1>c))/
2844        aaaa
2845        bacxxx
2846        bbaccxxx
2847        bbbacccxx
2848    
2849    /(?-i:\g<name>)(?i:(?<name>a))/
2850        XaaX
2851        XAAX
2852    
2853    /(?i:\g<name>)(?-i:(?<name>a))/
2854        XaaX
2855        ** Failers
2856        XAAX
2857    
2858    /(?-i:\g<+1>)(?i:(a))/
2859        XaaX
2860        XAAX
2861    
2862    /(?=(?<regex>(?#simplesyntax)\$(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?<index>[a-zA-Z0-9_\x{7f}-\x{ff}]+|\$\g<name>)\]|->\g<name>(\(.*?\))?)?|(?#simple syntax withbraces)\$\{(?:\g<name>(?<indices>\[(?:\g<index>|'(?:\\.|[^'\\])*'|"(?:\g<regex>|\\.|[^"\\])*")\])?|\g<complex>|\$\{\g<complex>\})\}|(?#complexsyntax)\{(?<complex>\$(?<segment>\g<name>(\g<indices>*|\(.*?\))?)(?:->\g<segment>)*|\$\g<complex>|\$\{\g<complex>\})\}))\{/
2863    
2864    /(?<n>a|b|c)\g<n>*/
2865       abc
2866       accccbbb
2867    
2868    /^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/
2869        XYabcdY
2870    
2871    /(?<=b(?1)|zzz)(a)/
2872        xbaax
2873        xzzzax
2874    
2875    /(a)(?<=b\1)/
2876    
2877    /(a)(?<=b+(?1))/
2878    
2879    /(a+)(?<=b(?1))/
2880    
2881    /(a(?<=b(?1)))/
2882    
2883    /(?<=b(?1))xyz/
2884    
2885    /(?<=b(?1))xyz(b+)pqrstuvew/
2886    
2887    /(a|bc)\1/SI
2888    
2889    /(a|bc)\1{2,3}/SI
2890    
2891    /(a|bc)(?1)/SI
2892    
2893    /(a|b\1)(a|b\1)/SI
2894    
2895    /(a|b\1){2}/SI
2896    
2897    /(a|bbbb\1)(a|bbbb\1)/SI
2898    
2899    /(a|bbbb\1){2}/SI
2900    
2901    /^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]/SI
2902    
2903    /  (?: [\040\t] |  \(
2904    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2905    \)  )*                          # optional leading comment
2906    (?:    (?:
2907    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2908    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2909    |
2910    " (?:                      # opening quote...
2911    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2912    |                     #    or
2913    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2914    )* "  # closing quote
2915    )                    # initial word
2916    (?:  (?: [\040\t] |  \(
2917    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2918    \)  )*  \.  (?: [\040\t] |  \(
2919    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2920    \)  )*   (?:
2921    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2922    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2923    |
2924    " (?:                      # opening quote...
2925    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2926    |                     #    or
2927    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2928    )* "  # closing quote
2929    )  )* # further okay, if led by a period
2930    (?: [\040\t] |  \(
2931    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2932    \)  )*  @  (?: [\040\t] |  \(
2933    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2934    \)  )*    (?:
2935    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2936    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2937    |   \[                         # [
2938    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2939    \]                        #           ]
2940    )                           # initial subdomain
2941    (?:                                  #
2942    (?: [\040\t] |  \(
2943    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2944    \)  )*  \.                        # if led by a period...
2945    (?: [\040\t] |  \(
2946    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2947    \)  )*   (?:
2948    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2949    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2950    |   \[                         # [
2951    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2952    \]                        #           ]
2953    )                     #   ...further okay
2954    )*
2955    # address
2956    |                     #  or
2957    (?:
2958    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2959    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2960    |
2961    " (?:                      # opening quote...
2962    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2963    |                     #    or
2964    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2965    )* "  # closing quote
2966    )             # one word, optionally followed by....
2967    (?:
2968    [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
2969    \(
2970    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2971    \)       |  # comments, or...
2972    
2973    " (?:                      # opening quote...
2974    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2975    |                     #    or
2976    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2977    )* "  # closing quote
2978    # quoted strings
2979    )*
2980    <  (?: [\040\t] |  \(
2981    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2982    \)  )*                     # leading <
2983    (?:  @  (?: [\040\t] |  \(
2984    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2985    \)  )*    (?:
2986    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2987    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2988    |   \[                         # [
2989    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2990    \]                        #           ]
2991    )                           # initial subdomain
2992    (?:                                  #
2993    (?: [\040\t] |  \(
2994    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2995    \)  )*  \.                        # if led by a period...
2996    (?: [\040\t] |  \(
2997    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2998    \)  )*   (?:
2999    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3000    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3001    |   \[                         # [
3002    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3003    \]                        #           ]
3004    )                     #   ...further okay
3005    )*
3006    
3007    (?:  (?: [\040\t] |  \(
3008    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3009    \)  )*  ,  (?: [\040\t] |  \(
3010    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3011    \)  )*  @  (?: [\040\t] |  \(
3012    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3013    \)  )*    (?:
3014    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3015    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3016    |   \[                         # [
3017    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3018    \]                        #           ]
3019    )                           # initial subdomain
3020    (?:                                  #
3021    (?: [\040\t] |  \(
3022    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3023    \)  )*  \.                        # if led by a period...
3024    (?: [\040\t] |  \(
3025    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3026    \)  )*   (?:
3027    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3028    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3029    |   \[                         # [
3030    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3031    \]                        #           ]
3032    )                     #   ...further okay
3033    )*
3034    )* # further okay, if led by comma
3035    :                                # closing colon
3036    (?: [\040\t] |  \(
3037    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3038    \)  )*  )? #       optional route
3039    (?:
3040    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3041    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3042    |
3043    " (?:                      # opening quote...
3044    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
3045    |                     #    or
3046    \\ [^\x80-\xff]           #   Escaped something (something != CR)
3047    )* "  # closing quote
3048    )                    # initial word
3049    (?:  (?: [\040\t] |  \(
3050    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3051    \)  )*  \.  (?: [\040\t] |  \(
3052    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3053    \)  )*   (?:
3054    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3055    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3056    |
3057    " (?:                      # opening quote...
3058    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
3059    |                     #    or
3060    \\ [^\x80-\xff]           #   Escaped something (something != CR)
3061    )* "  # closing quote
3062    )  )* # further okay, if led by a period
3063    (?: [\040\t] |  \(
3064    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3065    \)  )*  @  (?: [\040\t] |  \(
3066    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3067    \)  )*    (?:
3068    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3069    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3070    |   \[                         # [
3071    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3072    \]                        #           ]
3073    )                           # initial subdomain
3074    (?:                                  #
3075    (?: [\040\t] |  \(
3076    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3077    \)  )*  \.                        # if led by a period...
3078    (?: [\040\t] |  \(
3079    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3080    \)  )*   (?:
3081    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3082    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3083    |   \[                         # [
3084    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3085    \]                        #           ]
3086    )                     #   ...further okay
3087    )*
3088    #       address spec
3089    (?: [\040\t] |  \(
3090    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3091    \)  )*  > #                  trailing >
3092    # name and address
3093    )  (?: [\040\t] |  \(
3094    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3095    \)  )*                       # optional trailing comment
3096    /xSI
3097    
3098    /<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>/isIS
3099    
3100    "(?>.*/)foo"SI
3101    
3102    /(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /xSI
3103    
3104    /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/iSI
3105    
3106    /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/SI
3107    
3108    /<a[\s]+href[\s]*=[\s]*          # find <a href=
3109     ([\"\'])?                       # find single or double quote
3110     (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
3111                                     # quote, otherwise match up to next space
3112    /isxSI
3113    
3114    /^(?!:)                       # colon disallowed at start
3115      (?:                         # start of item
3116        (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
3117        (?(1)0 | () ) )           # if null previously matched, fail; else null
3118        :                         # followed by colon
3119      ){1,7}                      # end item; 1-7 of them required
3120      [0-9a-f]{1,4} $             # final hex number at end of string
3121      (?(1)|.)                    # check that there was an empty component
3122      /xiIS
3123    
3124    /(?|(?<a>A)|(?<a>B))/I
3125        AB\Ca
3126        BA\Ca
3127    
3128    /(?|(?<a>A)|(?<b>B))/
3129    
3130    /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |
3131        b(?<quote> (?<apostrophe>')|(?<realquote>")) )
3132        (?('quote')[a-z]+|[0-9]+)/JIx
3133        a"aaaaa
3134        b"aaaaa
3135        ** Failers
3136        b"11111
3137        a"11111
3138    
3139    /^(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/JDZx
3140        abcdX
3141        eX
3142        ** Failers
3143        abcdY
3144        ey
3145    
3146    /(?<A>a) (b)(c)  (?<A>d  (?(R&A)$ | (?4)) )/JDZx
3147        abcdd
3148        ** Failers
3149        abcdde
3150    
3151    /abcd*/
3152        xxxxabcd\P
3153        xxxxabcd\P\P
3154    
3155    /abcd*/i
3156        xxxxabcd\P
3157        xxxxabcd\P\P
3158        XXXXABCD\P
3159        XXXXABCD\P\P
3160    
3161    /abc\d*/
3162        xxxxabc1\P
3163        xxxxabc1\P\P
3164    
3165    /(a)bc\1*/
3166        xxxxabca\P
3167        xxxxabca\P\P
3168    
3169    /abc[de]*/
3170        xxxxabcde\P
3171        xxxxabcde\P\P
3172    
3173    /-- This is not in the Perl 5.10 test because Perl seems currently to be broken
3174        and not behaving as specified in that it *does* bumpalong after hitting
3175        (*COMMIT). --/
3176    
3177    /(?1)(A(*COMMIT)|B)D/
3178        ABD
3179        XABD
3180        BAD
3181        ABXABD
3182        ** Failers
3183        ABX
3184        BAXBAD
3185    
3186    /(\3)(\1)(a)/<JS>
3187        cat
3188    
3189    /(\3)(\1)(a)/SI<JS>
3190        cat
3191    
3192    /(\3)(\1)(a)/SI
3193        cat
3194    
3195    /i(?(DEFINE)(?<s>a))/SI
3196        i
3197    
3198    /()i(?(1)a)/SI
3199        ia
3200    
3201    /(?i)a(?-i)b|c/BZ
3202        XabX
3203        XAbX
3204        CcC
3205        ** Failers
3206        XABX
3207    
3208    /(?i)a(?s)b|c/BZ
3209    
3210    /(?i)a(?s-i)b|c/BZ
3211    
3212    /^(ab(c\1)d|x){2}$/BZ
3213        xabcxd
3214    
3215    /^(?&t)*+(?(DEFINE)(?<t>.))$/BZ
3216    
3217    /^(?&t)*(?(DEFINE)(?<t>.))$/BZ
3218    
3219    / -- The first four of these are not in the Perl 5.10 test because Perl
3220         documents that the use of \K in assertions is "not well defined". The
3221         last is here because Perl gives the match as "b" rather than "ab". I
3222         believe this to be a Perl bug. --/
3223    
3224    /(?=a\Kb)ab/
3225        ab
3226    
3227    /(?!a\Kb)ac/
3228        ac
3229    
3230    /^abc(?<=b\Kc)d/
3231        abcd
3232    
3233    /^abc(?<!b\Kq)d/
3234        abcd
3235    
3236    /(?>a\Kb)z|(ab)/
3237        ab
3238    
3239    /----------------------/
3240    
3241    /(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/
3242    
3243    /abc(*MARK:)pqr/
3244    
3245    /abc(*:)pqr/
3246    
3247    /abc(*FAIL:123)xyz/
3248    
3249    /--- This should, and does, fail. In Perl, it does not, which I think is a
3250         bug because replacing the B in the pattern by (B|D) does make it fail. ---/
3251    
3252    /A(*COMMIT)B/+K
3253        ACABX
3254    
3255    /--- These should be different, but in Perl 5.11 are not, which I think
3256         is a bug in Perl. ---/
3257    
3258    /A(*THEN)B|A(*THEN)C/K
3259        AC
3260    
3261    /A(*PRUNE)B|A(*PRUNE)C/K
3262        AC
3263    
3264    /--- A whole lot of tests of verbs with arguments are here rather than in test
3265         11 because Perl doesn't seem to follow its specification entirely
3266         correctly. ---/
3267    
3268    /--- Perl 5.11 sets $REGERROR on the AC failure case here; PCRE does not. It is
3269         not clear how Perl defines "involved in the failure of the match". ---/
3270    
3271    /^(A(*THEN:A)B|C(*THEN:B)D)/K
3272        AB
3273        CD
3274        ** Failers
3275        AC
3276        CB
3277    
3278    /--- Check the use of names for success and failure. PCRE doesn't show these
3279    names for success, though Perl does, contrary to its spec. ---/
3280    
3281    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
3282        AB
3283        CD
3284        ** Failers
3285        AC
3286        CB
3287    
3288    /--- An empty name does not pass back an empty string. It is the same as if no
3289    name were given. ---/
3290    
3291    /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
3292        AB
3293        CD
3294    
3295    /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
3296    
3297    /A(*PRUNE:A)B/K
3298        ACAB
3299    
3300    /(*MARK:A)(*PRUNE:B)(C|X)/K
3301        C
3302        D
3303    
3304    /(*MARK:A)(*THEN:B)(C|X)/K
3305        C
3306        D
3307    
3308    /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
3309    
3310    /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
3311        AAAC
3312    
3313    /--- Same --/
3314    
3315    /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
3316        AAAC
3317    
3318    /--- This should fail; the SKIP advances by one, but when we get to AC, the
3319         PRUNE kills it. ---/
3320    
3321    /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
3322        AAAC
3323    
3324    /A(*:A)A+(*SKIP)(B|Z) | AC/xK
3325        AAAC
3326    
3327    /--- This should fail, as a null name is the same as no name ---/
3328    
3329    /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
3330        AAAC
3331    
3332    /--- This fails in PCRE, and I think that is in accordance with Perl's
3333         documentation, though in Perl it succeeds. ---/
3334    
3335    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
3336        AAAC
3337    
3338    /--- Mark names can be duplicated ---/
3339    
3340    /A(*:A)B|X(*:A)Y/K
3341        AABC
3342        XXYZ
3343    
3344    /^A(*:A)B|^X(*:A)Y/K
3345        ** Failers
3346        XAQQ
3347    
3348    /--- A check on what happens after hitting a mark and them bumping along to
3349    something that does not even start. Perl reports tags after the failures here,
3350    though it does not when the individual letters are made into something
3351    more complicated. ---/
3352    
3353    /A(*:A)B|XX(*:B)Y/K
3354        AABC
3355        XXYZ
3356        ** Failers
3357        XAQQ
3358        XAQQXZZ
3359        AXQQQ
3360        AXXQQQ
3361    
3362    /--- COMMIT at the start of a pattern should be the same as an anchor. Perl
3363    optimizations defeat this. So does the PCRE optimization unless we disable it
3364    with \Y. ---/
3365    
3366    /(*COMMIT)ABC/
3367        ABCDEFG
3368        ** Failers
3369        DEFGABC\Y
3370    
3371    /--- Repeat some tests with added studying. ---/
3372    
3373    /A(*COMMIT)B/+KS
3374        ACABX
3375    
3376    /A(*THEN)B|A(*THEN)C/KS
3377        AC
3378    
3379    /A(*PRUNE)B|A(*PRUNE)C/KS
3380        AC
3381    
3382    /^(A(*THEN:A)B|C(*THEN:B)D)/KS
3383        AB
3384        CD
3385        ** Failers
3386        AC
3387        CB
3388    
3389    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/KS
3390        AB
3391        CD
3392        ** Failers
3393        AC
3394        CB
3395    
3396    /^(A(*PRUNE:)B|C(*PRUNE:B)D)/KS
3397        AB
3398        CD
3399    
3400    /A(*PRUNE:A)B/KS
3401        ACAB
3402    
3403    /(*MARK:A)(*PRUNE:B)(C|X)/KS
3404        C
3405        D
3406    
3407    /(*MARK:A)(*THEN:B)(C|X)/KS
3408        C
3409        D
3410    
3411    /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xKS
3412        AAAC
3413    
3414    /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xKS
3415        AAAC
3416    
3417    /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xKS
3418        AAAC
3419    
3420    /A(*:A)A+(*SKIP)(B|Z) | AC/xKS
3421        AAAC
3422    
3423    /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xKS
3424        AAAC
3425    
3426    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xKS
3427        AAAC
3428    
3429    /A(*:A)B|XX(*:B)Y/KS
3430        AABC
3431        XXYZ
3432        ** Failers
3433        XAQQ
3434        XAQQXZZ
3435        AXQQQ
3436        AXXQQQ
3437    
3438    /(*COMMIT)ABC/
3439        ABCDEFG
3440        ** Failers
3441        DEFGABC\Y
3442    
3443    /^(ab (c+(*THEN)cd) | xyz)/x
3444        abcccd
3445    
3446    /^(ab (c+(*PRUNE)cd) | xyz)/x
3447        abcccd
3448    
3449    /^(ab (c+(*FAIL)cd) | xyz)/x
3450        abcccd
3451    
3452    /--- Perl 5.11 gets some of these wrong ---/
3453    
3454    /(?>.(*ACCEPT))*?5/
3455        abcde
3456    
3457    /(.(*ACCEPT))*?5/
3458        abcde
3459    
3460    /(.(*ACCEPT))5/
3461        abcde
3462    
3463    /(.(*ACCEPT))*5/
3464        abcde
3465    
3466    /A\NB./BZ
3467        ACBD
3468        *** Failers
3469        A\nB
3470        ACB\n
3471    
3472    /A\NB./sBZ
3473        ACBD
3474        ACB\n
3475        *** Failers
3476        A\nB
3477    
3478    /A\NB/<crlf>
3479        A\nB
3480        A\rB
3481        ** Failers
3482        A\r\nB
3483    
3484    /\R+b/BZ
3485    
3486    /\R+\n/BZ
3487    
3488    /\R+\d/BZ
3489    
3490    /\d*\R/BZ
3491    
3492    /\s*\R/BZ
3493    
3494    /-- Perl treats this one differently, not failing the second string. I believe
3495        that is a bug in Perl. --/
3496    
3497    /^((abc|abcx)(*THEN)y|abcd)/
3498        abcd
3499        *** Failers
3500        abcxy
3501    
3502    /-- End of testinput2 --/

Legend:
Removed from v.247  
changed lines
  Added in v.550

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12