[pcre-dev] Test failures on Windows with Intel compiler

Góra strony
Delete this message
Autor: Daniel Richard G
Data:  
Dla: pcre-dev
Temat: [pcre-dev] Test failures on Windows with Intel compiler
Can't say I enjoy writing in with this so soon after the 8.32 release :(

I'm getting failures for "Test 2: Test with JIT Override" from a Windows
build using Intel's C/C++ compiler (icl). This occurs for all three of the
8-, 16- and 32-bit libraries.

Output from the pcre_test.bat script is attached, as well as the
testoutjit8/testoutput2 file. (The 16- and 32-bit counterparts are
bit-for-bit identical.) I don't know how to go about debugging the
problem, but will be happy to try any changes to help track it down.


--Daniel


--
Daniel Richard G. || danielg@??? || Software Developer
Teragram Linguistic Technologies (a division of SAS)
http://www.teragram.com/source dir is "X:\freeport\src\pcre\pcre--8.32"
pcretest="C:\cygwin\tmp\pcre--8.32.build\pcretest.exe"
RunTest.bat's pcretest output is written to newly created subfolders named
testout, testoutstudy and testoutjit.


---- Testing 8-bit library ----

Test 1: "Main functionality (Compatible with Perl >= 5.10)"
          Passed.
Test 1: "Test with Study Override"
          Passed.
Test 1: "Test with JIT Override"
          Passed.
Test 2: "API, errors, internals, and non-Perl stuff"
          Passed.
Test 2: "Test with Study Override"
          Passed.
Test 2: "Test with JIT Override"
          failed executing command-line:
            "C:\cygwin\tmp\pcre--8.32.build\pcretest.exe"  -q -s+     "X:\freeport\src\pcre\pcre--8.32"\testdata\testinput2 >testoutjit8\testoutput2
Test 3: "Locale-specific features"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testout8\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 3: "Test with Study Override"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testoutstudy8\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 3: "Test with JIT Override"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testoutjit8\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 4: "UTF-8 support - (Compatible with Perl >= 5.10)"
          Passed.
Test 4: "Test with Study Override"
          Passed.
Test 4: "Test with JIT Override"
          Passed.
Test 5: "API, internals, and non-Perl stuff for UTF-8"
          Passed.
Test 5: "Test with Study Override"
          Passed.
Test 5: "Test with JIT Override"
          Passed.
Test 6: "Unicode property support (Compatible with Perl >= 5.10)"
          Passed.
Test 6: "Test with Study Override"
          Passed.
Test 6: "Test with JIT Override"
          Passed.
Test 7: "API, internals, and non-Perl stuff for Unicode property support"
          Passed.
Test 7: "Test with Study Override"
          Passed.
Test 7: "Test with JIT Override"
          Passed.
Test 8: "DFA matching main functionality"
          Passed.
Test 8: "Test with Study Override"
          Passed.
Test 9: "DFA matching with UTF-8"
          Passed.
Test 9: "Test with Study Override"
          Passed.
Test 10: "DFA matching with Unicode properties"
          Passed.
Test 10: "Test with Study Override"
          Passed.
Test 11: "Internal offsets and code size tests"
          Passed.
Test 11: "Test with Study Override"
          Passed.
Test 12: "JIT-specific features (JIT available)"
          Passed.
Test 13 Skipped due to presence of JIT support.
        1 file(s) copied.
        1 file(s) copied.
Test 14: "Specials for the basic 8-bit library"
          Passed.
Test 14: "Test with Study Override"
          Passed.
Test 14: "Test with JIT Override"
          Passed.
Test 15: "Specials for the 8-bit library with UTF-8 support"
          Passed.
Test 15: "Test with Study Override"
          Passed.
Test 15: "Test with JIT Override"
          Passed.
Test 16: "Specials for the 8-bit library with Unicode propery support"
          Passed.
Test 16: "Test with Study Override"
          Passed.
Test 16: "Test with JIT Override"
          Passed.
Test 17 Skipped when running 8-bit tests.
Test 18 Skipped when running 8-bit tests.
Test 19 Skipped when running 8-bit tests.
Test 20 Skipped when running 8-bit tests.
Test 21 Skipped when running 8-bit tests.
Test 22 Skipped when running 8-bit tests.
Test 23 Skipped when running 8/32-bit tests.
Test 24 Skipped when running 8/32-bit tests.
Test 25 Skipped when running 8/16-bit tests.
Test 26 Skipped when running 8/16-bit tests.

---- Testing 16-bit library ----

Test 1: "Main functionality (Compatible with Perl >= 5.10)"
          Passed.
Test 1: "Test with Study Override"
          Passed.
Test 1: "Test with JIT Override"
          Passed.
Test 2: "API, errors, internals, and non-Perl stuff"
          Passed.
Test 2: "Test with Study Override"
          Passed.
Test 2: "Test with JIT Override"
          failed executing command-line:
            "C:\cygwin\tmp\pcre--8.32.build\pcretest.exe" -16 -q -s+     "X:\freeport\src\pcre\pcre--8.32"\testdata\testinput2 >testoutjit16\testoutput2
Test 3: "Locale-specific features"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testout16\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 3: "Test with Study Override"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testoutstudy16\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 3: "Test with JIT Override"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testoutjit16\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 4: "UTF-16 support - (Compatible with Perl >= 5.10)"
          Passed.
Test 4: "Test with Study Override"
          Passed.
Test 4: "Test with JIT Override"
          Passed.
Test 5: "API, internals, and non-Perl stuff for UTF-16"
          Passed.
Test 5: "Test with Study Override"
          Passed.
Test 5: "Test with JIT Override"
          Passed.
Test 6: "Unicode property support (Compatible with Perl >= 5.10)"
          Passed.
Test 6: "Test with Study Override"
          Passed.
Test 6: "Test with JIT Override"
          Passed.
Test 7: "API, internals, and non-Perl stuff for Unicode property support"
          Passed.
Test 7: "Test with Study Override"
          Passed.
Test 7: "Test with JIT Override"
          Passed.
Test 8: "DFA matching main functionality"
          Passed.
Test 8: "Test with Study Override"
          Passed.
