/[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 410 by ph10, Wed Apr 1 07:39:22 2009 UTC revision 510 by ph10, Sat Mar 27 17:45:29 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 potential Perl
6        bug. --/
7    
8    /-- Originally, the Perl 5.10 things were in here too, but now I have separated
9        many (most?) of them out into test 11. However, there may still be some
10        that were overlooked. --/
11    
12  /(a)b|/I  /(a)b|/I
13    
14  /abc/I  /abc/I
# Line 123  Line 134 
134      defabc      defabc
135      \Zdefabc      \Zdefabc
136    
137  /abc/IP  /abc/P
138      abc      abc
139      *** Failers      *** Failers
140    
141  /^abc|def/IP  /^abc|def/P
142      abcdef      abcdef
143      abcdef\B      abcdef\B
144    
145  /.*((abc)$|(def))/IP  /.*((abc)$|(def))/P
146      defabc      defabc
147      \Zdefabc      \Zdefabc
148    
149  /the quick brown fox/IP  /the quick brown fox/P
150      the quick brown fox      the quick brown fox
151      *** Failers      *** Failers
152      The Quick Brown Fox      The Quick Brown Fox
153    
154  /the quick brown fox/IPi  /the quick brown fox/Pi
155      the quick brown fox      the quick brown fox
156      The Quick Brown Fox      The Quick Brown Fox
157    
158  /abc.def/IP  /abc.def/P
159      *** Failers      *** Failers
160      abc\ndef      abc\ndef
161    
162  /abc$/IP  /abc$/P
163      abc      abc
164      abc\n      abc\n
165    
166  /(abc)\2/IP  /(abc)\2/P
167    
168  /(abc\1)/IP  /(abc\1)/P
169      abc      abc
170    
171  /)/  /)/
# Line 333  Line 344 
344      *** Failers      *** Failers
345      a      a
346    
347  /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
348    
349  /^(a\1?){4}$/I  /^(a\1?){4}$/I
350        aaaa
351      aaaaaa      aaaaaa
352    
353    /Perl does not fail these two for the final subjects. Neither did PCRE until/
354    /release 8.01. The problem is in backtracking into a subpattern that contains/
355    /a recursive reference to itself. PCRE has now made these into atomic patterns./
356    
357    /^(xa|=?\1a){2}$/
358        xa=xaa
359        ** Failers
360        xa=xaaa
361    
362    /^(xa|=?\1a)+$/
363        xa=xaa
364        ** Failers
365        xa=xaaa
366    
367  /These are syntax tests from Perl 5.005/I  /These are syntax tests from Perl 5.005/I
368    
# Line 593  Line 619 
619      *** Failers      *** Failers
620      \Nabc      \Nabc
621    
622  /a*(b+)(z)(z)/IP  /a*(b+)(z)(z)/P
623      aaaabbbbzzzz      aaaabbbbzzzz
624      aaaabbbbzzzz\O0      aaaabbbbzzzz\O0
625      aaaabbbbzzzz\O1      aaaabbbbzzzz\O1
# Line 1122  Line 1148 
1148    
1149  /(a(?1)+b)/DZ  /(a(?1)+b)/DZ
1150    
 /^\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  
   
1151  /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/I  /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/I
1152      12      12
1153      (((2+2)*-3)-7)      (((2+2)*-3)-7)
# Line 1419  Line 1437 
1437      ** Failers      ** Failers
1438      line one\nthis is a line\nbreak in the second line      line one\nthis is a line\nbreak in the second line
1439    
1440  /ab.cd/IP  /ab.cd/P
1441      ab-cd      ab-cd
1442      ab=cd      ab=cd
1443      ** Failers      ** Failers
1444      ab\ncd      ab\ncd
1445    
1446  /ab.cd/IPs  /ab.cd/Ps
1447      ab-cd      ab-cd
1448      ab=cd      ab=cd
1449      ab\ncd      ab\ncd
# Line 1480  Line 1498 
1498      (this)      (this)
1499      ((this))      ((this))
1500    
1501  /a(b)c/IPN  /a(b)c/PN
1502      abc      abc
1503    
1504  /a(?P<name>b)c/IPN  /a(?P<name>b)c/PN
1505      abc      abc
1506    
1507  /\x{100}/I  /\x{100}/I
# Line 1915  a random value. /Ix Line 1933  a random value. /Ix
1933  /(?=(?'abc'\w+))\k<abc>:/I  /(?=(?'abc'\w+))\k<abc>:/I
1934      abcd:      abcd:
1935    
 /(?'abc'\w+):\k<abc>{2}/  
     a:aaxyz  
     ab:ababxyz  
     ** Failers  
     a:axyz  
     ab:abxyz  
   
