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