File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pcre / testdata / testinput11
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:05:52 2012 UTC (12 years, 7 months ago) by misho
Branches: pcre, MAIN
CVS tags: v8_21, HEAD
pcre

/-- These tests are for the Perl >= 5.10 features that PCRE supports. --/

/\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

/(foo)\Kbar/
    foobar
   
/(foo)(\Kbar|baz)/
    foobar
    foobaz 

/(foo\Kbar)baz/
    foobarbaz

/abc\K|def\K/g+
    Xabcdefghi

/ab\Kc|de\Kf/g+
    Xabcdefghi
    
/(?=C)/g+
    ABCDECBA
    
/^abc\K/+
    abcdef
    ** Failers
    defabcxyz   

/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
    ababababbbabZXXXX

/(?<A>tom|bon)-\g{A}/
    tom-tom
    bon-bon 
    
/(^(a|b\g{-1}))/
    bacxxx

/(?|(abc)|(xyz))\1/
    abcabc
    xyzxyz 
    ** Failers
    abcxyz
    xyzabc   
    
/(?|(abc)|(xyz))(?1)/
    abcabc
    xyzabc 
    ** Failers 
    xyzxyz 
 
/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
    XYabcdY

/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
    XYabcdY

/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
    XYabcdY

/(?'abc'\w+):\k<abc>{2}/
    a:aaxyz
    ab:ababxyz
    ** Failers
    a:axyz
    ab:abxyz

/(?'abc'\w+):\g{abc}{2}/
    a:aaxyz
    ab:ababxyz
    ** Failers
    a:axyz
    ab:abxyz

/^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
    abd
    ce

/^(a.)\g-1Z/
    aXaXZ

/^(a.)\g{-1}Z/
    aXaXZ