1936  /(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/J  /(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/J
1937      adaa      adaa
1938      ** Failers      ** Failers
# Line 1934  a random value. /Ix Line 1945  a random value. /Ix
1945      ** Failers      ** Failers
1946      bddd      bddd
1947    
 /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x  
     abd  
     ce  
   
1948  /(?(<bc))/  /(?(<bc))/
1949    
1950  /(?(''))/  /(?(''))/
# Line 1955  a random value. /Ix Line 1962  a random value. /Ix
1962  /(?<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
1963      abcabc1Xabc2XabcXabcabc      abcabc1Xabc2XabcXabcabc
1964    
 /^(?(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  
   
1965  /^(?(DEFINE) abc | xyz ) /x  /^(?(DEFINE) abc | xyz ) /x
1966    
1967  /(?(DEFINE) abc) xyz/xI  /(?(DEFINE) abc) xyz/xI
# Line 2053  a random value. /Ix Line 2050  a random value. /Ix
2050  /(?1)X(?<abc>P)/I  /(?1)X(?<abc>P)/I
2051      abcPXP123      abcPXP123
2052    
 /(?(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  
   
2053  /(?:a(?&abc)b)*(?<abc>x)/  /(?:a(?&abc)b)*(?<abc>x)/
2054      123axbaxbaxbx456      123axbaxbaxbx456
2055      123axbaxbaxb456      123axbaxbaxb456
# Line 2090  a random value. /Ix Line 2071  a random value. /Ix
2071     defabcabcxyz     defabcabcxyz
2072     DEFabcABCXYZ     DEFabcABCXYZ
2073    
 /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/  
     ababababbbabZXXXX  
   
2074  /^(a)\g-2/  /^(a)\g-2/
2075    
2076  /^(a)\g/  /^(a)\g/
# Line 2191  a random value. /Ix Line 2169  a random value. /Ix
2169  /^(?(+1)X|Y)(.)/BZ  /^(?(+1)X|Y)(.)/BZ
2170      Y!      Y!
2171    
 /(foo)\Kbar/  
     foobar  
   
 /(foo)(\Kbar|baz)/  
     foobar  
     foobaz  
   
 /(foo\Kbar)baz/  
     foobarbaz  
   
2172  /(?<A>tom|bon)-\k{A}/  /(?<A>tom|bon)-\k{A}/
2173      tom-tom      tom-tom
2174      bon-bon      bon-bon
2175      ** Failers      ** Failers
2176      tom-bon      tom-bon
2177    
 /(?<A>tom|bon)-\g{A}/  
     tom-tom  
     bon-bon  
   
2178  /\g{A/  /\g{A/
2179    
2180  /(?|(abc)|(xyz))/BZ  /(?|(abc)|(xyz))/BZ
# Line 2225  a random value. /Ix Line 2189  a random value. /Ix
2189      xabcpqrx      xabcpqrx
2190      xxyzx      xxyzx
2191    
 /(?|(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  
   
2192  /[\h]/BZ  /[\h]/BZ
2193      >\x09<      >\x09<
2194    
# Line 2341  a random value. /Ix Line 2261  a random value. /Ix
2261    
2262  /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
2263    
 /^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  
   
2264  /^a+(*FAIL)/C  /^a+(*FAIL)/C
2265      aaaaaa      aaaaaa
2266    
# Line 2402  a random value. /Ix Line 2279  a random value. /Ix
2279  /a+b?(*THEN)c+(*FAIL)/C  /a+b?(*THEN)c+(*FAIL)/C
2280      aaabccc      aaabccc
2281    
 /a(*PRUNE:XXX)b/  
   
2282  /a(*MARK)b/  /a(*MARK)b/
2283    
2284  /(?i:A{1,}\6666666666)/  /(?i:A{1,}\6666666666)/
# Line 2589  a random value. /Ix Line 2464  a random value. /Ix
2464    
2465  /[[:a\dz:]]/  /[[:a\dz:]]/
2466    
 /^(?<name>a|b\g<name>c)/  
     aaaa  
     bacxxx  
     bbaccxxx  
     bbbacccxx  
   
 /^(?<name>a|b\g'name'c)/  
     aaaa  
     bacxxx  
     bbaccxxx  
     bbbacccxx  
   
 /^(a|b\g<1>c)/  
     aaaa  
     bacxxx  
     bbaccxxx  
     bbbacccxx  
   
 /^(a|b\g'1'c)/  
     aaaa  
     bacxxx  
     bbaccxxx  
     bbbacccxx  
   
 /^(a|b\g'-1'c)/  
     aaaa  
     bacxxx  
     bbaccxxx  
     bbbacccxx  
   
 /(^(a|b\g<-1>c))/  
     aaaa  
     bacxxx  
     bbaccxxx  
     bbbacccxx  
   
2467  /(^(a|b\g<-1'c))/  /(^(a|b\g<-1'c))/
2468    
 /(^(a|b\g{-1}))/  
     bacxxx  
   
 /(?-i:\g<name>)(?i:(?<name>a))/  
     XaaX  
     XAAX  
   
 /(?i:\g<name>)(?-i:(?<name>a))/  
     XaaX  
     ** Failers  
     XAAX  
   
 /(?-i:\g<+1>)(?i:(a))/  
     XaaX  
     XAAX  
   
 /(?=(?<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>\})\}))\{/  
   
 /(?<n>a|b|c)\g<n>*/  
    abc  
    accccbbb  
   
2469  /^(?+1)(?<a>x|y){0}z/  /^(?+1)(?<a>x|y){0}z/
2470      xzxx      xzxx
2471      yzyy      yzyy
# Line 2755  a random value. /Ix Line 2572  a random value. /Ix
2572  /^"((?(?=[a])[^"])|b)*"$/  /^"((?(?=[a])[^"])|b)*"$/
2573      "ab"      "ab"
2574    
 /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/  
     XYabcdY  
   
2575  /^X(?5)(a)(?|(b)|(q))(c)(d)Y/  /^X(?5)(a)(?|(b)|(q))(c)(d)Y/
2576      XYabcdY      XYabcdY
2577    
2578  /^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/  /^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/
2579      XYabcdY      XYabcdY
2580    
2581    /Xa{2,4}b/
2582        X\P
2583        Xa\P
2584        Xaa\P
2585        Xaaa\P
2586        Xaaaa\P
2587    
2588    /Xa{2,4}?b/
2589        X\P
2590        Xa\P
2591        Xaa\P
2592        Xaaa\P
2593        Xaaaa\P
2594    
2595    /Xa{2,4}+b/
2596        X\P
2597        Xa\P
2598        Xaa\P
2599        Xaaa\P
2600        Xaaaa\P
2601    
2602    /X\d{2,4}b/
2603        X\P
2604        X3\P
2605        X33\P
2606        X333\P
2607        X3333\P
2608    
2609    /X\d{2,4}?b/
2610        X\P
2611        X3\P
2612        X33\P
2613        X333\P
2614        X3333\P
2615    
2616    /X\d{2,4}+b/
2617        X\P
2618        X3\P
2619        X33\P
2620        X333\P
2621        X3333\P
2622    
2623    /X\D{2,4}b/
2624        X\P
2625        Xa\P
2626        Xaa\P
2627        Xaaa\P
2628        Xaaaa\P
2629    
2630    /X\D{2,4}?b/
2631        X\P
2632        Xa\P
2633        Xaa\P
2634        Xaaa\P
2635        Xaaaa\P
2636    
2637    /X\D{2,4}+b/
2638        X\P
2639        Xa\P
2640        Xaa\P
2641        Xaaa\P
2642        Xaaaa\P
2643    
2644    /X[abc]{2,4}b/
2645        X\P
2646        Xa\P
2647        Xaa\P
2648        Xaaa\P
2649        Xaaaa\P
2650    
2651    /X[abc]{2,4}?b/
2652        X\P
2653        Xa\P
2654        Xaa\P
2655        Xaaa\P
2656        Xaaaa\P
2657    
2658    /X[abc]{2,4}+b/
2659        X\P
2660        Xa\P
2661        Xaa\P
2662        Xaaa\P
2663        Xaaaa\P
2664    
2665    /X[^a]{2,4}b/
2666        X\P
2667        Xz\P
2668        Xzz\P
2669        Xzzz\P
2670        Xzzzz\P
2671    
2672    /X[^a]{2,4}?b/
2673        X\P
2674        Xz\P
2675        Xzz\P
2676        Xzzz\P
2677        Xzzzz\P
2678    
2679    /X[^a]{2,4}+b/
2680        X\P
2681        Xz\P
2682        Xzz\P
2683        Xzzz\P
2684        Xzzzz\P
2685    
2686    /(Y)X\1{2,4}b/
2687        YX\P
2688        YXY\P
2689        YXYY\P
2690        YXYYY\P
2691        YXYYYY\P
2692    
2693    /(Y)X\1{2,4}?b/
2694        YX\P
2695        YXY\P
2696        YXYY\P
2697        YXYYY\P
2698        YXYYYY\P
2699    
2700    /(Y)X\1{2,4}+b/
2701        YX\P
2702        YXY\P
2703        YXYY\P
2704        YXYYY\P
2705        YXYYYY\P
2706    
2707    /\++\KZ|\d+X|9+Y/
2708        ++++123999\P
2709        ++++123999Y\P
2710        ++++Z1234\P
2711    
2712    /Z(*F)/
2713        Z\P
2714        ZA\P
2715    
2716    /Z(?!)/
2717        Z\P
2718        ZA\P
2719    
2720    /dog(sbody)?/
2721        dogs\P
2722        dogs\P\P
2723    
2724    /dog(sbody)??/
2725        dogs\P
2726        dogs\P\P
2727    
2728    /dog|dogsbody/
2729        dogs\P
2730        dogs\P\P
2731    
2732    /dogsbody|dog/
2733        dogs\P
2734        dogs\P\P
2735    
2736    /\bthe cat\b/
2737        the cat\P
2738        the cat\P\P
2739    
2740    /abc/
2741       abc\P
2742       abc\P\P
2743    
2744    /\w+A/P
2745       CDAAAAB
2746    
2747    /\w+A/PU
2748       CDAAAAB
2749    
2750    /abc\K123/
2751        xyzabc123pqr
2752        xyzabc12\P
2753        xyzabc12\P\P
2754    
2755    /(?<=abc)123/
2756        xyzabc123pqr
2757        xyzabc12\P
2758        xyzabc12\P\P
2759    
2760    /\babc\b/
2761        +++abc+++
2762        +++ab\P
2763        +++ab\P\P
2764    
2765    /(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\w*+))/BZ
2766    
2767    /(?&word)(?&element)(?(DEFINE)(?<element><[^\d][^>]>[^<])(?<word>\w*+))/BZ
2768    
2769    /(ab)(x(y)z(cd(*ACCEPT)))pq/BZ
2770    
2771    /abc\K/+
2772        abcdef
2773        abcdef\N\N
2774        xyzabcdef\N\N
2775        ** Failers
2776        abcdef\N
2777        xyzabcdef\N
2778    
2779    /^(?:(?=abc)|abc\K)/+
2780        abcdef
2781        abcdef\N\N
2782        ** Failers
2783        abcdef\N
2784    
2785    /a?b?/+
2786        xyz
2787        xyzabc
2788        xyzabc\N
2789        xyzabc\N\N
2790        xyz\N\N
2791        ** Failers
2792        xyz\N
2793    
2794    /^a?b?/+
2795        xyz
2796        xyzabc
2797        ** Failers
2798        xyzabc\N
2799        xyzabc\N\N
2800        xyz\N\N
2801        xyz\N
2802    
2803    /^(?<name>a|b\g<name>c)/
2804        aaaa
2805        bacxxx
2806        bbaccxxx
2807        bbbacccxx
2808    
2809    /^(?<name>a|b\g'name'c)/
2810        aaaa
2811        bacxxx
2812        bbaccxxx
2813        bbbacccxx
2814    
2815    /^(a|b\g<1>c)/
2816        aaaa
2817        bacxxx
2818        bbaccxxx
2819        bbbacccxx
2820    
2821    /^(a|b\g'1'c)/
2822        aaaa
2823        bacxxx
2824        bbaccxxx
2825        bbbacccxx
2826    
2827    /^(a|b\g'-1'c)/
2828        aaaa
2829        bacxxx
2830        bbaccxxx
2831        bbbacccxx
2832    
2833    /(^(a|b\g<-1>c))/
2834        aaaa
2835        bacxxx
2836        bbaccxxx
2837        bbbacccxx
2838    
2839    /(?-i:\g<name>)(?i:(?<name>a))/
2840        XaaX
2841        XAAX
2842    
2843    /(?i:\g<name>)(?-i:(?<name>a))/
2844        XaaX
2845        ** Failers
2846        XAAX
2847    
2848    /(?-i:\g<+1>)(?i:(a))/
2849        XaaX
2850        XAAX
2851    
2852    /(?=(?<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>\})\}))\{/
2853    
2854    /(?<n>a|b|c)\g<n>*/
2855       abc
2856       accccbbb
2857    
2858  /^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/  /^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/
2859      XYabcdY      XYabcdY
2860    
2861  /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/  /(?<=b(?1)|zzz)(a)/
2862      XYabcdY      xbaax
2863        xzzzax
2864    
2865    /(a)(?<=b\1)/
2866    
2867    /(a)(?<=b+(?1))/
2868    
2869    /(a+)(?<=b(?1))/
2870    
2871    /(a(?<=b(?1)))/
2872    
2873    /(?<=b(?1))xyz/
2874    
2875    /(?<=b(?1))xyz(b+)pqrstuvew/
2876    
2877    /(a|bc)\1/SI
2878    
2879    /(a|bc)\1{2,3}/SI
2880    
2881    /(a|bc)(?1)/SI
2882    
2883    /(a|b\1)(a|b\1)/SI
2884    
2885    /(a|b\1){2}/SI
2886    
2887    /(a|bbbb\1)(a|bbbb\1)/SI
2888    
2889    /(a|bbbb\1){2}/SI
2890    
2891    /^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
2892    
2893    /  (?: [\040\t] |  \(
2894    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2895    \)  )*                          # optional leading comment
2896    (?:    (?:
2897    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2898    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2899    |
2900    " (?:                      # opening quote...
2901    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2902    |                     #    or
2903    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2904    )* "  # closing quote
2905    )                    # initial word
2906    (?:  (?: [\040\t] |  \(
2907    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2908    \)  )*  \.  (?: [\040\t] |  \(
2909    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2910    \)  )*   (?:
2911    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2912    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2913    |
2914    " (?:                      # opening quote...
2915    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2916    |                     #    or
2917    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2918    )* "  # closing quote
2919    )  )* # further okay, if led by a period
2920    (?: [\040\t] |  \(
2921    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2922    \)  )*  @  (?: [\040\t] |  \(
2923    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2924    \)  )*    (?:
2925    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2926    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2927    |   \[                         # [
2928    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2929    \]                        #           ]
2930    )                           # initial subdomain
2931    (?:                                  #
2932    (?: [\040\t] |  \(
2933    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2934    \)  )*  \.                        # if led by a period...
2935    (?: [\040\t] |  \(
2936    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2937    \)  )*   (?:
2938    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2939    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2940    |   \[                         # [
2941    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2942    \]                        #           ]
2943    )                     #   ...further okay
2944    )*
2945    # address
2946    |                     #  or
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    " (?:                      # opening quote...
2952    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2953    |                     #    or
2954    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2955    )* "  # closing quote
2956    )             # one word, optionally followed by....
2957    (?:
2958    [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
2959    \(
2960    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2961    \)       |  # comments, or...
2962    
2963    " (?:                      # opening quote...
2964    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
2965    |                     #    or
2966    \\ [^\x80-\xff]           #   Escaped something (something != CR)
2967    )* "  # closing quote
2968    # quoted strings
2969    )*
2970    <  (?: [\040\t] |  \(
2971    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2972    \)  )*                     # leading <
2973    (?:  @  (?: [\040\t] |  \(
2974    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2975    \)  )*    (?:
2976    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2977    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2978    |   \[                         # [
2979    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2980    \]                        #           ]
2981    )                           # initial subdomain
2982    (?:                                  #
2983    (?: [\040\t] |  \(
2984    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2985    \)  )*  \.                        # if led by a period...
2986    (?: [\040\t] |  \(
2987    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2988    \)  )*   (?:
2989    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
2990    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
2991    |   \[                         # [
2992    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
2993    \]                        #           ]
2994    )                     #   ...further okay
2995    )*
2996    
2997    (?:  (?: [\040\t] |  \(
2998    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
2999    \)  )*  ,  (?: [\040\t] |  \(
3000    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3001    \)  )*  @  (?: [\040\t] |  \(
3002    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3003    \)  )*    (?:
3004    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3005    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3006    |   \[                         # [
3007    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3008    \]                        #           ]
3009    )                           # initial subdomain
3010    (?:                                  #
3011    (?: [\040\t] |  \(
3012    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3013    \)  )*  \.                        # if led by a period...
3014    (?: [\040\t] |  \(
3015    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3016    \)  )*   (?:
3017    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3018    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3019    |   \[                         # [
3020    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3021    \]                        #           ]
3022    )                     #   ...further okay
3023    )*
3024    )* # further okay, if led by comma
3025    :                                # closing colon
3026    (?: [\040\t] |  \(
3027    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3028    \)  )*  )? #       optional route
3029    (?:
3030    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3031    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3032    |
3033    " (?:                      # opening quote...
3034    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
3035    |                     #    or
3036    \\ [^\x80-\xff]           #   Escaped something (something != CR)
3037    )* "  # closing quote
3038    )                    # initial word
3039    (?:  (?: [\040\t] |  \(
3040    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3041    \)  )*  \.  (?: [\040\t] |  \(
3042    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3043    \)  )*   (?:
3044    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3045    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3046    |
3047    " (?:                      # opening quote...
3048    [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
3049    |                     #    or
3050    \\ [^\x80-\xff]           #   Escaped something (something != CR)
3051    )* "  # closing quote
3052    )  )* # further okay, if led by a period
3053    (?: [\040\t] |  \(
3054    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3055    \)  )*  @  (?: [\040\t] |  \(
3056    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3057    \)  )*    (?:
3058    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3059    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3060    |   \[                         # [
3061    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3062    \]                        #           ]
3063    )                           # initial subdomain
3064    (?:                                  #
3065    (?: [\040\t] |  \(
3066    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3067    \)  )*  \.                        # if led by a period...
3068    (?: [\040\t] |  \(
3069    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3070    \)  )*   (?:
3071    [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
3072    (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
3073    |   \[                         # [
3074    (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
3075    \]                        #           ]
3076    )                     #   ...further okay
3077    )*
3078    #       address spec
3079    (?: [\040\t] |  \(
3080    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3081    \)  )*  > #                  trailing >
3082    # name and address
3083    )  (?: [\040\t] |  \(
3084    (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
3085    \)  )*                       # optional trailing comment
3086    /xSI
3087    
3088    /<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
3089    
3090    "(?>.*/)foo"SI
3091    
3092    /(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /xSI
3093    
3094    /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/iSI
3095    
3096    /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/SI
3097    
3098    /<a[\s]+href[\s]*=[\s]*          # find <a href=
3099     ([\"\'])?                       # find single or double quote
3100     (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
3101                                     # quote, otherwise match up to next space
3102    /isxSI
3103    
3104    /^(?!:)                       # colon disallowed at start
3105      (?:                         # start of item
3106        (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
3107        (?(1)0 | () ) )           # if null previously matched, fail; else null
3108        :                         # followed by colon
3109      ){1,7}                      # end item; 1-7 of them required
3110      [0-9a-f]{1,4} $             # final hex number at end of string
3111      (?(1)|.)                    # check that there was an empty component
3112      /xiIS
3113    
3114    /(?|(?<a>A)|(?<a>B))/I
3115        AB\Ca
3116        BA\Ca
3117    
3118    /(?|(?<a>A)|(?<b>B))/
3119    
3120    /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |
3121        b(?<quote> (?<apostrophe>')|(?<realquote>")) )
3122        (?('quote')[a-z]+|[0-9]+)/JIx
3123        a"aaaaa
3124        b"aaaaa
3125        ** Failers
3126        b"11111
3127        a"11111
3128    
3129    /^(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/JDZx
3130        abcdX
3131        eX
3132        ** Failers
3133        abcdY
3134        ey
3135    
3136    /(?<A>a) (b)(c)  (?<A>d  (?(R&A)$ | (?4)) )/JDZx
3137        abcdd
3138        ** Failers
3139        abcdde
3140    
3141  /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/  /abcd*/
3142      XYabcdY      xxxxabcd\P
3143        xxxxabcd\P\P
3144    
3145    /abcd*/i
3146        xxxxabcd\P
3147        xxxxabcd\P\P
3148        XXXXABCD\P
3149        XXXXABCD\P\P
3150    
3151    /abc\d*/
3152        xxxxabc1\P
3153        xxxxabc1\P\P
3154    
3155    /(a)bc\1*/
3156        xxxxabca\P
3157        xxxxabca\P\P
3158    
3159    /abc[de]*/
3160        xxxxabcde\P
3161        xxxxabcde\P\P
3162    
3163    /-- This is not in the Perl 5.10 test because Perl seems currently to be broken
3164        and not behaving as specified in that it *does* bumpalong after hitting
3165        (*COMMIT). --/
3166    
3167    /(?1)(A(*COMMIT)|B)D/
3168        ABD
3169        XABD
3170        BAD
3171        ABXABD
3172        ** Failers
3173        ABX
3174        BAXBAD
3175    
3176    /(\3)(\1)(a)/<JS>
3177        cat
3178    
3179    /(\3)(\1)(a)/SI<JS>
3180        cat
3181    
3182    /(\3)(\1)(a)/SI
3183        cat
3184    
3185    /i(?(DEFINE)(?<s>a))/SI
3186        i
3187    
3188    /()i(?(1)a)/SI
3189        ia
3190    
3191    /(?i)a(?-i)b|c/BZ
3192        XabX
3193        XAbX
3194        CcC
3195        ** Failers
3196        XABX
3197    
3198    /(?i)a(?s)b|c/BZ
3199    
3200    /(?i)a(?s-i)b|c/BZ
3201    
3202    /^(ab(c\1)d|x){2}$/BZ
3203        xabcxd
3204    
3205    /^(?&t)*+(?(DEFINE)(?<t>.))$/BZ
3206    
3207    /^(?&t)*(?(DEFINE)(?<t>.))$/BZ
3208    
3209    / -- The first four of these are not in the Perl 5.10 test because Perl
3210         documents that the use of \K in assertions is "not well defined". The
3211         last is here because Perl gives the match as "b" rather than "ab". I
3212         believe this to be a Perl bug. --/
3213    
3214    /(?=a\Kb)ab/
3215        ab
3216    
3217    /(?!a\Kb)ac/
3218        ac
3219    
3220    /^abc(?<=b\Kc)d/
3221        abcd
3222    
3223    /^abc(?<!b\Kq)d/
3224        abcd
3225    
3226    /(?>a\Kb)z|(ab)/
3227        ab
3228    
3229    /----------------------/
3230    
3231    /(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/
3232    
3233    /abc(*MARK:)pqr/
3234    
3235    /abc(*:)pqr/
3236    
3237    /abc(*FAIL:123)xyz/
3238    
3239    /--- This should, and does, fail. In Perl, it does not, which I think is a
3240         bug because replacing the B in the pattern by (B|D) does make it fail. ---/
3241    
3242    /A(*COMMIT)B/+K
3243        ACABX
3244    
3245    /--- These should be different, but in Perl 5.11 are not, which I think
3246         is a bug in Perl. ---/
3247    
3248    /A(*THEN)B|A(*THEN)C/K
3249        AC
3250    
3251    /A(*PRUNE)B|A(*PRUNE)C/K
3252        AC
3253    
3254    /--- A whole lot of tests of verbs with arguments are here rather than in test
3255         11 because Perl doesn't seem to follow its specification entirely
3256         correctly. ---/
3257    
3258    /--- Perl 5.11 sets $REGERROR on the AC failure case here; PCRE does not. It is
3259         not clear how Perl defines "involved in the failure of the match". ---/
3260    
3261    /^(A(*THEN:A)B|C(*THEN:B)D)/K
3262        AB
3263        CD
3264        ** Failers
3265        AC
3266        CB
3267    
3268    /--- Check the use of names for success and failure. PCRE doesn't show these
3269    names for success, though Perl does, contrary to its spec. ---/
3270    
3271    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
3272        AB
3273        CD
3274        ** Failers
3275        AC
3276        CB
3277    
3278    /--- An empty name does not pass back an empty string. It is the same as if no
3279    name were given. ---/
3280    
3281    /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
3282        AB
3283        CD
3284    
3285    /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
3286    
3287    /A(*PRUNE:A)B/K
3288        ACAB
3289    
3290    /(*MARK:A)(*PRUNE:B)(C|X)/K
3291        C
3292        D
3293    
3294    /(*MARK:A)(*THEN:B)(C|X)/K
3295        C
3296        D
3297    
3298    /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
3299    
3300    /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
3301        AAAC
3302    
3303    /--- Same --/
3304    
3305    /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
3306        AAAC
3307    
3308    /--- This should fail; the SKIP advances by one, but when we get to AC, the
3309         PRUNE kills it. ---/
3310    
3311    /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
3312        AAAC
3313    
3314    /A(*:A)A+(*SKIP)(B|Z) | AC/xK
3315        AAAC
3316    
3317    /--- This should fail, as a null name is the same as no name ---/
3318    
3319    /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
3320        AAAC
3321    
3322    /--- This fails in PCRE, and I think that is in accordance with Perl's
3323         documentation, though in Perl it succeeds. ---/
3324    
3325    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
3326        AAAC
3327    
3328    /--- Mark names can be duplicated ---/
3329    
3330    /A(*:A)B|X(*:A)Y/K
3331        AABC
3332        XXYZ
3333    
3334    /^A(*:A)B|^X(*:A)Y/K
3335        ** Failers
3336        XAQQ
3337    
3338    /--- A check on what happens after hitting a mark and them bumping along to
3339    something that does not even start. Perl reports tags after the failures here,
3340    though it does not when the individual letters are made into something
3341    more complicated. ---/
3342    
3343    /A(*:A)B|XX(*:B)Y/K
3344        AABC
3345        XXYZ
3346        ** Failers
3347        XAQQ
3348        XAQQXZZ
3349        AXQQQ
3350        AXXQQQ
3351    
3352    /--- COMMIT at the start of a pattern should be the same as an anchor. Perl
3353    optimizations defeat this. So does the PCRE optimization unless we disable it
3354    with \Y. ---/
3355    
3356    /(*COMMIT)ABC/
3357        ABCDEFG
3358        ** Failers
3359        DEFGABC\Y
3360    
3361    /--- Repeat some tests with added studying. ---/
3362    
3363    /A(*COMMIT)B/+KS
3364        ACABX
3365    
3366    /A(*THEN)B|A(*THEN)C/KS
3367        AC
3368    
3369    /A(*PRUNE)B|A(*PRUNE)C/KS
3370        AC
3371    
3372    /^(A(*THEN:A)B|C(*THEN:B)D)/KS
3373        AB
3374        CD
3375        ** Failers
3376        AC
3377        CB
3378    
3379    /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/KS
3380        AB
3381        CD
3382        ** Failers
3383        AC
3384        CB
3385    
3386    /^(A(*PRUNE:)B|C(*PRUNE:B)D)/KS
3387        AB
3388        CD
3389    
3390    /A(*PRUNE:A)B/KS
3391        ACAB
3392    
3393    /(*MARK:A)(*PRUNE:B)(C|X)/KS
3394        C
3395        D
3396    
3397    /(*MARK:A)(*THEN:B)(C|X)/KS
3398        C
3399        D
3400    
3401    /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xKS
3402        AAAC
3403    
3404    /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xKS
3405        AAAC
3406    
3407    /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xKS
3408        AAAC
3409    
3410    /A(*:A)A+(*SKIP)(B|Z) | AC/xKS
3411        AAAC
3412    
3413    /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xKS
3414        AAAC
3415    
3416    /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xKS
3417        AAAC
3418    
3419    /A(*:A)B|XX(*:B)Y/KS
3420        AABC
3421        XXYZ
3422        ** Failers
3423        XAQQ
3424        XAQQXZZ
3425        AXQQQ
3426        AXXQQQ
3427    
3428    /(*COMMIT)ABC/
3429        ABCDEFG
3430        ** Failers
3431        DEFGABC\Y
3432    
3433    /^(ab (c+(*THEN)cd) | xyz)/x
3434        abcccd
3435    
3436    /^(ab (c+(*PRUNE)cd) | xyz)/x
3437        abcccd
3438    
3439   %^(?:  /^(ab (c+(*FAIL)cd) | xyz)/x
3440   [\x09\x0A\x0D\x20-\x7E]# ASCII      abcccd
    | [\xC2-\xDF][\x80-\xBF]# non-overlong 2-byte  
    |  \xE0[\xA0-\xBF][\x80-\xBF]# excluding overlongs  
    | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte  
    |  \xED[\x80-\x9F][\x80-\xBF]# excluding surrogates  
    |  \xF0[\x90-\xBF][\x80-\xBF]{2}# planes 1-3  
    | [\xF1-\xF3][\x80-\xBF]{3}  # planes 4-15  
    |  \xF4[\x80-\x8F][\x80-\xBF]{2}# plane 16  
    )*$%xs  
 <div align="justify"><p>- Im Aufbau -</p><h3 id="aventurien">Aventurien</h3><div style="border: 1px none ; margin: 5px 5px 5px 10px; float:right; width: 100px;"><strong>Navigation</strong> <br /><br /><a href="#aventurien">Aventurien</a><br /><a href="#ferdok">Die Stadt Ferdok</a><br /><a href="#weitere">Weitere Ziele</a></div><p>{mosimage} Aventurien ist ein Kontinent der Welt Dere undAusgangspunkt f&uuml;r die meisten Abenteuer in der Welt von <em>DasSchwarze Auge</em>. Von Nord nach S&uuml;d erstreckt sich derKontinent ca. &uuml;ber 3000 Meilen, von Ost nach West sind esimmerhin noch 2000 Meilen. Von den Tundren Thorwals bis zurW&uuml;ste Khom kann man so ziemlich alle Klimazonen in Aventurienfinden.</p><p>Im Herzen Aventuriens liegt das Kaiserreich, auch das Mittelreichgenannt, mit seiner Hauptstadt Gareth (rot umrandeter Bereich).  DieKultur erinnert entfernt an das mittelalterliche Europa. DieHandlung Drakensangs wird zu gro&szlig;en Teilen im Mittelreichspielen, genauer gesagt, in der Umgebung der Stadt Ferdok (s.u.).Doch auch andere, exotischere Orte sollen Ziel der Reise werden.</p><p>Zahlreiche V&ouml;lker und Rassen bewohnen den Kontinent, allenvoran nat&uuml;rlich die Menschenv&ouml;lker, die die Mehrheit derBewohner stellen. Unter den Menschen gibt es zahlreicheunterschiedliche Kulturen, z. B. die wikinger&auml;hnlichenThorwaler, das Nomadenvolk der Nivesen oder eben dieMittell&auml;nder. Daneben gibt es nat&uuml;rlich nochfantastischere V&ouml;lker wie die Elfen (mit mehrern Untergruppen),Zwerge, Orks und mehr, eben alles, was eine Fantasywelt zu bietenhat.</p><p>&nbsp;</p><h3 id="ferdok">Ferdok</h3><p><a target="_blank" href="images/stories/stadtplan_g.jpg">{mosimage}</a></p><p>Ferdok ist eine Grafenstadt im Mittelreich, etwas westlich derHauptstadt Gareth, und hat etwa 3000 Einwohner. Sie geh&ouml;rt zuden &auml;ltesten menschlichen Siedlungen des Kosch. Im Laufe derGeschichte mu&szlig;te die Stadt jedoch wegen einer &Auml;nderungdes Flu&szlig;laufes des Gro&szlig;en Flu&szlig;es im Jahre 270 BFverlegt werden, da die Stadt in der Bedeutungslosigkeit zu versinkendrohte. Heute liegt Ferdok wieder direkt an der Einm&uuml;ndung desRakula in den Gro&szlig;en Flu&szlig;. Obwohl  die Stadt diefr&uuml;here Bedeutung l&auml;ngst verloren hat, hat sich Ferdok alsein wichtiger Handelshafen etabliert (weltber&uuml;hmt: FerdokerBier). Hier werden die Waren von Gareth umgeschlagen, die &uuml;berdie gro&szlig;e Handelsstra&szlig;e von und nach Ferdok verfrachtetwerden. Ferdok ist damit eines der Tore zum Westen underm&ouml;glicht schnelle Reisen in andere Teile der Aventuriens.</p><p>Verwaltungstechnisch geh&ouml;rt Ferdok zum F&uuml;rstentumKosch, dessen Hauptstadt sie langezeit war. Mittlerweile hat siediesen Status jedoch an Angbar verloren. Trotz seiner wichtigenRolle als Handelsort sind die Bewohner Ferdoks ein eher biederesV&ouml;lkchen und h&auml;ngen der Erinnerung an die ruhmreichereVergangenheit hinterher. Nachts muss man auf den Stra&szlig;enneuerdings aufpassen. Zur Handlungszeit verunsichert n&auml;mlicheine grauenhafte Mordserie die Bewohner Ferdoks und l&auml;sst dieBev&ouml;lkerung nachts nicht richtig schlafen. Einige Bereichesollte man dann grunds&auml;tzlich nicht mehr besuchen, wenn einemdie eigene Gesundheit am Herzen liegt.</p><p>Die Stadt wird eine zentrale Anlaufstelle in Drakensang sein,weswegen sie auch vollst&auml;ndig, nach den Vorgaben desDSA-Regelwerks in das Spiel eingebaut wird. Der Stadtplan (zumVergr&ouml;&szlig;ern anklicken) wurde von Radon Labs dem Regelwerkdirekt entnommen und wird Euch auch f&uuml;r Drakensang gute Diensteleisten.</p><br /><h3 id="weitere">Weitere Reiseziele des Spiels</h3><a target="_blank"href="images/stories/artikel/map.jpg">{mosimage}</a> Insgesamt solles 12 Hauptregionen geben, die jeweils ca. 1 Quadratkilometergro&szlig; sind. Alle diese Regionen unterteilen sich nochmal in&uuml;ber 50 kleinere Gebiete. Bekannt sind neben Ferdok bislang:<ul><li>Avestreu (kleines Dorf s&uuml;d&ouml;stl. von Ferdok)</li><li>Dunkelwald (s&uuml;dl. von Ferdok)</li><li>Ruine Blutberge (s&uuml;dl. von Ferdok, am Rand desDunkelwaldes)</li><li>Moorbr&uuml;ck (s&uuml;dl. des Dunkelwaldes)</li><li>Burg Grimmzahn (westl. von Moorbr&uuml;ck)</li><li>Murolosch (eine Zwergenstadt)</li><li>der Berg Drachensang / Drakensang (im Amboss-Gebirgegelegen)</li></ul><p>&nbsp;</p><p>&nbsp;</p><p>Ausf&uuml;hrlichere Infos:</p><p><a title="Wiki Aventurica" target="_blank"href="http://dsa4.de/wiki">Wiki Aventurica </a>(externer Link)<br /><a href="http://www.eychgras.de/koschwiki/index.php"target="_blank">KoschWiki</a> (externer Link)</p><p>&nbsp;</p></div>  
3441    
3442  / End of testinput2 /  /-- End of testinput2 --/

Legend:
Removed from v.410  
changed lines
  Added in v.510

  ViewVC Help
Powered by ViewVC 1.1.5