Diff for /embedaddon/pcre/testdata/testoutput2 between versions 1.1 and 1.1.1.4

version 1.1, 2012/02/21 23:05:52 version 1.1.1.4, 2013/07/22 08:25:57
Line 5 Line 5
     either because PCRE can't be compatible, or there is a possible Perl       either because PCRE can't be compatible, or there is a possible Perl 
     bug.      bug.
           
    NOTE: This is a non-UTF-8 set of tests. When UTF-8 is needed, use test    NOTE: This is a non-UTF set of tests. When UTF support is needed, use
    5, and if Unicode Property Support is needed, use test 13. --/      test 5, and if Unicode Property Support is needed, use test 7. --/
       
 /-- Originally, the Perl >= 5.10 things were in here too, but now I have   
     separated many (most?) of them out into test 11. However, there may still   
     be some that were overlooked. --/     
   
 /(a)b|/I  /(a)b|/I
 Capturing subpattern count = 1  Capturing subpattern count = 1
 No options  No options
Line 380  No need char Line 376  No need char
  2: <unset>   2: <unset>
  3: def   3: def
   
 /abc/P  
     abc  
  0: abc  
     *** Failers  
 No match: POSIX code 17: match failed  
   
 /^abc|def/P  
     abcdef  
  0: abc  
     abcdef\B  
  0: def  
   
 /.*((abc)$|(def))/P  
     defabc  
  0: defabc  
  1: abc  
  2: abc  
     \Zdefabc  
  0: def  
  1: def  
  3: def  
   
 /the quick brown fox/P  
     the quick brown fox  
  0: the quick brown fox  
     *** Failers  
 No match: POSIX code 17: match failed  
     The Quick Brown Fox  
 No match: POSIX code 17: match failed  
   
 /the quick brown fox/Pi  
     the quick brown fox  
  0: the quick brown fox  
     The Quick Brown Fox  
  0: The Quick Brown Fox  
   
 /abc.def/P  
     *** Failers  
 No match: POSIX code 17: match failed  
     abc\ndef  
 No match: POSIX code 17: match failed  
   
 /abc$/P  
     abc  
  0: abc  
     abc\n  
  0: abc  
   
 /(abc)\2/P  
 Failed: POSIX code 15: bad back reference at offset 7       
   
 /(abc\1)/P  
     abc  
 No match: POSIX code 17: match failed  
   
 /)/  /)/
 Failed: unmatched parentheses at offset 0  Failed: unmatched parentheses at offset 0
   
Line 507  Need char = '=' Line 448  Need char = '='
   
 /(?<!bar|cattle)foo/I  /(?<!bar|cattle)foo/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 6
 No options  No options
 First char = 'f'  First char = 'f'
 Need char = 'o'  Need char = 'o'
Line 689  No match Line 631  No match
   
 /\Aabc/Im  /\Aabc/Im
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 Options: anchored multiline  Options: anchored multiline
 No first char  No first char
 No need char  No need char
Line 714  No need char Line 657  No need char
   
 /(?<=foo)[ab]/IS  /(?<=foo)[ab]/IS
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 3
 No options  No options
 No first char  No first char
 No need char  No need char
Line 722  Starting byte set: a b  Line 666  Starting byte set: a b 
   
 /(?<!foo)(alpha|omega)/IS  /(?<!foo)(alpha|omega)/IS
 Capturing subpattern count = 1  Capturing subpattern count = 1
   Max lookbehind = 3
 No options  No options
 No first char  No first char
 Need char = 'a'  Need char = 'a'
Line 738  Starting byte set: a b  Line 683  Starting byte set: a b 
   
 /(?<=foo\n)^bar/Im  /(?<=foo\n)^bar/Im
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 4
 Contains explicit CR or LF match  Contains explicit CR or LF match
 Options: multiline  Options: multiline
 No first char  No first char
Line 755  No match Line 701  No match
   
 /^(?<=foo\n)bar/Im  /^(?<=foo\n)bar/Im
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 4
 Contains explicit CR or LF match  Contains explicit CR or LF match
 Options: multiline  Options: multiline
 First char at start or follows newline  First char at start or follows newline
Line 797  Failed: lookbehind assertion is not fixed length at of Line 744  Failed: lookbehind assertion is not fixed length at of
   
 /(?<=bullock|donkey)-cart/I  /(?<=bullock|donkey)-cart/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 7
 No options  No options
 First char = '-'  First char = '-'
 Need char = 't'  Need char = 't'
Line 813  No match Line 761  No match
   
 /(?<=ab(?i)x|y|z)/I  /(?<=ab(?i)x|y|z)/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 3
 No options  No options
 No first char  No first char
 No need char  No need char
   
 /(?>.*)(?<=(abcd)|(xyz))/I  /(?>.*)(?<=(abcd)|(xyz))/I
 Capturing subpattern count = 2  Capturing subpattern count = 2
   Max lookbehind = 4
 No options  No options
First char at start or follows newlineNo first char
 No need char  No need char
     alphabetabcd      alphabetabcd
  0: alphabetabcd   0: alphabetabcd