Test 9: "DFA matching with UTF-16"
          Passed.
Test 9: "Test with Study Override"
          Passed.
Test 10: "DFA matching with Unicode properties"
          Passed.
Test 10: "Test with Study Override"
          Passed.
Test 11: "Internal offsets and code size tests"
          Passed.
Test 11: "Test with Study Override"
          Passed.
Test 12: "JIT-specific features (JIT available)"
          Passed.
Test 13 Skipped due to presence of JIT support.
Test 14 Skipped when running 16/32-bit tests.
Test 15 Skipped when running 16/32-bit tests.
Test 16 Skipped when running 16/32-bit tests.
Test 17: "Specials for the basic 16/32-bit library"
          Passed.
Test 17: "Test with Study Override"
          Passed.
Test 17: "Test with JIT Override"
          Passed.
Test 18: "Specials for the 16/32-bit library with UTF-16 support"
          Passed.
Test 18: "Test with Study Override"
          Passed.
Test 18: "Test with JIT Override"
          Passed.
Test 19: "Specials for the 16/32-bit library with Unicode property support"
          Passed.
Test 19: "Test with Study Override"
          Passed.
Test 19: "Test with JIT Override"
          Passed.
Test 20: "DFA specials for the basic 16/32-bit library"
          Passed.
Test 20: "Test with Study Override"
          Passed.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
Test 21: "Reloads for the basic 16/32-bit library"
          Passed.
Test 21: "Test with Study Override"
          Passed.
Test 21: "Test with JIT Override"
          Passed.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
Test 22: "Reloads for the 16/32-bit library with UTF-16/32 support"
          Passed.
Test 22: "Test with Study Override"
          Passed.
Test 22: "Test with JIT Override"
          Passed.
Test 23: "Specials for the 16-bit library"
          Passed.
Test 23: "Test with Study Override"
          Passed.
Test 23: "Test with JIT Override"
          Passed.
Test 24: "Specials for the 16-bit library with UTF-16 support"
          Passed.
Test 24: "Test with Study Override"
          Passed.
Test 24: "Test with JIT Override"
          Passed.
Test 25 Skipped when running 8/16-bit tests.
Test 26 Skipped when running 8/16-bit tests.

---- Testing 32-bit library ----

Test 1: "Main functionality (Compatible with Perl >= 5.10)"
          Passed.
Test 1: "Test with Study Override"
          Passed.
Test 1: "Test with JIT Override"
          Passed.
Test 2: "API, errors, internals, and non-Perl stuff"
          Passed.
Test 2: "Test with Study Override"
          Passed.
Test 2: "Test with JIT Override"
          failed executing command-line:
            "C:\cygwin\tmp\pcre--8.32.build\pcretest.exe" -32 -q -s+     "X:\freeport\src\pcre\pcre--8.32"\testdata\testinput2 >testoutjit32\testoutput2
Test 3: "Locale-specific features"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testout32\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 3: "Test with Study Override"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testoutstudy32\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 3: "Test with JIT Override"
          failed comparison: fc /n "X:\freeport\src\pcre\pcre--8.32"\testdata\wintestoutput3 testoutjit32\wintestoutput3

** Test 3 failure usually means french locale is not
** available on the system, rather than a bug or problem with PCRE.

Test 4: "UTF-32 support - (Compatible with Perl >= 5.10)"
          Passed.
Test 4: "Test with Study Override"
          Passed.
Test 4: "Test with JIT Override"
          Passed.
Test 5: "API, internals, and non-Perl stuff for UTF-32"
          Passed.
Test 5: "Test with Study Override"
          Passed.
Test 5: "Test with JIT Override"
          Passed.
Test 6: "Unicode property support (Compatible with Perl >= 5.10)"
          Passed.
Test 6: "Test with Study Override"
          Passed.
Test 6: "Test with JIT Override"
          Passed.
Test 7: "API, internals, and non-Perl stuff for Unicode property support"
          Passed.
Test 7: "Test with Study Override"
          Passed.
Test 7: "Test with JIT Override"
          Passed.
Test 8: "DFA matching main functionality"
          Passed.
Test 8: "Test with Study Override"
          Passed.
Test 9: "DFA matching with UTF-32"
          Passed.
Test 9: "Test with Study Override"
          Passed.
Test 10: "DFA matching with Unicode properties"
          Passed.
Test 10: "Test with Study Override"
          Passed.
Test 11: "Internal offsets and code size tests"
          Passed.
Test 11: "Test with Study Override"
          Passed.
Test 12: "JIT-specific features (JIT available)"
          Passed.
Test 13 Skipped due to presence of JIT support.
Test 14 Skipped when running 16/32-bit tests.
Test 15 Skipped when running 16/32-bit tests.
Test 16 Skipped when running 16/32-bit tests.
Test 17: "Specials for the basic 16/32-bit library"
          Passed.
Test 17: "Test with Study Override"
          Passed.
Test 17: "Test with JIT Override"
          Passed.
Test 18: "Specials for the 16/32-bit library with UTF-32 support"
          Passed.
Test 18: "Test with Study Override"
          Passed.
Test 18: "Test with JIT Override"
          Passed.
Test 19: "Specials for the 16/32-bit library with Unicode property support"
          Passed.
Test 19: "Test with Study Override"
          Passed.
Test 19: "Test with JIT Override"
          Passed.
Test 20: "DFA specials for the basic 16/32-bit library"
          Passed.
Test 20: "Test with Study Override"
          Passed.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
Test 21: "Reloads for the basic 16/32-bit library"
          Passed.
Test 21: "Test with Study Override"
          Passed.
Test 21: "Test with JIT Override"
          Passed.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
        1 file(s) copied.
Test 22: "Reloads for the 16/32-bit library with UTF-16/32 support"
          Passed.
Test 22: "Test with Study Override"
          Passed.
Test 22: "Test with JIT Override"
          Passed.
Test 23 Skipped when running 8/32-bit tests.
Test 24 Skipped when running 8/32-bit tests.
Test 25: "Specials for the 32-bit library"
          Passed.
Test 25: "Test with Study Override"
          Passed.