/^(?(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

/(?(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

/^(\w++|\s++)*$/
    now is the time for all good men to come to the aid of the party
    *** Failers
    this is not a line with only words and spaces!

/(\d++)(\w)/
    12345a
    *** Failers
    12345+

/a++b/
    aaab

/(a++b)/
    aaab

/(a++)b/
    aaab

/([^()]++|\([^()]*\))+/
    ((abc(ade)ufh()()x

/\(([^()]++|\([^()]+\))+\)/
    (abc)
    (abc(def)xyz)
    *** Failers
    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

/^([^()]|\((?1)*\))*$/
    abc
    a(b)c
    a(b(c))d
    *** Failers)
    a(b(c)d

/^>abc>([^()]|\((?1)*\))*<xyz<$/
   >abc>123<xyz<
   >abc>1(2)3<xyz<
   >abc>(1(2)3)<xyz<

/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
    1221
    Satanoscillatemymetallicsonatas
    AmanaplanacanalPanama
    AblewasIereIsawElba
    *** Failers
    Thequickbrownfox

/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
    12
    (((2+2)*-3)-7)
    -12
    *** Failers
    ((2+2)*-3)-7)

/^(x(y|(?1){2})z)/
    xyz
    xxyzxyzz
    *** Failers
    xxyzz
    xxyzxyzxyzz

/((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))/x
    <>
    <abcd>
    <abc <123> hij>
    <abc <def> hij>
    <abc<>def>
    <abc<>
    *** Failers
    <abc

/^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
    AB
    ABX
    AADE
    ACDE
    ** Failers
    AD 
        
/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
    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

/^((.)(?1)\2|.)$/
    a
    aba
    aabaa  
    abcdcba 
    pqaabaaqp  
    ablewasiereisawelba
    rhubarb
    the quick brown fox  

/(a)(?<=b(?1))/
    baz
    ** Failers
    caz  
    
/(?<=b(?1))(a)/
    zbaaz
    ** Failers
    aaa  
    
/(?<X>a)(?<=b(?&X))/
    baz

/^(?|(abc)|(def))\1/
    abcabc
    defdef 
    ** Failers
    abcdef
    defabc   
    
/^(?|(abc)|(def))(?1)/
    abcabc
    defabc
    ** Failers
    defdef
    abcdef    

/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
    a\"aaaaa
    b\"aaaaa 
    ** Failers 
    b\"11111

/(?:(?1)|B)(A(*F)|C)/
    ABCD
    CCD
    ** Failers
    CAD   

/^(?:(?1)|B)(A(*F)|C)/
    CCD
    BCD 
    ** Failers
    ABCD
    CAD
    BAD    

/(?:(?1)|B)(A(*ACCEPT)XX|C)D/
    AAD
    ACD
    BAD
    BCD
    BAX  
    ** Failers
    ACX
    ABC   

/(?(DEFINE)(A))B(?1)C/
    BAC

/(?(DEFINE)((A)\2))B(?1)C/
    BAAC

/(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
    (ab(cd)ef)

/^(?!a(*SKIP)b)/
    ac
    
/^(?=a(*SKIP)b|ac)/
    ** Failers
    ac
    
/^(?=a(*THEN)b|ac)/
    ac
    
/^(?=a(*PRUNE)b)/
    ab  
    ** Failers 
    ac

/^(?=a(*ACCEPT)b)/
    ac

/^(?(?!a(*SKIP)b))/
    ac

/(?>a\Kb)/
    ab

/((?>a\Kb))/
    ab

/(a\Kb)/
    ab
    
/^a\Kcz|ac/
    ac
    
/(?>a\Kbz|ab)/
    ab 

/^(?&t)(?(DEFINE)(?<t>a\Kb))$/
    ab

/^([^()]|\((?1)*\))*$/
    a(b)c
    a(b(c)d)e 

/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
    0
    00
    0000  

/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
    0
    00
    0000  

/--- This one does fail, as expected, in Perl. It needs the complex item at the
     end of the pattern. A single letter instead of (B|D) makes it not fail,
     which I think is a Perl bug. --- /

/A(*COMMIT)(B|D)/
    ACABX

/--- Check the use of names for failure ---/

/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
    ** Failers
    AC
    CB    
    
/--- Force no study, otherwise mark is not seen. The studied version is in
     test 2 because it isn't Perl-compatible. ---/

/(*MARK:A)(*SKIP:B)(C|X)/KSS
    C
    D
     
/^(A(*THEN:A)B|C(*THEN:B)D)/K
    ** Failers
    CB    

/^(?:A(*THEN:A)B|C(*THEN:B)D)/K
    CB    
    
/^(?>A(*THEN:A)B|C(*THEN:B)D)/K
    CB    
    
/--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
that we have to have something complicated such as (B|Z) at the end because,
for Perl, a simple character somehow causes an unwanted optimization to mess
with the handling of backtracking verbs. ---/

/A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
    AAAC
    
/--- Test skipping over a non-matching mark. ---/

/A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
    AAAC
    
/--- Check shorthand for MARK ---/

/A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
    AAAC

/--- Don't loop! Force no study, otherwise mark is not seen. ---/

/(*:A)A+(*SKIP:A)(B|Z)/KSS
    AAAC

/--- This should succeed, as a non-existent skip name disables the skip ---/ 

/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
    AAAC

/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
    AAAC

/--- COMMIT at the start of a pattern should act like an anchor. Again, 
however, we need the complication for Perl. ---/

/(*COMMIT)(A|P)(B|P)(C|P)/
    ABCDEFG
    ** Failers
    DEFGABC  

/--- COMMIT inside an atomic group can't stop backtracking over the group. ---/

/(\w+)(?>b(*COMMIT))\w{2}/
    abbb

/(\w+)b(*COMMIT)\w{2}/
    abbb

/--- Check opening parens in comment when seeking forward reference. ---/ 

/(?&t)(?#()(?(DEFINE)(?<t>a))/
    bac

/--- COMMIT should override THEN ---/

/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
  yes

/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
  yes

/b?(*SKIP)c/
    bc
    abc
   
/(*SKIP)bc/
    a

/(*SKIP)b/
    a 

/(?P<abn>(?P=abn)xxx|)+/
    xxx

/(?i:([^b]))(?1)/
    aa
    aA     
    ** Failers
    ab
    aB
    Ba
    ba

/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
    aaaaaaX
    ** Failers 
    aaaaaa 

/^(?&t)*(?(DEFINE)(?<t>a))\w$/
    aaaaaaX
    aaaaaa 

/^(a)*+(\w)/
    aaaaX
    YZ 
    ** Failers 
    aaaa

/^(?:a)*+(\w)/
    aaaaX
    YZ 
    ** Failers 
    aaaa

/^(a)++(\w)/
    aaaaX
    ** Failers 
    aaaa
    YZ 

/^(?:a)++(\w)/
    aaaaX
    ** Failers 
    aaaa
    YZ 

/^(a)?+(\w)/
    aaaaX
    YZ 

/^(?:a)?+(\w)/
    aaaaX
    YZ 

/^(a){2,}+(\w)/
    aaaaX
    ** Failers
    aaa
    YZ 

/^(?:a){2,}+(\w)/
    aaaaX
    ** Failers
    aaa
    YZ 

/(a|)*(?1)b/
    b
    ab
    aab  

/(a)++(?1)b/
    ** Failers
    ab 
    aab

/(a)*+(?1)b/
    ** Failers
    ab
    aab  

/(?1)(?:(b)){0}/
    b

/(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
    foo(bar(baz)+baz(bop))

/(A (A|B(*ACCEPT)|C) D)(E)/x
    AB

/\A.*?(?:a|b(*THEN)c)/
    ba

/\A.*?(?:a|bc)/
    ba

/\A.*?(a|b(*THEN)c)/
    ba

/\A.*?(a|bc)/
    ba

/\A.*?(?:a|b(*THEN)c)++/
    ba

/\A.*?(?:a|bc)++/
    ba

/\A.*?(a|b(*THEN)c)++/
    ba

/\A.*?(a|bc)++/
    ba

/\A.*?(?:a|b(*THEN)c|d)/
    ba

/\A.*?(?:a|bc|d)/
    ba

/(?:(b))++/
    beetle

/(?(?=(a(*ACCEPT)z))a)/
    a

/^(a)(?1)+ab/
    aaaab
    
/^(a)(?1)++ab/
    aaaab

/^(?=a(*:M))aZ/K
    aZbc

/^(?!(*:M)b)aZ/K
    aZbc

/(?(DEFINE)(a))?b(?1)/
    backgammon

/^\N+/
    abc\ndef
    
/^\N{1,}/
    abc\ndef 

/(?(R)a+|(?R)b)/
    aaaabcde

/(?(R)a+|((?R))b)/
    aaaabcde

/((?(R)a+|(?1)b))/
    aaaabcde

/((?(R1)a+|(?1)b))/
    aaaabcde

/a(*:any 
name)/K
    abc
    
/(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
    a
    ba
    bba 
    
/--- Checking revised (*THEN) handling ---/ 

/--- Capture ---/

/^.*? (a(*THEN)b) c/x
    aabc

/^.*? (a(*THEN)b|(*F)) c/x
    aabc

/^.*? ( (a(*THEN)b) | (*F) ) c/x
    aabc

/^.*? ( (a(*THEN)b) ) c/x
    aabc

/--- Non-capture ---/

/^.*? (?:a(*THEN)b) c/x
    aabc

/^.*? (?:a(*THEN)b|(*F)) c/x
    aabc

/^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
    aabc

/^.*? (?: (?:a(*THEN)b) ) c/x
    aabc

/--- Atomic ---/

/^.*? (?>a(*THEN)b) c/x
    aabc

/^.*? (?>a(*THEN)b|(*F)) c/x
    aabc

/^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
    aabc

/^.*? (?> (?>a(*THEN)b) ) c/x
    aabc

/--- Possessive capture ---/

/^.*? (a(*THEN)b)++ c/x
    aabc

/^.*? (a(*THEN)b|(*F))++ c/x
    aabc

/^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
    aabc

/^.*? ( (a(*THEN)b)++ )++ c/x
    aabc

/--- Possessive non-capture ---/

/^.*? (?:a(*THEN)b)++ c/x
    aabc

/^.*? (?:a(*THEN)b|(*F))++ c/x
    aabc

/^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
    aabc

/^.*? (?: (?:a(*THEN)b)++ )++ c/x
    aabc
    
/--- Condition assertion ---/

/^(?(?=a(*THEN)b)ab|ac)/
    ac
 
/--- Condition ---/

/^.*?(?(?=a)a|b(*THEN)c)/
    ba

/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
    ba

/^.*?(?(?=a)a(*THEN)b|c)/
    ac

/--- Assertion ---/

/^.*(?=a(*THEN)b)/ 
    aabc

/------------------------------/

/(?>a(*:m))/imsxSK 
    a

/(?>(a)(*:m))/imsxSK 
    a

/(?<=a(*ACCEPT)b)c/
    xacd

/(?<=(a(*ACCEPT)b))c/
    xacd

/(?<=(a(*COMMIT)b))c/
    xabcd
    ** Failers 
    xacd
    
/(?<!a(*FAIL)b)c/
    xcd
    acd 

/(?<=a(*:N)b)c/K
    xabcd
    
/(?<=a(*PRUNE)b)c/
    xabcd 

/(?<=a(*SKIP)b)c/
    xabcd 

/(?<=a(*THEN)b)c/
    xabcd 

/(a)(?2){2}(.)/
    abcd

/(*MARK:A)(*PRUNE:B)(C|X)/KS
    C
    D 

/(*MARK:A)(*PRUNE:B)(C|X)/KSS
    C
    D 

/(*MARK:A)(*THEN:B)(C|X)/KS
    C
    D 

/(*MARK:A)(*THEN:B)(C|X)/KSY
    C
    D 

/(*MARK:A)(*THEN:B)(C|X)/KSS
    C
    D 

/--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/

/A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
    AAAC

/--- Same --/

/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
    AAAC

/A(*:A)A+(*SKIP)(B|Z) | AC/xK
    AAAC

/--- This should fail, as a null name is the same as no name ---/

/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
    AAAC

/--- A check on what happens after hitting a mark and them bumping along to
something that does not even start. Perl reports tags after the failures here, 
though it does not when the individual letters are made into something 
more complicated. ---/

/A(*:A)B|XX(*:B)Y/K
    AABC
    XXYZ 
    ** Failers
    XAQQ  
    XAQQXZZ  
    AXQQQ 
    AXXQQQ 
    
/^(A(*THEN:A)B|C(*THEN:B)D)/K
    AB
    CD
    ** Failers
    AC
    CB    
    
/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
    AB
    CD
    ** Failers
    AC
    CB    
    
/--- An empty name does not pass back an empty string. It is the same as if no
name were given. ---/ 

/^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
    AB
    CD 

/--- PRUNE goes to next bumpalong; COMMIT does not. ---/
    
/A(*PRUNE:A)B/K
    ACAB

/--- Mark names can be duplicated ---/

/A(*:A)B|X(*:A)Y/K
    AABC
    XXYZ 
    
/b(*:m)f|a(*:n)w/K
    aw 
    ** Failers 
    abc

/b(*:m)f|aw/K
    abaw
    ** Failers 
    abc
    abax 

/A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
    AAAC

/a(*PRUNE:X)bc|qq/KY
    ** Failers
    axy

/a(*THEN:X)bc|qq/KY
    ** Failers
    axy

/(?=a(*MARK:A)b)..x/K
    abxy
    ** Failers
    abpq  

/(?=a(*MARK:A)b)..(*:Y)x/K
    abxy
    ** Failers
    abpq  

/(?=a(*PRUNE:A)b)..x/K
    abxy
    ** Failers
    abpq  

/(?=a(*PRUNE:A)b)..(*:Y)x/K
    abxy
    ** Failers
    abpq  

/(?=a(*THEN:A)b)..x/K
    abxy
    ** Failers
    abpq  

/(?=a(*THEN:A)b)..(*:Y)x/K
    abxy
    ** Failers
    abpq  

/-- End of testinput11 --/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>