Line 832  No need char Line 782  No need char
   
 /(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/I  /(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 4
 No options  No options
 First char = 'Z'  First char = 'Z'
 Need char = 'Z'  Need char = 'Z'
Line 860  No match Line 811  No match
   
 /(?<!(foo)a)bar/I  /(?<!(foo)a)bar/I
 Capturing subpattern count = 1  Capturing subpattern count = 1
   Max lookbehind = 4
 No options  No options
 First char = 'b'  First char = 'b'
 Need char = 'r'  Need char = 'r'
Line 872  No match Line 824  No match
     fooabar      fooabar
 No match  No match
   
 /This one is here because Perl 5.005_02 doesn't fail it/I  
 Capturing subpattern count = 0  
 No options  
 First char = 'T'  
 Need char = 't'  
   
 /^(a)?(?(1)a|b)+$/I  
 Capturing subpattern count = 1  
 Options: anchored  
 No first char  
 No need char  
     *** Failers  
 No match  
     a  
 No match  
   
 /This one is here because Perl behaves differently; see also the following/I  /This one is here because Perl behaves differently; see also the following/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
 No options  No options
Line 1034  Failed: numbers out of order in {} quantifier at offse Line 970  Failed: numbers out of order in {} quantifier at offse
 /abc/\  /abc/\
 Failed: \ at end of pattern at offset 4  Failed: \ at end of pattern at offset 4
   
 /abc/\P  
 Failed: POSIX code 9: bad escape sequence at offset 4       
   
 /abc/\i  /abc/\i
 Failed: \ at end of pattern at offset 4  Failed: \ at end of pattern at offset 4
   
Line 1152  No first char Line 1085  No first char
 No need char  No need char
     abc\00def\L\C0      abc\00def\L\C0
  0: abc\x00def   0: abc\x00def
 0C abc (7) 0C abc\x00def (7)
  0L abc   0L abc
   
 /word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+  /word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
Line 1264  No need char Line 1197  No need char
   
 /\Biss\B/I+  /\Biss\B/I+
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = 'i'  First char = 'i'
 Need char = 's'  Need char = 's'
Line 1271  Need char = 's' Line 1205  Need char = 's'
  0: iss   0: iss
  0+ issippi   0+ issippi
   
 /\Biss\B/I+P  
     Mississippi  
  0: iss  
  0+ issippi  
   
 /iss/IG+  /iss/IG+
 Capturing subpattern count = 0  Capturing subpattern count = 0
 No options  No options
Line 1289  Need char = 's' Line 1218  Need char = 's'
   
 /\Biss\B/IG+  /\Biss\B/IG+
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = 'i'  First char = 'i'
 Need char = 's'  Need char = 's'
Line 1298  Need char = 's' Line 1228  Need char = 's'
   
 /\Biss\B/Ig+  /\Biss\B/Ig+
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = 'i'  First char = 'i'
 Need char = 's'  Need char = 's'
Line 1313  No match Line 1244  No match
   
 /(?<=[Ms])iss/Ig+  /(?<=[Ms])iss/Ig+
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = 'i'  First char = 'i'
 Need char = 's'  Need char = 's'
Line 1324  Need char = 's' Line 1256  Need char = 's'
   
 /(?<=[Ms])iss/IG+  /(?<=[Ms])iss/IG+
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = 'i'  First char = 'i'
 Need char = 's'  Need char = 's'
Line 1405  Capturing subpattern count = 0 Line 1338  Capturing subpattern count = 0
 Contains explicit CR or LF match  Contains explicit CR or LF match
 Options: multiline  Options: multiline
 First char at start or follows newline  First char at start or follows newline
Need char = 10Need char = \x0a
     ab\nab\ncd      ab\nab\ncd
  0: ab\x0a   0: ab\x0a
  0+ ab\x0acd   0+ ab\x0acd
Line 1504  Need char = 'r' Line 1437  Need char = 'r'
   
 /...(?<=abc)/I  /...(?<=abc)/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 3
 No options  No options
 No first char  No first char
 No need char  No need char
Line 1692  No need char Line 1626  No need char
     \Nabc      \Nabc
 No match  No match
   
 /a*(b+)(z)(z)/P  
     aaaabbbbzzzz  
  0: aaaabbbbzz  
  1: bbbb  
  2: z  
  3: z  
     aaaabbbbzzzz\O0  
     aaaabbbbzzzz\O1  
  0: aaaabbbbzz  
     aaaabbbbzzzz\O2  
  0: aaaabbbbzz  
  1: bbbb  
     aaaabbbbzzzz\O3  
  0: aaaabbbbzz  
  1: bbbb  
  2: z  
     aaaabbbbzzzz\O4  
  0: aaaabbbbzz  
  1: bbbb  
  2: z  
  3: z  
     aaaabbbbzzzz\O5  
  0: aaaabbbbzz  
  1: bbbb  
  2: z  
  3: z  
   
 /^.?abcd/IS  /^.?abcd/IS
 Capturing subpattern count = 0  Capturing subpattern count = 0
 Options: anchored  Options: anchored
Line 3311  No match Line 3218  No match
         End          End
 ------------------------------------------------------------------  ------------------------------------------------------------------
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = '8'  First char = '8'
 Need char = 'X'  Need char = 'X'
Line 3324  Need char = 'X' Line 3232  Need char = 'X'
         End          End
 ------------------------------------------------------------------  ------------------------------------------------------------------
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = '$'  First char = '$'
 Need char = 'X'  Need char = 'X'
Line 3839  Callout 2: last capture = -1 Line 3748  Callout 2: last capture = -1
   
 /(?<=(abc)(?C))xyz/I  /(?<=(abc)(?C))xyz/I
 Capturing subpattern count = 1  Capturing subpattern count = 1
   Max lookbehind = 3
 No options  No options
 First char = 'x'  First char = 'x'
 Need char = 'z'  Need char = 'z'
Line 4438  Minimum match() recursion limit = 6 Line 4348  Minimum match() recursion limit = 6
  1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
   aaaaaaaaaaaaaz\M    aaaaaaaaaaaaaz\M
 Minimum match() limit = 32768  Minimum match() limit = 32768
Minimum match() recursion limit = 42Minimum match() recursion limit = 29
 No match  No match
   
 /(aaa(?C1)bbb|ab)/I  /(aaa(?C1)bbb|ab)/I
Line 5486  Need char = '3' Line 5396  Need char = '3'
   
 /\b.*/I  /\b.*/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 No first char  No first char
 No need char  No need char
Line 5494  No need char Line 5405  No need char
   
 /\b.*/Is  /\b.*/Is
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 Options: dotall  Options: dotall
 No first char  No first char
 No need char  No need char
Line 5854  No match Line 5766  No match
     line one\nthis is a line\nbreak in the second line      line one\nthis is a line\nbreak in the second line
 No match  No match
   
 /ab.cd/P  
     ab-cd  
  0: ab-cd  
     ab=cd  
  0: ab=cd  
     ** Failers  
 No match: POSIX code 17: match failed  
     ab\ncd  
 No match: POSIX code 17: match failed  
   
 /ab.cd/Ps  
     ab-cd  
  0: ab-cd  
     ab=cd  
  0: ab=cd  
     ab\ncd  
  0: ab\x0acd  
   
 /(?i)(?-i)AbCd/I  /(?i)(?-i)AbCd/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
 No options  No options
Line 6164  No need char Line 6058  No need char
     ((this))      ((this))
  0: ((this))   0: ((this))
   
 /a(b)c/PN  
     abc  
 Matched with REG_NOSUB  
   
 /a(?P<name>b)c/PN  
     abc  
 Matched with REG_NOSUB  
   
 /\x{100}/I  
 Failed: character value in \x{...} sequence is too large at offset 6  
   
 /\x{0000ff}/I  /\x{0000ff}/I
 Capturing subpattern count = 0  Capturing subpattern count = 0
 No options  No options
First char = 255First char = \xff
 No need char  No need char
   
 /^((?P<A>a1)|(?P<A>a2)b)/I  /^((?P<A>a1)|(?P<A>a2)b)/I
Line 6288  no parentheses with name "Z" Line 6171  no parentheses with name "Z"
  0: a1   0: a1
  1: a1   1: a1
  2: a1   2: a1
copy substring Z failed -7get substring Z failed -7
   G a1 (2) A    G a1 (2) A
   
 /^(?P<A>a)(?P<A>b)/IJ  /^(?P<A>a)(?P<A>b)/IJ
Line 6320  No need char Line 6203  No need char
   G a (1) A    G a (1) A
     cd\GA      cd\GA
  0: cd   0: cd
copy substring A failed -7get substring A failed -7
   
 /^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/IJ  /^(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/IJ
 Capturing subpattern count = 4  Capturing subpattern count = 4
Line 6488  No need char Line 6371  No need char
  9:    9: 
 10: Y  10: Y
   
 /\777/I  
 Failed: octal value is greater than \377 (not in UTF-8 mode) at offset 3  
   
 /\s*,\s*/IS  /\s*,\s*/IS
 Capturing subpattern count = 0  Capturing subpattern count = 0
 No options  No options
Line 7551  Matched, but too many substrings Line 7431  Matched, but too many substrings
 /[^a]+a/BZi  /[^a]+a/BZi
 ------------------------------------------------------------------  ------------------------------------------------------------------
         Bra          Bra
     /i [^A]++     /i [^a]++
      /i a       /i a
         Ket          Ket
         End          End
Line 7560  Matched, but too many substrings Line 7440  Matched, but too many substrings
 /[^a]+A/BZi  /[^a]+A/BZi
 ------------------------------------------------------------------  ------------------------------------------------------------------
         Bra          Bra
     /i [^A]++     /i [^a]++
      /i A       /i A
         Ket          Ket
         End          End
Line 8506  Failed: syntax error in subpattern name (missing termi Line 8386  Failed: syntax error in subpattern name (missing termi
  3: <unset>   3: <unset>
  4: x   4: x
   
 /[\h]/BZ  
 ------------------------------------------------------------------  
         Bra  
         [\x09 \xa0]  
         Ket  
         End  
 ------------------------------------------------------------------  
     >\x09<  
  0: \x09  
   
 /[\h]+/BZ  
 ------------------------------------------------------------------  
         Bra  
         [\x09 \xa0]+  
         Ket  
         End  
 ------------------------------------------------------------------  
     >\x09\x20\xa0<  
  0: \x09 \xa0  
   
 /[\v]/BZ  
 ------------------------------------------------------------------  
         Bra  
         [\x0a-\x0d\x85]  
         Ket  
         End  
 ------------------------------------------------------------------  
   
 /[\H]/BZ  
 ------------------------------------------------------------------  
         Bra  
         [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff]  
         Ket  
         End  
 ------------------------------------------------------------------  
   
 /[^\h]/BZ  
 ------------------------------------------------------------------  
         Bra  
         [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff] (neg)  
         Ket  
         End  
 ------------------------------------------------------------------  
   
 /[\V]/BZ  
 ------------------------------------------------------------------  
         Bra  
         [\x00-\x09\x0e-\x84\x86-\xff]  
         Ket  
         End  
 ------------------------------------------------------------------  
   
 /[\x0a\V]/BZ  
 ------------------------------------------------------------------  
         Bra  
         [\x00-\x0a\x0e-\x84\x86-\xff]  
         Ket  
         End  
 ------------------------------------------------------------------  
   
 /\H++X/BZ  /\H++X/BZ
 ------------------------------------------------------------------  ------------------------------------------------------------------
         Bra          Bra
Line 8968  No match Line 8788  No match
  1: \x0a   1: \x0a
   
 /a(*CR)b/  /a(*CR)b/
Failed: (*VERB) not recognized at offset 5Failed: (*VERB) not recognized or malformed at offset 5
   
 /(*CR)a.b/  /(*CR)a.b/
     a\nb      a\nb
Line 9441  No need char Line 9261  No need char
  +7 ^ ^     b   +7 ^ ^     b
  +7 ^^      b   +7 ^^      b
  +7 ^       b   +7 ^       b
   +11 ^       ^
 +12 ^       )  +12 ^       )
 +13 ^         +13 ^       
  0:    0: 
Line 9478  No options Line 9299  No options
 First char at start or follows newline  First char at start or follows newline
 No need char  No need char
   
 /a?|b?/P  
     abc  
  0: a  
     ** Failers  
  0:   
     ddd\N     
 No match: POSIX code 17: match failed  
   
 /xyz/C  /xyz/C
   xyz     xyz 
 --->xyz  --->xyz
Line 9579  No match Line 9392  No match
  +3 ^ ^      (?(?=[a])[^"])   +3 ^ ^      (?(?=[a])[^"])
  +5 ^ ^      (?=[a])   +5 ^ ^      (?=[a])
  +8 ^ ^      [a]   +8 ^ ^      [a]
   +17 ^ ^      |
 +21 ^ ^      "  +21 ^ ^      "
 +18 ^ ^      b  +18 ^ ^      b
 +19 ^  ^     )  +19 ^  ^     )
  +3 ^  ^     (?(?=[a])[^"])   +3 ^  ^     (?(?=[a])[^"])
  +5 ^  ^     (?=[a])   +5 ^  ^     (?=[a])
  +8 ^  ^     [a]   +8 ^  ^     [a]
   +17 ^  ^     |
 +21 ^  ^     "  +21 ^  ^     "
 +22 ^   ^    $  +22 ^   ^    $
 +23 ^   ^      +23 ^   ^    
Line 9880  Partial match: the cat Line 9695  Partial match: the cat
    abc\P\P     abc\P\P
  0: abc   0: abc
         
 /\w+A/P  
    CDAAAAB   
  0: CDAAAA  
   
 /\w+A/PU  
    CDAAAAB   
  0: CDA  
   
 /abc\K123/  /abc\K123/
     xyzabc123pqr      xyzabc123pqr
  0: 123   0: 123
Line 9900  Partial match: abc12 Line 9707  Partial match: abc12
     xyzabc123pqr       xyzabc123pqr 
  0: 123   0: 123
     xyzabc12\P      xyzabc12\P
Partial match: abc12Partial match at offset 6: abc12
     xyzabc12\P\P      xyzabc12\P\P
Partial match: abc12Partial match at offset 6: abc12
   
 /\babc\b/  /\babc\b/
     +++abc+++      +++abc+++
  0: abc   0: abc
     +++ab\P      +++ab\P
Partial match: +abPartial match at offset 3: +ab
     +++ab\P\P        +++ab\P\P  
Partial match: +abPartial match at offset 3: +ab
   
 /(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\w*+))/BZ  /(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\w*+))/BZ
 ------------------------------------------------------------------  ------------------------------------------------------------------