Test 25: "Test with JIT Override"
          Passed.
Test 26: "Specials for the 32-bit library with UTF-32 support"
          Passed.
Test 26: "Test with Study Override"
          Passed.
Test 26: "Test with JIT Override"
          Passed.
In above output, one or more of the various tests failed

/-- This set of tests is not Perl-compatible. It checks on special features
    of PCRE's API, error diagnostics, and the compiled code of some patterns.
    It also checks the non-Perl syntax the PCRE supports (Python, .NET, 
    Oniguruma). Finally, there are some tests where PCRE and Perl differ, 
    either because PCRE can't be compatible, or there is a possible Perl 
    bug.
    
    NOTE: This is a non-UTF set of tests. When UTF support is needed, use
    test 5, and if Unicode Property Support is needed, use test 7. --/
  
/(a)b|/I
Capturing subpattern count = 1
No options
No first char
No need char

/abc/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
    abc
 0: abc
    defabc
 0: abc
    \Aabc
 0: abc
    *** Failers
No match
    \Adefabc
No match
    ABC
No match

/^abc/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char
    abc
 0: abc
    \Aabc
 0: abc
    *** Failers
No match
    defabc
No match
    \Adefabc
No match

/a+bc/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'

/a*bc/I
Capturing subpattern count = 0
No options
No first char
Need char = 'c'

/a{3}bc/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'

/(abc|a+z)/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/^abc$/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char
    abc
 0: abc
    *** Failers
No match
    def\nabc
No match

/ab\idef/X
Failed: unrecognized character follows \ at offset 3

/(?X)ab\idef/X
Failed: unrecognized character follows \ at offset 7

/x{5,4}/
Failed: numbers out of order in {} quantifier at offset 5

/z{65536}/
Failed: number too big in {} quantifier at offset 7

/[abcd/
Failed: missing terminating ] for character class at offset 5

/(?X)[\B]/
Failed: invalid escape sequence in character class at offset 6

/(?X)[\R]/
Failed: invalid escape sequence in character class at offset 6

/(?X)[\X]/
Failed: invalid escape sequence in character class at offset 6

/[\B]/BZ
------------------------------------------------------------------
        Bra
        B
        Ket
        End
------------------------------------------------------------------

/[\R]/BZ
------------------------------------------------------------------
        Bra
        R
        Ket
        End
------------------------------------------------------------------

/[\X]/BZ
------------------------------------------------------------------
        Bra
        X
        Ket
        End
------------------------------------------------------------------

/[z-a]/
Failed: range out of order in character class at offset 3

/^*/
Failed: nothing to repeat at offset 1

/(abc/
Failed: missing ) at offset 4

/(?# abc/
Failed: missing ) after comment at offset 7

/(?z)abc/
Failed: unrecognized character after (? or (?- at offset 2

/.*b/I
Capturing subpattern count = 0
No options
First char at start or follows newline
Need char = 'b'

/.*?b/I
Capturing subpattern count = 0
No options
First char at start or follows newline
Need char = 'b'

/cat|dog|elephant/I
Capturing subpattern count = 0
No options
No first char
No need char
    this sentence eventually mentions a cat
 0: cat
    this sentences rambles on and on for a while and then reaches elephant
 0: elephant

/cat|dog|elephant/IS
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 3
Starting byte set: c d e 
    this sentence eventually mentions a cat
 0: cat
    this sentences rambles on and on for a while and then reaches elephant
 0: elephant

/cat|dog|elephant/IiS
Capturing subpattern count = 0
Options: caseless
No first char
No need char
Subject length lower bound = 3
Starting byte set: C D E c d e 
    this sentence eventually mentions a CAT cat
 0: CAT
    this sentences rambles on and on for a while to elephant ElePhant
 0: elephant

/a|[bcd]/IS
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: a b c d 

/(a|[^\dZ])/IS
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0a 
  \x0b \x0c \x0d \x0e \x0f \x10 \x11 \x12 \x13 \x14 \x15 \x16 \x17 \x18 \x19 
  \x1a \x1b \x1c \x1d \x1e \x1f \x20 ! " # $ % & ' ( ) * + , - . / : ; < = > 
  ? @ 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 [ \ ] ^ _ ` 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 \x80 \x81 \x82 \x83 
  \x84 \x85 \x86 \x87 \x88 \x89 \x8a \x8b \x8c \x8d \x8e \x8f \x90 \x91 \x92 
  \x93 \x94 \x95 \x96 \x97 \x98 \x99 \x9a \x9b \x9c \x9d \x9e \x9f \xa0 \xa1 
  \xa2 \xa3 \xa4 \xa5 \xa6 \xa7 \xa8 \xa9 \xaa \xab \xac \xad \xae \xaf \xb0 
  \xb1 \xb2 \xb3 \xb4 \xb5 \xb6 \xb7 \xb8 \xb9 \xba \xbb \xbc \xbd \xbe \xbf 
  \xc0 \xc1 \xc2 \xc3 \xc4 \xc5 \xc6 \xc7 \xc8 \xc9 \xca \xcb \xcc \xcd \xce 
  \xcf \xd0 \xd1 \xd2 \xd3 \xd4 \xd5 \xd6 \xd7 \xd8 \xd9 \xda \xdb \xdc \xdd 
  \xde \xdf \xe0 \xe1 \xe2 \xe3 \xe4 \xe5 \xe6 \xe7 \xe8 \xe9 \xea \xeb \xec 
  \xed \xee \xef \xf0 \xf1 \xf2 \xf3 \xf4 \xf5 \xf6 \xf7 \xf8 \xf9 \xfa \xfb 
  \xfc \xfd \xfe \xff 

/(a|b)*[\s]/IS
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: \x09 \x0a \x0c \x0d \x20 a b 

/(ab\2)/
Failed: reference to non-existent subpattern at offset 6

/{4,5}abc/
Failed: nothing to repeat at offset 4

/(a)(b)(c)\2/I
Capturing subpattern count = 3
Max back reference = 2
No options
First char = 'a'
Need char = 'c'
    abcb
 0: abcb
 1: a
 2: b
 3: c
    \O0abcb
Matched, but too many substrings
    \O3abcb
Matched, but too many substrings
 0: abcb
    \O6abcb
Matched, but too many substrings
 0: abcb
 1: a
    \O9abcb
Matched, but too many substrings
 0: abcb
 1: a
 2: b
    \O12abcb
 0: abcb
 1: a
 2: b
 3: c

/(a)bc|(a)(b)\2/I
Capturing subpattern count = 3
Max back reference = 2
No options
First char = 'a'
No need char
    abc
 0: abc
 1: a
    \O0abc
Matched, but too many substrings
    \O3abc
Matched, but too many substrings
 0: abc
    \O6abc
 0: abc
 1: a
    aba
 0: aba
 1: <unset>
 2: a
 3: b
    \O0aba
Matched, but too many substrings
    \O3aba
Matched, but too many substrings
 0: aba
    \O6aba
Matched, but too many substrings
 0: aba
 1: <unset>
    \O9aba
Matched, but too many substrings
 0: aba
 1: <unset>
 2: a
    \O12aba
 0: aba
 1: <unset>
 2: a
 3: b

/abc$/IE
Capturing subpattern count = 0
Options: dollar_endonly
First char = 'a'
Need char = 'c'
    abc
 0: abc
    *** Failers
No match
    abc\n
No match
    abc\ndef
No match

/(a)(b)(c)(d)(e)\6/
Failed: reference to non-existent subpattern at offset 17

/the quick brown fox/I
Capturing subpattern count = 0
No options
First char = 't'
Need char = 'x'
    the quick brown fox
 0: the quick brown fox
    this is a line with the quick brown fox
 0: the quick brown fox

/the quick brown fox/IA
Capturing subpattern count = 0
Options: anchored
No first char
No need char
    the quick brown fox
 0: the quick brown fox
    *** Failers
No match
    this is a line with the quick brown fox
No match

/ab(?z)cd/
Failed: unrecognized character after (? or (?- at offset 4

/^abc|def/I
Capturing subpattern count = 0
No options
No first char
No need char
    abcdef
 0: abc
    abcdef\B
 0: def

/.*((abc)$|(def))/I
Capturing subpattern count = 3
No options
First char at start or follows newline
No need char
    defabc
 0: defabc
 1: abc
 2: abc
    \Zdefabc
 0: def
 1: def
 2: <unset>
 3: def

/)/
Failed: unmatched parentheses at offset 0

/a[]b/
Failed: missing terminating ] for character class at offset 4

/[^aeiou ]{3,}/I
Capturing subpattern count = 0
No options
No first char
No need char
    co-processors, and for
 0: -pr

/<.*>/I
Capturing subpattern count = 0
No options
First char = '<'
Need char = '>'
    abc<def>ghi<klm>nop
 0: <def>ghi<klm>

/<.*?>/I
Capturing subpattern count = 0
No options
First char = '<'
Need char = '>'
    abc<def>ghi<klm>nop
 0: <def>

/<.*>/IU
Capturing subpattern count = 0
Options: ungreedy
First char = '<'
Need char = '>'
    abc<def>ghi<klm>nop
 0: <def>

/(?U)<.*>/I
Capturing subpattern count = 0
Options: ungreedy
First char = '<'
Need char = '>'
    abc<def>ghi<klm>nop
 0: <def>

/<.*?>/IU
Capturing subpattern count = 0
Options: ungreedy
First char = '<'
Need char = '>'
    abc<def>ghi<klm>nop
 0: <def>ghi<klm>

/={3,}/IU
Capturing subpattern count = 0
Options: ungreedy
First char = '='
Need char = '='
    abc========def
 0: ===

/(?U)={3,}?/I
Capturing subpattern count = 0
Options: ungreedy
First char = '='
Need char = '='
    abc========def
 0: ========

/(?<!bar|cattle)foo/I
Capturing subpattern count = 0
No options
First char = 'f'
Need char = 'o'
Max lookbehind = 6
    foo
 0: foo
    catfoo
 0: foo
    *** Failers
No match
    the barfoo
No match
    and cattlefoo
No match

/(?<=a+)b/
Failed: lookbehind assertion is not fixed length at offset 6

/(?<=aaa|b{0,3})b/
Failed: lookbehind assertion is not fixed length at offset 14

/(?<!(foo)a\1)bar/
Failed: lookbehind assertion is not fixed length at offset 12

/(?i)abc/I
Capturing subpattern count = 0
Options: caseless
First char = 'a' (caseless)
Need char = 'c' (caseless)

/(a|(?m)a)/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/(?i)^1234/I
Capturing subpattern count = 0
Options: anchored caseless
No first char
No need char

/(^b|(?i)^d)/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char

/(?s).*/I
Capturing subpattern count = 0
Options: anchored dotall
No first char
No need char

/[abcd]/IS
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: a b c d 

/(?i)[abcd]/IS
Capturing subpattern count = 0
Options: caseless
No first char
No need char
Subject length lower bound = 1
Starting byte set: A B C D a b c d 

/(?m)[xy]|(b|c)/IS
Capturing subpattern count = 1
Options: multiline
No first char
No need char
Subject length lower bound = 1
Starting byte set: b c x y 

/(^a|^b)/Im
Capturing subpattern count = 1
Options: multiline
First char at start or follows newline
No need char

/(?i)(^a|^b)/Im
Capturing subpattern count = 1
Options: caseless multiline
First char at start or follows newline
No need char

/(a)(?(1)a|b|c)/
Failed: conditional group contains more than two branches at offset 13

/(?(?=a)a|b|c)/
Failed: conditional group contains more than two branches at offset 12

/(?(1a)/
Failed: missing ) at offset 6

/(?(1a))/
Failed: reference to non-existent subpattern at offset 6

/(?(?i))/
Failed: assertion expected after (?( at offset 3

/(?(abc))/
Failed: reference to non-existent subpattern at offset 7

/(?(?<ab))/
Failed: syntax error in subpattern name (missing terminator) at offset 7

/((?s)blah)\s+\1/I
Capturing subpattern count = 1
Max back reference = 1
No options
First char = 'b'
Need char = 'h'

/((?i)blah)\s+\1/I
Capturing subpattern count = 1
Max back reference = 1
No options
First char = 'b' (caseless)
Need char = 'h' (caseless)

/((?i)b)/IDZS
------------------------------------------------------------------
        Bra
        CBra 1
     /i b
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
First char = 'b' (caseless)
No need char
Subject length lower bound = 1
No set of starting bytes

/(a*b|(?i:c*(?-i)d))/IS
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: C a b c d 

/a$/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char
    a
 0: a
    a\n
 0: a
    *** Failers
No match
    \Za
No match
    \Za\n
No match

/a$/Im
Capturing subpattern count = 0
Options: multiline
First char = 'a'
No need char
    a
 0: a
    a\n
 0: a
    \Za\n
 0: a
    *** Failers
No match
    \Za
No match

/\Aabc/Im
Capturing subpattern count = 0
Options: anchored multiline
No first char
No need char

/^abc/Im
Capturing subpattern count = 0
Options: multiline
First char at start or follows newline
Need char = 'c'

/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/I
Capturing subpattern count = 5
Options: anchored
No first char
No need char
  aaaaabbbbbcccccdef
 0: aaaaabbbbbcccccdef
 1: aaaaabbbbbcccccdef
 2: aaaaa
 3: b
 4: bbbbccccc
 5: def

/(?<=foo)[ab]/IS
Capturing subpattern count = 0
No options
No first char
No need char
Max lookbehind = 3
Subject length lower bound = 1
Starting byte set: a b 

/(?<!foo)(alpha|omega)/IS
Capturing subpattern count = 1
No options
No first char
Need char = 'a'
Max lookbehind = 3
Subject length lower bound = 5
Starting byte set: a o 

/(?!alphabet)[ab]/IS
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: a b 

/(?<=foo\n)^bar/Im
Capturing subpattern count = 0
Contains explicit CR or LF match
Options: multiline
No first char
Need char = 'r'
Max lookbehind = 4
    foo\nbarbar
 0: bar
    ***Failers
No match
    rhubarb
No match
    barbell
No match
    abc\nbarton
No match

/^(?<=foo\n)bar/Im
Capturing subpattern count = 0
Contains explicit CR or LF match
Options: multiline
First char at start or follows newline
Need char = 'r'
Max lookbehind = 4
    foo\nbarbar
 0: bar
    ***Failers
No match
    rhubarb
No match
    barbell
No match
    abc\nbarton
No match

/(?>^abc)/Im
Capturing subpattern count = 0
Options: multiline
First char at start or follows newline
Need char = 'c'
    abc
 0: abc
    def\nabc
 0: abc
    *** Failers
No match
    defabc
No match

/(?<=ab(c+)d)ef/
Failed: lookbehind assertion is not fixed length at offset 11

/(?<=ab(?<=c+)d)ef/
Failed: lookbehind assertion is not fixed length at offset 12

/(?<=ab(c|de)f)g/
Failed: lookbehind assertion is not fixed length at offset 13

/The next three are in testinput2 because they have variable length branches/

/(?<=bullock|donkey)-cart/I
Capturing subpattern count = 0
No options
First char = '-'
Need char = 't'
Max lookbehind = 7
    the bullock-cart
 0: -cart
    a donkey-cart race
 0: -cart
    *** Failers
No match
    cart
No match
    horse-and-cart
No match

/(?<=ab(?i)x|y|z)/I
Capturing subpattern count = 0
No options
No first char
No need char
Max lookbehind = 3

/(?>.*)(?<=(abcd)|(xyz))/I
Capturing subpattern count = 2
No options
No first char
No need char
Max lookbehind = 4
    alphabetabcd
 0: alphabetabcd
 1: abcd
    endingxyz
 0: endingxyz
 1: <unset>
 2: xyz

/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/I
Capturing subpattern count = 0
No options
First char = 'Z'
Need char = 'Z'
Max lookbehind = 4
    abxyZZ
 0: ZZ
    abXyZZ
 0: ZZ
    ZZZ
 0: ZZ
    zZZ
 0: ZZ
    bZZ
 0: ZZ
    BZZ
 0: ZZ
    *** Failers
No match
    ZZ
No match
    abXYZZ
No match
    zzz
No match
    bzz
No match

/(?<!(foo)a)bar/I
Capturing subpattern count = 1
No options
First char = 'b'
Need char = 'r'
Max lookbehind = 4
    bar
 0: bar
    foobbar
 0: bar
    *** Failers
No match
    fooabar
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
Capturing subpattern count = 0
No options
First char = 'T'
Need char = 'g'

/^(a\1?){4}$/I
Capturing subpattern count = 1
Max back reference = 1
Options: anchored
No first char
No need char
    aaaa
No match
    aaaaaa
No match
    
/Perl does not fail these two for the final subjects. Neither did PCRE until/
/release 8.01. The problem is in backtracking into a subpattern that contains/
No match
/a recursive reference to itself. PCRE has now made these into atomic patterns./
No match

/^(xa|=?\1a){2}$/
    xa=xaa
 0: xa=xaa
 1: =xaa
    ** Failers
No match
    xa=xaaa
No match

/^(xa|=?\1a)+$/
    xa=xaa
 0: xa=xaa
 1: =xaa
    ** Failers
No match
    xa=xaaa
No match

/These are syntax tests from Perl 5.005/I
Capturing subpattern count = 0
No options
First char = 'T'
Need char = '5'

/a[b-a]/
Failed: range out of order in character class at offset 4

/a[]b/
Failed: missing terminating ] for character class at offset 4

/a[/
Failed: missing terminating ] for character class at offset 2

/*a/
Failed: nothing to repeat at offset 0

/(*)b/
Failed: nothing to repeat at offset 1

/abc)/
Failed: unmatched parentheses at offset 3

/(abc/
Failed: missing ) at offset 4

/a**/
Failed: nothing to repeat at offset 2

/)(/
Failed: unmatched parentheses at offset 0

/\1/
Failed: reference to non-existent subpattern at offset 2

/\2/
Failed: reference to non-existent subpattern at offset 2

/(a)|\2/
Failed: reference to non-existent subpattern at offset 6

/a[b-a]/Ii
Failed: range out of order in character class at offset 4

/a[]b/Ii
Failed: missing terminating ] for character class at offset 4

/a[/Ii
Failed: missing terminating ] for character class at offset 2

/*a/Ii
Failed: nothing to repeat at offset 0

/(*)b/Ii
Failed: nothing to repeat at offset 1

/abc)/Ii
Failed: unmatched parentheses at offset 3

/(abc/Ii
Failed: missing ) at offset 4

/a**/Ii
Failed: nothing to repeat at offset 2

/)(/Ii
Failed: unmatched parentheses at offset 0

/:(?:/
Failed: missing ) at offset 4

/(?<%)b/
Failed: unrecognized character after (?< at offset 3

/a(?{)b/
Failed: unrecognized character after (? or (?- at offset 3

/a(?{{})b/
Failed: unrecognized character after (? or (?- at offset 3

/a(?{}})b/
Failed: unrecognized character after (? or (?- at offset 3

/a(?{"{"})b/
Failed: unrecognized character after (? or (?- at offset 3

/a(?{"{"}})b/
Failed: unrecognized character after (? or (?- at offset 3

/(?(1?)a|b)/
Failed: malformed number or name after (?( at offset 4

/[a[:xyz:/
Failed: missing terminating ] for character class at offset 8

/(?<=x+)y/
Failed: lookbehind assertion is not fixed length at offset 6

/a{37,17}/
Failed: numbers out of order in {} quantifier at offset 7

/abc/\
Failed: \ at end of pattern at offset 4

/abc/\i
Failed: \ at end of pattern at offset 4

/(a)bc(d)/I
Capturing subpattern count = 2
No options
First char = 'a'
Need char = 'd'
    abcd
 0: abcd
 1: a
 2: d
    abcd\C2
 0: abcd
 1: a
 2: d
 2C d (1)
    abcd\C5
 0: abcd
 1: a
 2: d
copy substring 5 failed -7

/(.{20})/I
Capturing subpattern count = 1
No options
No first char
No need char
    abcdefghijklmnopqrstuvwxyz
 0: abcdefghijklmnopqrst
 1: abcdefghijklmnopqrst
    abcdefghijklmnopqrstuvwxyz\C1
 0: abcdefghijklmnopqrst
 1: abcdefghijklmnopqrst
 1C abcdefghijklmnopqrst (20)
    abcdefghijklmnopqrstuvwxyz\G1
 0: abcdefghijklmnopqrst
 1: abcdefghijklmnopqrst
 1G abcdefghijklmnopqrst (20)

/(.{15})/I
Capturing subpattern count = 1
No options
No first char
No need char
    abcdefghijklmnopqrstuvwxyz
 0: abcdefghijklmno
 1: abcdefghijklmno
    abcdefghijklmnopqrstuvwxyz\C1\G1
 0: abcdefghijklmno
 1: abcdefghijklmno
 1C abcdefghijklmno (15)
 1G abcdefghijklmno (15)

/(.{16})/I
Capturing subpattern count = 1
No options
No first char
No need char
    abcdefghijklmnopqrstuvwxyz
 0: abcdefghijklmnop
 1: abcdefghijklmnop
    abcdefghijklmnopqrstuvwxyz\C1\G1\L
 0: abcdefghijklmnop
 1: abcdefghijklmnop
 1C abcdefghijklmnop (16)
 1G abcdefghijklmnop (16)
 0L abcdefghijklmnop
 1L abcdefghijklmnop

/^(a|(bc))de(f)/I
Capturing subpattern count = 3
Options: anchored
No first char
No need char
    adef\G1\G2\G3\G4\L
 0: adef
 1: a
 2: <unset>
 3: f
 1G a (1)
 2G  (0)
 3G f (1)
get substring 4 failed -7
 0L adef
 1L a
 2L 
 3L f
    bcdef\G1\G2\G3\G4\L
 0: bcdef
 1: bc
 2: bc
 3: f
 1G bc (2)
 2G bc (2)
 3G f (1)
get substring 4 failed -7
 0L bcdef
 1L bc
 2L bc
 3L f
    adefghijk\C0
 0: adef
 1: a
 2: <unset>
 3: f
 0C adef (4)

/^abc\00def/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char
    abc\00def\L\C0
 0: abc\x00def
 0C abc\x00def (7)
 0L abc

/word ((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
)((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+ )((?:[a-zA-Z0-9]+
)?)?)?)?)?)?)?)?)?otherword/I
Capturing subpattern count = 8
Contains explicit CR or LF match
No options
First char = 'w'
Need char = 'd'

/.*X/IDZ
------------------------------------------------------------------
        Bra
        Any*
        X
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char at start or follows newline
Need char = 'X'

/.*X/IDZs
------------------------------------------------------------------
        Bra
        AllAny*
        X
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored dotall
No first char
Need char = 'X'

/(.*X|^B)/IDZ
------------------------------------------------------------------
        Bra
        CBra 1
        Any*
        X
        Alt
        ^
        B
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
First char at start or follows newline
No need char

/(.*X|^B)/IDZs
------------------------------------------------------------------
        Bra
        CBra 1
        AllAny*
        X
        Alt
        ^
        B
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options: anchored dotall
No first char
No need char

/(?s)(.*X|^B)/IDZ
------------------------------------------------------------------
        Bra
        CBra 1
        AllAny*
        X
        Alt
        ^
        B
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options: anchored dotall
No first char
No need char

/(?s:.*X|^B)/IDZ
------------------------------------------------------------------
        Bra
        Bra
        AllAny*
        X
        Alt
        ^
        B
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/\Biss\B/I+
Capturing subpattern count = 0
No options
First char = 'i'
Need char = 's'
Max lookbehind = 1
    Mississippi
 0: iss
 0+ issippi

/iss/IG+
Capturing subpattern count = 0
No options
First char = 'i'
Need char = 's'
    Mississippi
 0: iss
 0+ issippi
 0: iss
 0+ ippi

/\Biss\B/IG+
Capturing subpattern count = 0
No options
First char = 'i'
Need char = 's'
Max lookbehind = 1
    Mississippi
 0: iss
 0+ issippi

/\Biss\B/Ig+
Capturing subpattern count = 0
No options
First char = 'i'
Need char = 's'
Max lookbehind = 1
    Mississippi
 0: iss
 0+ issippi
 0: iss
 0+ ippi
    *** Failers
No match
    Mississippi\A
No match

/(?<=[Ms])iss/Ig+
Capturing subpattern count = 0
No options
First char = 'i'
Need char = 's'
Max lookbehind = 1
    Mississippi
 0: iss
 0+ issippi
 0: iss
 0+ ippi

/(?<=[Ms])iss/IG+
Capturing subpattern count = 0
No options
First char = 'i'
Need char = 's'
Max lookbehind = 1
    Mississippi
 0: iss
 0+ issippi

/^iss/Ig+
Capturing subpattern count = 0
Options: anchored
No first char
No need char
    ississippi
 0: iss
 0+ issippi

/.*iss/Ig+
Capturing subpattern count = 0
No options
First char at start or follows newline
Need char = 's'
    abciss\nxyzisspqr
 0: abciss
 0+ \x0axyzisspqr
 0: xyziss
 0+ pqr

/.i./I+g
Capturing subpattern count = 0
No options
No first char
Need char = 'i'
    Mississippi
 0: Mis
 0+ sissippi
 0: sis
 0+ sippi
 0: sip
 0+ pi
    Mississippi\A
 0: Mis
 0+ sissippi
 0: sis
 0+ sippi
 0: sip
 0+ pi
    Missouri river
 0: Mis
 0+ souri river
 0: ri 
 0+ river
 0: riv
 0+ er
    Missouri river\A
 0: Mis
 0+ souri river

/^.is/I+g
Capturing subpattern count = 0
Options: anchored
No first char
No need char
    Mississippi
 0: Mis
 0+ sissippi

/^ab\n/Ig+
Capturing subpattern count = 0
Contains explicit CR or LF match
Options: anchored
No first char
No need char
    ab\nab\ncd
 0: ab\x0a
 0+ ab\x0acd

/^ab\n/Img+
Capturing subpattern count = 0
Contains explicit CR or LF match
Options: multiline
First char at start or follows newline
Need char = \x0a
    ab\nab\ncd
 0: ab\x0a
 0+ ab\x0acd
 0: ab\x0a
 0+ cd

/abc/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'

/abc|bac/I
Capturing subpattern count = 0
No options
No first char
Need char = 'c'

/(abc|bac)/I
Capturing subpattern count = 1
No options
No first char
Need char = 'c'

/(abc|(c|dc))/I
Capturing subpattern count = 2
No options
No first char
Need char = 'c'

/(abc|(d|de)c)/I
Capturing subpattern count = 2
No options
No first char
Need char = 'c'

/a*/I
Capturing subpattern count = 0
No options
No first char
No need char

/a+/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char

/(baa|a+)/I
Capturing subpattern count = 1
No options
No first char
Need char = 'a'

/a{0,3}/I
Capturing subpattern count = 0
No options
No first char
No need char

/baa{3,}/I
Capturing subpattern count = 0
No options
First char = 'b'
Need char = 'a'

/"([^\\"]+|\\.)*"/I
Capturing subpattern count = 1
No options
First char = '"'
Need char = '"'

/(abc|ab[cd])/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/(a|.)/I
Capturing subpattern count = 1
No options
No first char
No need char

/a|ba|\w/I
Capturing subpattern count = 0
No options
No first char
No need char

/abc(?=pqr)/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'r'

/...(?<=abc)/I
Capturing subpattern count = 0
No options
No first char
No need char
Max lookbehind = 3

/abc(?!pqr)/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'

/ab./I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'

/ab[xyz]/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'

/abc*/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'

/ab.c*/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'

/a.c*/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char

/.c*/I
Capturing subpattern count = 0
No options
No first char
No need char

/ac*/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char

/(a.c*|b.c*)/I
Capturing subpattern count = 1
No options
No first char
No need char

/a.c*|aba/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char

/.+a/I
Capturing subpattern count = 0
No options
No first char
Need char = 'a'

/(?=abcda)a.*/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'a'

/(?=a)a.*/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char

/a(b)*/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/a\d*/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char

/ab\d*/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'

/a(\d)*/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/abcde{0,0}/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'd'

/ab\d+/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'

/a(?(1)b)(.)/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/a(?(1)bag|big)(.)/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'g'

/a(?(1)bag|big)*(.)/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/a(?(1)bag|big)+(.)/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'g'

/a(?(1)b..|b..)(.)/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'b'

/ab\d{0}e/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'e'

/a?b?/I
Capturing subpattern count = 0
No options
No first char
No need char
    a
 0: a
    b
 0: b
    ab
 0: ab
    \
 0: 
    *** Failers
 0: 
    \N
No match

/|-/I
Capturing subpattern count = 0
No options
No first char
No need char
    abcd
 0: 
    -abc
 0: 
    \Nab-c
 0: -
    *** Failers
 0: 
    \Nabc
No match

/^.?abcd/IS
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'd'
Subject length lower bound = 4
No set of starting bytes

/\(             # ( at start
  (?:           # Non-capturing bracket
  (?>[^()]+)    # Either a sequence of non-brackets (no backtracking)

  |             # Or

  (?R)          # Recurse - i.e. nested bracketed string
  )*            # Zero or more contents
  \)            # Closing )
  /Ix
Capturing subpattern count = 0
Options: extended
First char = '('
Need char = ')'
    (abcd)
 0: (abcd)
    (abcd)xyz
 0: (abcd)
    xyz(abcd)
 0: (abcd)
    (ab(xy)cd)pqr
 0: (ab(xy)cd)
    (ab(xycd)pqr
 0: (xycd)
    () abc ()
 0: ()
    12(abcde(fsh)xyz(foo(bar))lmno)89
 0: (abcde(fsh)xyz(foo(bar))lmno)
    *** Failers
No match
    abcd
No match
    abcd)
No match
    (abcd
No match

/\(  ( (?>[^()]+) | (?R) )* \) /Ixg
Capturing subpattern count = 1
Options: extended
First char = '('
Need char = ')'
    (ab(xy)cd)pqr
 0: (ab(xy)cd)
 1: cd
    1(abcd)(x(y)z)pqr
 0: (abcd)
 1: abcd
 0: (x(y)z)
 1: z

/\(  (?: (?>[^()]+) | (?R) ) \) /Ix
Capturing subpattern count = 0
Options: extended
First char = '('
Need char = ')'
    (abcd)
 0: (abcd)
    (ab(xy)cd)
 0: (xy)
    (a(b(c)d)e)
 0: (c)
    ((ab))
 0: ((ab))
    *** Failers
No match
    ()
No match

/\(  (?: (?>[^()]+) | (?R) )? \) /Ix
Capturing subpattern count = 0
Options: extended
First char = '('
Need char = ')'
    ()
 0: ()
    12(abcde(fsh)xyz(foo(bar))lmno)89
 0: (fsh)

/\(  ( (?>[^()]+) | (?R) )* \) /Ix
Capturing subpattern count = 1
Options: extended
First char = '('
Need char = ')'
    (ab(xy)cd)
 0: (ab(xy)cd)
 1: cd

/\( ( ( (?>[^()]+) | (?R) )* ) \) /Ix
Capturing subpattern count = 2
Options: extended
First char = '('
Need char = ')'
    (ab(xy)cd)
 0: (ab(xy)cd)
 1: ab(xy)cd
 2: cd

/\( (123)? ( ( (?>[^()]+) | (?R) )* ) \) /Ix
Capturing subpattern count = 3
Options: extended
First char = '('
Need char = ')'
    (ab(xy)cd)
 0: (ab(xy)cd)
 1: <unset>
 2: ab(xy)cd
 3: cd
    (123ab(xy)cd)
 0: (123ab(xy)cd)
 1: 123
 2: ab(xy)cd
 3: cd

/\( ( (123)? ( (?>[^()]+) | (?R) )* ) \) /Ix
Capturing subpattern count = 3
Options: extended
First char = '('
Need char = ')'
    (ab(xy)cd)
 0: (ab(xy)cd)
 1: ab(xy)cd
 2: <unset>
 3: cd
    (123ab(xy)cd)
 0: (123ab(xy)cd)
 1: 123ab(xy)cd
 2: 123
 3: cd

/\( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \) /Ix
Capturing subpattern count = 11
Options: extended
First char = '('
Need char = ')'
    (ab(xy)cd)
 0: (ab(xy)cd)
 1: ab(xy)cd
 2: ab(xy)cd
 3: ab(xy)cd
 4: ab(xy)cd
 5: ab(xy)cd
 6: ab(xy)cd
 7: ab(xy)cd
 8: ab(xy)cd
 9: ab(xy)cd
10: ab(xy)cd
11: cd

/\( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \) /Ix
Capturing subpattern count = 3
Options: extended
First char = '('
Need char = ')'
    (abcd(xyz<p>qrs)123)
 0: (abcd(xyz<p>qrs)123)
 1: abcd(xyz<p>qrs)123
 2: 123

/\( ( ( (?>[^()]+) | ((?R)) )* ) \) /Ix
Capturing subpattern count = 3
Options: extended
First char = '('
Need char = ')'
    (ab(cd)ef)
 0: (ab(cd)ef)
 1: ab(cd)ef
 2: ef
 3: (cd)
    (ab(cd(ef)gh)ij)
 0: (ab(cd(ef)gh)ij)
 1: ab(cd(ef)gh)ij
 2: ij
 3: (cd(ef)gh)

/^[[:alnum:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [0-9A-Za-z]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:^alnum:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x00-/:-@[-`{-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:alpha:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [A-Za-z]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:^alpha:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x00-@[-`{-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/[_[:alpha:]]/IS
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: 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 

/^[[:ascii:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x00-\x7f]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:^ascii:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x80-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:blank:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x09 ]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:^blank:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x00-\x08\x0a-\x1f!-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/[\n\x0b\x0c\x0d[:blank:]]/IS
Capturing subpattern count = 0
Contains explicit CR or LF match
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: \x09 \x0a \x0b \x0c \x0d \x20 

/^[[:cntrl:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x00-\x1f\x7f]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:digit:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [0-9]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:graph:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [!-~]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:lower:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [a-z]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:print:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [ -~]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:punct:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [!-/:-@[-`{-~]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:space:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x09-\x0d ]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:upper:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [A-Z]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:xdigit:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [0-9A-Fa-f]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:word:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [0-9A-Z_a-z]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:^cntrl:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [ -~\x80-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[12[:^digit:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x00-/12:-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/^[[:^blank:]]/DZ
------------------------------------------------------------------
        Bra
        ^
        [\x00-\x08\x0a-\x1f!-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/[01[:alpha:]%]/DZ
------------------------------------------------------------------
        Bra
        [%01A-Za-z]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/[[.ch.]]/I
Failed: POSIX collating elements are not supported at offset 1

/[[=ch=]]/I
Failed: POSIX collating elements are not supported at offset 1

/[[:rhubarb:]]/I
Failed: unknown POSIX class name at offset 3

/[[:upper:]]/Ii
Capturing subpattern count = 0
Options: caseless
No first char
No need char
    A
 0: A
    a
 0: a

/[[:lower:]]/Ii
Capturing subpattern count = 0
Options: caseless
No first char
No need char
    A
 0: A
    a
 0: a

/((?-i)[[:lower:]])[[:lower:]]/Ii
Capturing subpattern count = 1
Options: caseless
No first char
No need char
    ab
 0: ab
 1: a
    aB
 0: aB
 1: a
    *** Failers
 0: ai
 1: a
    Ab
No match
    AB
No match

/[\200-\110]/I
Failed: range out of order in character class at offset 9

/^(?(0)f|b)oo/I
Failed: invalid condition (?(0) at offset 6

/This one's here because of the large output vector needed/I
Capturing subpattern count = 0
No options
First char = 'T'
Need char = 'd'

/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\w+)\s+(\270)/I