Line 10280  Need char = ':' Line 10087  Need char = ':'
 Subject length lower bound = 22  Subject length lower bound = 22
 No set of starting bytes  No set of starting bytes
   
 /  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*                          # optional leading comment  
 (?:    (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |  
 " (?:                      # opening quote...  
 [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote  
 |                     #    or  
 \\ [^\x80-\xff]           #   Escaped something (something != CR)  
 )* "  # closing quote  
 )                    # initial word  
 (?:  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  \.  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*   (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |  
 " (?:                      # opening quote...  
 [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote  
 |                     #    or  
 \\ [^\x80-\xff]           #   Escaped something (something != CR)  
 )* "  # closing quote  
 )  )* # further okay, if led by a period  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  @  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*    (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                           # initial subdomain  
 (?:                                  #  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  \.                        # if led by a period...  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*   (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                     #   ...further okay  
 )*  
 # address  
 |                     #  or  
 (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |  
 " (?:                      # opening quote...  
 [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote  
 |                     #    or  
 \\ [^\x80-\xff]           #   Escaped something (something != CR)  
 )* "  # closing quote  
 )             # one word, optionally followed by....  
 (?:  
 [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...  
 \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)       |  # comments, or...  
   
 " (?:                      # opening quote...  
 [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote  
 |                     #    or  
 \\ [^\x80-\xff]           #   Escaped something (something != CR)  
 )* "  # closing quote  
 # quoted strings  
 )*  
 <  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*                     # leading <  
 (?:  @  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*    (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                           # initial subdomain  
 (?:                                  #  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  \.                        # if led by a period...  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*   (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                     #   ...further okay  
 )*  
   
 (?:  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  ,  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  @  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*    (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                           # initial subdomain  
 (?:                                  #  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  \.                        # if led by a period...  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*   (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                     #   ...further okay  
 )*  
 )* # further okay, if led by comma  
 :                                # closing colon  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  )? #       optional route  
 (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |  
 " (?:                      # opening quote...  
 [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote  
 |                     #    or  
 \\ [^\x80-\xff]           #   Escaped something (something != CR)  
 )* "  # closing quote  
 )                    # initial word  
 (?:  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  \.  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*   (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |  
 " (?:                      # opening quote...  
 [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote  
 |                     #    or  
 \\ [^\x80-\xff]           #   Escaped something (something != CR)  
 )* "  # closing quote  
 )  )* # further okay, if led by a period  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  @  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*    (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                           # initial subdomain  
 (?:                                  #  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  \.                        # if led by a period...  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*   (?:  
 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...  
 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom  
 |   \[                         # [  
 (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff  
 \]                        #           ]  
 )                     #   ...further okay  
 )*  
 #       address spec  
 (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*  > #                  trailing >  
 # name and address  
 )  (?: [\040\t] |  \(  
 (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*  
 \)  )*                       # optional trailing comment  
 /xSI  
 Capturing subpattern count = 0  
 Contains explicit CR or LF match  
 Options: extended  
 No first char  
 No need char  
 Subject length lower bound = 3  
 Starting byte set: \x09 \x20 ! " # $ % & ' ( * + - / 0 1 2 3 4 5 6 7 8   
   9 = ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ^ _ ` a b c d e   
   f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f   
   
 /<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  /<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
 Capturing subpattern count = 11  Capturing subpattern count = 11
 Options: caseless dotall  Options: caseless dotall
Line 10495  No set of starting bytes Line 10098  No set of starting bytes
 "(?>.*/)foo"SI  "(?>.*/)foo"SI
 Capturing subpattern count = 0  Capturing subpattern count = 0
 No options  No options
First char at start or follows newlineNo first char
 Need char = 'o'  Need char = 'o'
 Subject length lower bound = 4  Subject length lower bound = 4
 No set of starting bytes  No set of starting bytes
Line 10738  Partial match: abca Line 10341  Partial match: abca
     xxxxabcde\P\P      xxxxabcde\P\P
 Partial match: abcde  Partial match: abcde
   
/-- This is not in the Perl >= 5.10 test because Perl seems currently to be/-- This is not in the Perl-compatible test because Perl seems currently to be
     broken and not behaving as specified in that it *does* bumpalong after      broken and not behaving as specified in that it *does* bumpalong after
     hitting (*COMMIT). --/      hitting (*COMMIT). --/
   
Line 10934  No match Line 10537  No match
         End          End
 ------------------------------------------------------------------  ------------------------------------------------------------------
   
/ -- The first four of these are not in the Perl >= 5.10 test because Perl / -- This one is here because Perl gives the match as "b" rather than "ab". I
     documents that the use of \K in assertions is "not well defined". The 
     last is here because Perl gives the match as "b" rather than "ab". I 
      believe this to be a Perl bug. --/         believe this to be a Perl bug. --/  
               
 /(?=a\Kb)ab/  
     ab   
  0: b  
   
 /(?!a\Kb)ac/  
     ac   
  0: ac  
       
 /^abc(?<=b\Kc)d/  
     abcd  
  0: cd  
   
 /^abc(?<!b\Kq)d/  
     abcd  
  0: abcd  
   
 /(?>a\Kb)z|(ab)/  /(?>a\Kb)z|(ab)/
     ab       ab 
  0: ab   0: ab
  1: ab   1: ab
   
 /----------------------/  
   
 /(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/  /(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/
 Failed: recursive call could loop indefinitely at offset 31  Failed: recursive call could loop indefinitely at offset 31
   
Line 10981  Failed: an argument is not allowed for (*ACCEPT), (*FA Line 10564  Failed: an argument is not allowed for (*ACCEPT), (*FA
     ACABX      ACABX
 No match  No match
   
/--- These should be different, but in Perl 5.11 are not, which I think/--- These should be different, but in Perl they are not, which I think
      is a bug in Perl. ---/       is a bug in Perl. ---/
   
 /A(*THEN)B|A(*THEN)C/K  /A(*THEN)B|A(*THEN)C/K
Line 10992  No match Line 10575  No match
     AC      AC
 No match  No match
           
 /--- This should fail; the SKIP advances by one, but when we get to AC, the  
      PRUNE kills it. Perl behaves differently. ---/   
       
 /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK  
     AAAC  
 No match, mark = A  
   
 /--- Mark names can be duplicated. Perl doesn't give a mark for this one,  /--- Mark names can be duplicated. Perl doesn't give a mark for this one,
 though PCRE does. ---/  though PCRE does. ---/
   
Line 11032  No match Line 10608  No match
     abcccd        abcccd  
 No match  No match
           
/--- Perl 5.11 gets some of these wrong ---/ /--- Perl gets some of these wrong ---/ 
   
 /(?>.(*ACCEPT))*?5/  /(?>.(*ACCEPT))*?5/
     abcde      abcde
Line 11140  No match Line 10716  No match
 /\s*\R/BZ  /\s*\R/BZ
 ------------------------------------------------------------------  ------------------------------------------------------------------
         Bra          Bra
        \s*+        \s*
         \R          \R
         Ket          Ket
         End          End
 ------------------------------------------------------------------  ------------------------------------------------------------------
       \x20\x0a
    0:  \x0a
       \x20\x0d
    0:  \x0d
       \x20\x0d\x0a
    0:  \x0d\x0a
   
/-- Perl treats this one differently, not failing the second string. I believe/\S*\R/BZ
    that is a bug in Perl. --/------------------------------------------------------------------
         Bra
         \S*+
         \R
         Ket
         End
 ------------------------------------------------------------------
     a\x0a
  0: a\x0a
   
/^((abc|abcx)(*THEN)y|abcd)//X\h*\R/BZ
    abcd------------------------------------------------------------------
 0: abcd        Bra
 1: abcd        X
    *** Failers         \h*+
         \R
         Ket
         End
 ------------------------------------------------------------------
     X\x20\x0a
  0: X \x0a
 
 /X\H*\R/BZ
 ------------------------------------------------------------------
         Bra
         X
         \H*
         \R
         Ket
         End
 ------------------------------------------------------------------
     X\x0d\x0a
  0: X\x0d\x0a
 
 /X\H+\R/BZ
 ------------------------------------------------------------------
         Bra
         X
         \H+
         \R
         Ket
         End
 ------------------------------------------------------------------
     X\x0d\x0a
  0: X\x0d\x0a
 
 /X\H++\R/BZ
 ------------------------------------------------------------------
         Bra
         X
         \H++
         \R
         Ket
         End
 ------------------------------------------------------------------
     X\x0d\x0a
 No match  No match
     abcxy   
 No match  
   
 /(?<=abc)def/  /(?<=abc)def/
     abc\P\P      abc\P\P
Partial match: abcPartial match at offset 3: abc
   
 /abc$/  /abc$/
     abc      abc
Line 11639  No match Line 11268  No match
   
 /(a)b|ac/++SS  /(a)b|ac/++SS
     ac\O3      ac\O3
 Matched, but too many substrings  
  0: ac   0: ac
  0+    0+ 
           
Line 11999  No match Line 11627  No match
   
 /\btype\b\W*?\btext\b\W*?\bjavascript\b/IS  /\btype\b\W*?\btext\b\W*?\bjavascript\b/IS
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 First char = 't'  First char = 't'
 Need char = 't'  Need char = 't'
Line 12007  No set of starting bytes Line 11636  No set of starting bytes
   
 /\btype\b\W*?\btext\b\W*?\bjavascript\b|\burl\b\W*?\bshell:|<input\b.*?\btype\b\W*?\bimage\b|\bonkeyup\b\W*?\=/IS  /\btype\b\W*?\btext\b\W*?\bjavascript\b|\burl\b\W*?\bshell:|<input\b.*?\btype\b\W*?\bimage\b|\bonkeyup\b\W*?\=/IS
 Capturing subpattern count = 0  Capturing subpattern count = 0
   Max lookbehind = 1
 No options  No options
 No first char  No first char
 No need char  No need char
 Subject length lower bound = 8  Subject length lower bound = 8
 Starting byte set: < o t u   Starting byte set: < o t u 
   
/a(*SKIP)c|b(*ACCEPT)|/+SI/a(*SKIP)c|b(*ACCEPT)|/+S!I
 Capturing subpattern count = 0  Capturing subpattern count = 0
 No options  No options
 No first char  No first char
 No need char  No need char
Study returned NULLSubject length lower bound = -1
 No set of starting bytes
     a      a
  0:    0: 
  0+    0+ 
Line 12079  Minimum match() limit = 86 Line 11710  Minimum match() limit = 86
 Minimum match() recursion limit = 45  Minimum match() recursion limit = 45
  0: abbbbbbbbbbbbbbbbbbbbba   0: abbbbbbbbbbbbbbbbbbbbba
   
 /-- These tests are in agreement with development Perl 5.015, which has fixed  
     some things, but they don't all work with 5.012, so they aren't in the  
     Perl-compatible tests. Those after the first come from Perl's own test  
     files. --/  
       
 /^((yes|no)(*THEN)(*F))?/  
   yes  
 No match  
   
 /(A (.*)   C? (*THEN)  | A D) (*FAIL)/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   C? (*THEN)  | A D) z/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   C? (*THEN)  | A D) \s* z/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   (?:C|) (*THEN)  | A D) z/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   C{0,6} (*THEN)  | A D) z/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x  
 AbcdCEBefgBhiBqz  
 No match  
   
 /(A (.*)   (CE){0,6} (*THEN)  | A D) z/x  
 AbcdCEBefgBhiBqz  
 No match  
   
 /(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x  
 AbcdCBefgBhiBqz  
 No match  
   
 /-----------------------------------------------/    
   
 /^(?>a+)(?>(z+))\w/BZ  /^(?>a+)(?>(z+))\w/BZ
 ------------------------------------------------------------------  ------------------------------------------------------------------
         Bra          Bra
Line 12376  No match, mark = m Line 11948  No match, mark = m
 /^a(*:X)bcde/K  /^a(*:X)bcde/K
    abc\P     abc\P
 Partial match, mark=X: abc  Partial match, mark=X: abc
      
   /-- These are here because Perl doesn't return a mark, except for the first --/
   
   /(?=(*:x))(q|)/K+
       abc
    0: 
    0+ abc
    1: 
   MK: x
   
   /(?=(*:x))((*:y)q|)/K+
       abc
    0: 
    0+ abc
    1: 
   MK: x
   
   /(?=(*:x))(?:(*:y)q|)/K+
       abc
    0: 
    0+ abc
   MK: x
   
   /(?=(*:x))(?>(*:y)q|)/K+
       abc
    0: 
    0+ abc
   MK: x
   
   /(?=a(*:x))(?!a(*:y)c)/K+
       ab
    0: 
    0+ ab
   MK: x
   
   /(?=a(*:x))(?=a(*:y)c|)/K+
       ab
    0: 
    0+ ab
   MK: x
   
   /(..)\1/
       ab\P
   Partial match: ab
       aba\P
   Partial match: aba
       abab\P
    0: abab
    1: ab
   
   /(..)\1/i
       ab\P
   Partial match: ab
       abA\P
   Partial match: abA
       aBAb\P
    0: aBAb
    1: aB
   
   /(..)\1{2,}/
       ab\P
   Partial match: ab
       aba\P
   Partial match: aba
       abab\P
   Partial match: abab
       ababa\P
   Partial match: ababa
       ababab\P
    0: ababab
    1: ab
       ababab\P\P
   Partial match: ababab
       abababa\P
    0: ababab
    1: ab
       abababa\P\P
   Partial match: abababa
   
   /(..)\1{2,}/i
       ab\P
   Partial match: ab
       aBa\P
   Partial match: aBa
       aBAb\P
   Partial match: aBAb
       AbaBA\P
   Partial match: AbaBA
       abABAb\P
    0: abABAb
    1: ab
       aBAbaB\P\P
   Partial match: aBAbaB
       abABabA\P
    0: abABab
    1: ab
       abaBABa\P\P
   Partial match: abaBABa
   
   /(..)\1{2,}?x/i
       ab\P
   Partial match: ab
       abA\P
   Partial match: abA
       aBAb\P
   Partial match: aBAb
       abaBA\P
   Partial match: abaBA
       abAbaB\P
   Partial match: abAbaB
       abaBabA\P
   Partial match: abaBabA
       abAbABaBx\P
    0: abAbABaBx
    1: ab
   
   /^(..)\1/
       aba\P
   Partial match: aba
   
   /^(..)\1{2,3}x/
       aba\P
   Partial match: aba
       ababa\P
   Partial match: ababa
       ababa\P\P
   Partial match: ababa
       abababx
    0: abababx
    1: ab
       ababababx  
    0: ababababx
    1: ab
   
   /^(..)\1{2,3}?x/
       aba\P
   Partial match: aba
       ababa\P
   Partial match: ababa
       ababa\P\P
   Partial match: ababa
       abababx
    0: abababx
    1: ab
       ababababx  
    0: ababababx
    1: ab
       
   /^(..)(\1{2,3})ab/
       abababab
    0: abababab
    1: ab
    2: abab
   
   /^\R/
       \r\P
    0: \x0d
       \r\P\P
   Partial match: \x0d
       
   /^\R{2,3}x/
       \r\P
   Partial match: \x0d
       \r\P\P
   Partial match: \x0d
       \r\r\P 
   Partial match: \x0d\x0d
       \r\r\P\P
   Partial match: \x0d\x0d
       \r\r\r\P  
   Partial match: \x0d\x0d\x0d
       \r\r\r\P\P
   Partial match: \x0d\x0d\x0d
       \r\rx
    0: \x0d\x0dx
       \r\r\rx    
    0: \x0d\x0d\x0dx
   
   /^\R{2,3}?x/
       \r\P
   Partial match: \x0d
       \r\P\P
   Partial match: \x0d
       \r\r\P 
   Partial match: \x0d\x0d
       \r\r\P\P
   Partial match: \x0d\x0d
       \r\r\r\P  
   Partial match: \x0d\x0d\x0d
       \r\r\r\P\P
   Partial match: \x0d\x0d\x0d
       \r\rx
    0: \x0d\x0dx
       \r\r\rx    
    0: \x0d\x0d\x0dx
       
   /^\R?x/
       \r\P
   Partial match: \x0d
       \r\P\P 
   Partial match: \x0d
       x
    0: x
       \rx  
    0: \x0dx
   
   /^\R+x/
       \r\P
   Partial match: \x0d
       \r\P\P 
   Partial match: \x0d
       \r\n\P
   Partial match: \x0d\x0a
       \r\n\P\P  
   Partial match: \x0d\x0a
       \rx  
    0: \x0dx
   
   /^a$/<CRLF>
       a\r\P
   Partial match: a\x0d
       a\r\P\P 
   Partial match: a\x0d
   
   /^a$/m<CRLF>
       a\r\P
   Partial match: a\x0d
       a\r\P\P 
   Partial match: a\x0d
   
   /^(a$|a\r)/<CRLF>
       a\r\P
    0: a\x0d
    1: a\x0d
       a\r\P\P 
   Partial match: a\x0d
   
   /^(a$|a\r)/m<CRLF>
       a\r\P
    0: a\x0d
    1: a\x0d
       a\r\P\P 
   Partial match: a\x0d
   
   /./<CRLF>
       \r\P
    0: \x0d
       \r\P\P 
   Partial match: \x0d
     
   /.{2,3}/<CRLF>
       \r\P 
   Partial match: \x0d
       \r\P\P
   Partial match: \x0d
       \r\r\P
    0: \x0d\x0d
       \r\r\P\P
   Partial match: \x0d\x0d
       \r\r\r\P
    0: \x0d\x0d\x0d
       \r\r\r\P\P     
   Partial match: \x0d\x0d\x0d
   
   /.{2,3}?/<CRLF>
       \r\P 
   Partial match: \x0d
       \r\P\P
   Partial match: \x0d
       \r\r\P
    0: \x0d\x0d
       \r\r\P\P
   Partial match: \x0d\x0d
       \r\r\r\P
    0: \x0d\x0d
       \r\r\r\P\P     
    0: \x0d\x0d
   
   "AB(C(D))(E(F))?(?(?=\2)(?=\4))"
       ABCDGHI\O03
   Matched, but too many substrings
    0: ABCD
       
   /-- These are all run as real matches in test 1; here we are just checking the
   settings of the anchored and startline bits. --/ 
   
   /(?>.*?a)(?<=ba)/I
   Capturing subpattern count = 0
   Max lookbehind = 2
   No options
   No first char
   Need char = 'a'
   
   /(?:.*?a)(?<=ba)/I
   Capturing subpattern count = 0
   Max lookbehind = 2
   No options
   First char at start or follows newline
   Need char = 'a'
   
   /.*?a(*PRUNE)b/I
   Capturing subpattern count = 0
   No options
   No first char
   Need char = 'b'
   
   /.*?a(*PRUNE)b/sI
   Capturing subpattern count = 0
   Options: dotall
   No first char
   Need char = 'b'
   
   /^a(*PRUNE)b/sI
   Capturing subpattern count = 0
   Options: anchored dotall
   No first char
   No need char
   
   /.*?a(*SKIP)b/I
   Capturing subpattern count = 0
   No options
   No first char
   Need char = 'b'
   
   /(?>.*?a)b/sI
   Capturing subpattern count = 0
   Options: dotall
   No first char
   Need char = 'b'
   
   /(?>.*?a)b/I
   Capturing subpattern count = 0
   No options
   No first char
   Need char = 'b'
   
   /(?>^a)b/sI
   Capturing subpattern count = 0
   Options: anchored dotall
   No first char
   No need char
   
   /(?>.*?)(?<=(abcd)|(wxyz))/I
   Capturing subpattern count = 2
   Max lookbehind = 4
   No options
   No first char
   No need char
   
   /(?>.*)(?<=(abcd)|(wxyz))/I
   Capturing subpattern count = 2
   Max lookbehind = 4
   No options
   No first char
   No need char
   
   "(?>.*)foo"I
   Capturing subpattern count = 0
   No options
   No first char
   Need char = 'o'
   
   "(?>.*?)foo"I
   Capturing subpattern count = 0
   No options
   No first char
   Need char = 'o'
   
   /(?>^abc)/mI
   Capturing subpattern count = 0
   Options: multiline
   First char at start or follows newline
   Need char = 'c'
   
   /(?>.*abc)/mI
   Capturing subpattern count = 0
   Options: multiline
   No first char
   Need char = 'c'
   
   /(?:.*abc)/mI
   Capturing subpattern count = 0
   Options: multiline
   First char at start or follows newline
   Need char = 'c'
   
   /-- Check PCRE_STUDY_EXTRA_NEEDED --/
   
   /.?/S-I
   Capturing subpattern count = 0
   No options
   No first char
   No need char
   Study returned NULL
   
   /.?/S!I
   Capturing subpattern count = 0
   No options
   No first char
   No need char
   Subject length lower bound = -1
   No set of starting bytes
   
   /(?:(a)+(?C1)bb|aa(?C2)b)/
       aab\C+
   Callout 1: last capture = 1
    0: <unset>
    1: a
   --->aab
       ^ ^     b
   Callout 1: last capture = 1
    0: <unset>
    1: a
   --->aab
       ^^      b
   Callout 2: last capture = -1
    0: <unset>
   --->aab
       ^ ^     b
    0: aab
      
   /(?:(a)++(?C1)bb|aa(?C2)b)/
       aab\C+ 
   Callout 1: last capture = 1
    0: <unset>
    1: a
   --->aab
       ^ ^     b
   Callout 2: last capture = -1
    0: <unset>
   --->aab
       ^ ^     b
    0: aab
       
   /(?:(?>(a))(?C1)bb|aa(?C2)b)/
       aab\C+ 
   Callout 1: last capture = 1
    0: <unset>
    1: a
   --->aab
       ^^      b
   Callout 2: last capture = -1
    0: <unset>
   --->aab
       ^ ^     b
    0: aab
   
   /(?:(?1)(?C1)x|ab(?C2))((a)){0}/                                                
       aab\C+ 
   Callout 1: last capture = -1
    0: <unset>
   --->aab
       ^^      x
   Callout 1: last capture = -1
    0: <unset>
   --->aab
        ^^     x
   Callout 2: last capture = -1
    0: <unset>
   --->aab
        ^ ^    )
    0: ab
   
   /(?1)(?C1)((a)(?C2)){0}/   
       aab\C+ 
   Callout 2: last capture = 2
    0: <unset>
    1: <unset>
    2: a
   --->aab
       ^^      )
   Callout 1: last capture = -1
    0: <unset>
   --->aab
       ^^      ((a)(?C2)){0}
    0: a
   
   /(?:(a)+(?C1)bb|aa(?C2)b)++/
       aab\C+
   Callout 1: last capture = 1
    0: <unset>
    1: a
   --->aab
       ^ ^     b
   Callout 1: last capture = 1
    0: <unset>
    1: a
   --->aab
       ^^      b
   Callout 2: last capture = -1
    0: <unset>
   --->aab
       ^ ^     b
    0: aab
       aab\C+\O2
   Callout 1: last capture = 1
    0: <unset>
   --->aab
       ^ ^     b
   Callout 1: last capture = 1
    0: <unset>
   --->aab
       ^^      b
   Callout 2: last capture = -1
    0: <unset>
   --->aab
       ^ ^     b
    0: aab
   
   /(ab)x|ab/
       ab\O3
    0: ab
       ab\O2 
    0: ab
     
   /(ab)/
       ab\O3
   Matched, but too many substrings
    0: ab
       ab\O2 
   Matched, but too many substrings
    0: ab
       
   /(?<=123)(*MARK:xx)abc/K
       xxxx123a\P\P
   Partial match at offset 7, mark=xx: 123a
       xxxx123a\P
   Partial match at offset 7, mark=xx: 123a
       
   /123\Kabc/
       xxxx123a\P\P
   Partial match: 123a
       xxxx123a\P
   Partial match: 123a
   
   /^(?(?=a)aa|bb)/C
       bb
   --->bb
    +0 ^      ^
    +1 ^      (?(?=a)aa|bb)
    +3 ^      (?=a)
    +6 ^      a
   +11 ^      b
   +12 ^^     b
   +13 ^ ^    )
   +14 ^ ^    
    0: bb
   
   /(?C1)^(?C2)(?(?C99)(?=(?C3)a(?C4))(?C5)a(?C6)a(?C7)|(?C8)b(?C9)b(?C10))(?C11)/
       bb
   --->bb
     1 ^      ^
     2 ^      (?(?C99)(?=(?C3)a(?C4))(?C5)a(?C6)a(?C7)|(?C8)b(?C9)b(?C10))
    99 ^      (?=(?C3)a(?C4))
     3 ^      a
     8 ^      b
     9 ^^     b
    10 ^ ^    )
    11 ^ ^    
    0: bb
   
   /-- Perl seems to have a bug with this one --/
   
   /aaaaa(*COMMIT)(*PRUNE)b|a+c/
       aaaaaac
    0: aaaac
       
   /-- Here are some that Perl treats differently because of the way it handles
   backtracking verbs. --/
   
    /(?!a(*COMMIT)b)ac|ad/
        ac
    0: ac
        ad 
    0: ad
   
   /^(?!a(*THEN)b|ac)../
        ac
   No match
        ad 
    0: ad
   
   /^(?=a(*THEN)b|ac)/
       ac
    0: 
       
   /\A.*?(?:a|b(*THEN)c)/
       ba
    0: ba
   
   /\A.*?(?:a|b(*THEN)c)++/
       ba
    0: ba
   
   /\A.*?(?:a|b(*THEN)c|d)/
       ba
    0: ba
   
   /(?:(a(*MARK:X)a+(*SKIP:X)b)){0}(?:(?1)|aac)/
       aac 
    0: aac
   
   /\A.*?(a|b(*THEN)c)/
       ba
    0: ba
    1: a
   
   /^(A(*THEN)B|A(*THEN)D)/
       AD           
    0: AD
    1: AD
       
   /(?!b(*THEN)a)bn|bnn/
       bnn
    0: bn
   
   /(?(?=b(*SKIP)a)bn|bnn)/
       bnn
   No match
   
   /(?=b(*THEN)a|)bn|bnn/
       bnn
    0: bn
   
   /-------------------------/ 
   
   /(*LIMIT_MATCH=12bc)abc/
   Failed: (*VERB) not recognized or malformed at offset 7
   
   /(*LIMIT_MATCH=4294967290)abc/
   Failed: (*VERB) not recognized or malformed at offset 7
   
   /(*LIMIT_RECURSION=4294967280)abc/I
   Capturing subpattern count = 0
   Recursion limit = 4294967280
   No options
   First char = 'a'
   Need char = 'c'
   
   /(a+)*zz/
       aaaaaaaaaaaaaz
   No match
       aaaaaaaaaaaaaz\q3000
   Error -8 (match limit exceeded)
   
   /(a+)*zz/S-
       aaaaaaaaaaaaaz\Q10 
   Error -21 (recursion limit exceeded)
   
   /(*LIMIT_MATCH=3000)(a+)*zz/I
   Capturing subpattern count = 1
   Match limit = 3000
   No options
   No first char
   Need char = 'z'
       aaaaaaaaaaaaaz
   Error -8 (match limit exceeded)
       aaaaaaaaaaaaaz\q60000
   Error -8 (match limit exceeded)
   
   /(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
   Capturing subpattern count = 1
   Match limit = 3000
   No options
   No first char
   Need char = 'z'
       aaaaaaaaaaaaaz
   Error -8 (match limit exceeded)
   
   /(*LIMIT_MATCH=60000)(a+)*zz/I
   Capturing subpattern count = 1
   Match limit = 60000
   No options
   No first char
   Need char = 'z'
       aaaaaaaaaaaaaz
   No match
       aaaaaaaaaaaaaz\q3000
   Error -8 (match limit exceeded)
   
   /(*LIMIT_RECURSION=10)(a+)*zz/IS-
   Capturing subpattern count = 1
   Recursion limit = 10
   No options
   No first char
   Need char = 'z'
   Subject length lower bound = 2
   Starting byte set: a z 
       aaaaaaaaaaaaaz
   Error -21 (recursion limit exceeded)
       aaaaaaaaaaaaaz\Q1000
   Error -21 (recursion limit exceeded)
   
   /(*LIMIT_RECURSION=10)(*LIMIT_RECURSION=1000)(a+)*zz/IS-
   Capturing subpattern count = 1
   Recursion limit = 10
   No options
   No first char
   Need char = 'z'
   Subject length lower bound = 2
   Starting byte set: a z 
       aaaaaaaaaaaaaz
   Error -21 (recursion limit exceeded)
   
   /(*LIMIT_RECURSION=1000)(a+)*zz/IS-
   Capturing subpattern count = 1
   Recursion limit = 1000
   No options
   No first char
   Need char = 'z'
   Subject length lower bound = 2
   Starting byte set: a z 
       aaaaaaaaaaaaaz
   No match
       aaaaaaaaaaaaaz\Q10
   Error -21 (recursion limit exceeded)
   
 /-- End of testinput2 --/  /-- End of testinput2 --/

Removed from v.1.1  
changed lines
  Added in v.1.1.1.4


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