./ ADD NAME=GRPFLS 
testdata/grepinputv

testdata/grepinputx
./ ADD NAME=GRPIN 
This is a file of miscellaneous text that is used as test data for checking
that the pcregrep command is working correctly. The file must be more than 24K
long so that it needs more than a single read() call to process it. New
features should be added at the end, because some of the tests involve the
output of line numbers, and we don't want these to change.

PATTERN at the start of a line.
In the middle of a line, PATTERN appears.

This pattern is in lower case.

Here follows a whole lot of stuff that makes the file over 24K long.

-------------------------------------------------------------------------------
The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.

The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the
lazy dog. The quick brown fox jumps over the lazy dog. The quick brown fox
jumps over the lazy dog. The quick brown fox jumps over the lazy dog. The quick
brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.
-------------------------------------------------------------------------------

aaaaa0
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
bbbbbb
cccccccccccccccccccccccccccccccccccccccccc
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
eeeee
aaaaa2
ffffffffff

This is a line before the binary zero.
This line contains a binary zero here > < for testing.
This is a line after the binary zero.

ABOVE the elephant 
ABOVE
ABOVE theatre
AB.VE
AB.VE the turtle

010203040506

PUT NEW DATA ABOVE THIS LINE.
=============================

Check up on PATTERN near the end.
This is the last line of this file.
./ ADD NAME=GRPIN3 
triple:   t1_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   o_txt

triple:   t2_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

triple:   t3_txt   s2_tag   s_txt   p_tag   p_txt   o_tag   o_txt

triple:   t4_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   o_txt

triple:   t5_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   
o_txt

triple:   t6_txt   s2_tag   s_txt   p_tag   p_txt   o_tag   o_txt

triple:   t7_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   o_txt
./ ADD NAME=GRPINV 
The quick brown
fox jumps
over the lazy dog.
This time it jumps and jumps and jumps.
./ ADD NAME=GRPINX 
This is a second file of input for the pcregrep tests.

Here is the pattern again.

Pattern
That time it was on a line by itself.

To pat or not to pat, that is the question.

complete pair
of lines

That was a complete pair
of lines all by themselves.

complete pair
of lines

And there they were again, to check line numbers.

one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty

This line contains pattern not on a line by itself.
This is the last line of this file.
./ ADD NAME=GRPLS 
This is a file of patterns for testing the -f option. Don't include any blank
lines because they will match everything! This is no longer true, so have one.

pattern
line by itself

End of the list of patterns.
./ ADD NAME=GRPOT 
---------------------------- Test 1 ------------------------------
PATTERN at the start of a line.
In the middle of a line, PATTERN appears.
Check up on PATTERN near the end.
RC=0
---------------------------- Test 2 ------------------------------
PATTERN at the start of a line.
RC=0
---------------------------- Test 3 ------------------------------
7:PATTERN at the start of a line.
8:In the middle of a line, PATTERN appears.
10:This pattern is in lower case.
610:Check up on PATTERN near the end.
RC=0
---------------------------- Test 4 ------------------------------
4
RC=0
---------------------------- Test 5 ------------------------------
./testdata/grepinput:7:PATTERN at the start of a line.
./testdata/grepinput:8:In the middle of a line, PATTERN appears.
./testdata/grepinput:10:This pattern is in lower case.
./testdata/grepinput:610:Check up on PATTERN near the end.
./testdata/grepinputx:3:Here is the pattern again.
./testdata/grepinputx:5:Pattern
./testdata/grepinputx:42:This line contains pattern not on a line by itself.
RC=0
---------------------------- Test 6 ------------------------------
7:PATTERN at the start of a line.
8:In the middle of a line, PATTERN appears.
10:This pattern is in lower case.
610:Check up on PATTERN near the end.
3:Here is the pattern again.
5:Pattern
42:This line contains pattern not on a line by itself.
RC=0
---------------------------- Test 7 ------------------------------
./testdata/grepinput
./testdata/grepinputx
RC=0
---------------------------- Test 8 ------------------------------
./testdata/grepinput
RC=0
---------------------------- Test 9 ------------------------------
RC=0
---------------------------- Test 10 -----------------------------
RC=1
---------------------------- Test 11 -----------------------------
1:This is a second file of input for the pcregrep tests.
2:
4:
5:Pattern
6:That time it was on a line by itself.
7:
8:To pat or not to pat, that is the question.
9:
10:complete pair
11:of lines
12:
13:That was a complete pair
14:of lines all by themselves.
15:
16:complete pair
17:of lines
18:
19:And there they were again, to check line numbers.
20:
21:one
22:two
23:three
24:four
25:five
26:six
27:seven
28:eight
29:nine
30:ten
31:eleven
32:twelve
33:thirteen
34:fourteen
35:fifteen
36:sixteen
37:seventeen
38:eighteen
39:nineteen
40:twenty
41:
43:This is the last line of this file.
RC=0
---------------------------- Test 12 -----------------------------
Pattern
RC=0
---------------------------- Test 13 -----------------------------
Here is the pattern again.
That time it was on a line by itself.
seventeen
This line contains pattern not on a line by itself.
RC=0
---------------------------- Test 14 -----------------------------
./testdata/grepinputx:To pat or not to pat, that is the question.
RC=0
---------------------------- Test 15 -----------------------------
pcregrep: Error in command-line regex at offset 4: nothing to repeat
RC=2
---------------------------- Test 16 -----------------------------
pcregrep: Failed to open ./testdata/nonexistfile: No such file or directory
RC=2
---------------------------- Test 17 -----------------------------
features should be added at the end, because some of the tests involve the
output of line numbers, and we don't want these to change.
RC=0
---------------------------- Test 18 -----------------------------
4:features should be added at the end, because some of the tests involve the
output of line numbers, and we don't want these to change.
583:brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.
-------------------------------------------------------------------------------
RC=0
---------------------------- Test 19 -----------------------------
Pattern
RC=0
---------------------------- Test 20 -----------------------------
10:complete pair
of lines
16:complete pair
of lines
RC=0
---------------------------- Test 21 -----------------------------
24:four
25-five
26-six
27-seven
--
34:fourteen
35-fifteen
36-sixteen
37-seventeen
RC=0
---------------------------- Test 22 -----------------------------
21-one
22-two
23-three
24:four
--
31-eleven
32-twelve
33-thirteen
34:fourteen
RC=0
---------------------------- Test 23 -----------------------------
one
two
three
four
five
six
seven
--
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
RC=0
---------------------------- Test 24 -----------------------------
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty

This line contains pattern not on a line by itself.
This is the last line of this file.
RC=0
---------------------------- Test 25 -----------------------------
15-
16-complete pair
17-of lines
18-
19-And there they were again, to check line numbers.
20-
21-one
22-two
23-three
24:four
25-five
26-six
27-seven
28-eight
29-nine
30-ten
31-eleven
32-twelve
33-thirteen
34:fourteen
RC=0
---------------------------- Test 26 -----------------------------

complete pair
of lines

And there they were again, to check line numbers.

one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty

This line contains pattern not on a line by itself.
This is the last line of this file.
RC=0
---------------------------- Test 27 -----------------------------
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty

This line contains pattern not on a line by itself.
This is the last line of this file.
RC=0
---------------------------- Test 28 -----------------------------
14-of lines all by themselves.
15-
16-complete pair
17-of lines
18-
19-And there they were again, to check line numbers.
20-
21-one
22-two
23-three
24:four
25-five
26-six
27-seven
28-eight
29-nine
30-ten
31-eleven
32-twelve
33-thirteen
34:fourteen
RC=0
---------------------------- Test 29 -----------------------------
of lines all by themselves.

complete pair
of lines

And there they were again, to check line numbers.

one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty

This line contains pattern not on a line by itself.
This is the last line of this file.
RC=0
---------------------------- Test 30 -----------------------------
./testdata/grepinput-4-features should be added at the end, because some of the tests involve the
./testdata/grepinput-5-output of line numbers, and we don't want these to change.
./testdata/grepinput-6-
./testdata/grepinput:7:PATTERN at the start of a line.
./testdata/grepinput:8:In the middle of a line, PATTERN appears.
./testdata/grepinput-9-
./testdata/grepinput:10:This pattern is in lower case.
--
./testdata/grepinput-607-PUT NEW DATA ABOVE THIS LINE.
./testdata/grepinput-608-=============================
./testdata/grepinput-609-
./testdata/grepinput:610:Check up on PATTERN near the end.
--
./testdata/grepinputx-1-This is a second file of input for the pcregrep tests.
./testdata/grepinputx-2-
./testdata/grepinputx:3:Here is the pattern again.
./testdata/grepinputx-4-
./testdata/grepinputx:5:Pattern
--
./testdata/grepinputx-39-nineteen
./testdata/grepinputx-40-twenty
./testdata/grepinputx-41-
./testdata/grepinputx:42:This line contains pattern not on a line by itself.
RC=0
---------------------------- Test 31 -----------------------------
./testdata/grepinput:7:PATTERN at the start of a line.
./testdata/grepinput:8:In the middle of a line, PATTERN appears.
./testdata/grepinput-9-
./testdata/grepinput:10:This pattern is in lower case.
./testdata/grepinput-11-
./testdata/grepinput-12-Here follows a whole lot of stuff that makes the file over 24K long.
./testdata/grepinput-13-
--
./testdata/grepinput:610:Check up on PATTERN near the end.
./testdata/grepinput-611-This is the last line of this file.
--
./testdata/grepinputx:3:Here is the pattern again.
./testdata/grepinputx-4-
./testdata/grepinputx:5:Pattern
./testdata/grepinputx-6-That time it was on a line by itself.
./testdata/grepinputx-7-
./testdata/grepinputx-8-To pat or not to pat, that is the question.
--
./testdata/grepinputx:42:This line contains pattern not on a line by itself.
./testdata/grepinputx-43-This is the last line of this file.
RC=0
---------------------------- Test 32 -----------------------------
./testdata/grepinputx
RC=0
---------------------------- Test 33 -----------------------------
pcregrep: Failed to open ./testdata/grepnonexist: No such file or directory
RC=2
---------------------------- Test 34 -----------------------------
RC=2
---------------------------- Test 35 -----------------------------
./testdata/grepinput8
./testdata/grepinputx
RC=0
---------------------------- Test 36 -----------------------------
./testdata/grepinput3
./testdata/grepinputx
RC=0
---------------------------- Test 37 -----------------------------
aaaaa0
aaaaa2
010203040506
RC=0
======== STDERR ========
pcregrep: pcre_exec() gave error -8 while matching this text:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

pcregrep: pcre_exec() gave error -8 while matching this text:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

pcregrep: Error -8, -21 or -27 means that a resource limit was exceeded.
pcregrep: Check your regex for nested unlimited loops.
---------------------------- Test 38 ------------------------------
This line contains a binary zero here > < for testing.
RC=0
---------------------------- Test 39 ------------------------------
This is a line before the binary zero.
This line contains a binary zero here > < for testing.
RC=0
---------------------------- Test 40 ------------------------------
This line contains a binary zero here > < for testing.
This is a line after the binary zero.
RC=0
---------------------------- Test 41 ------------------------------
before the binary zero
after the binary zero
RC=0
---------------------------- Test 42 ------------------------------
./testdata/grepinput:595:before the binary zero
./testdata/grepinput:597:after the binary zero
RC=0
---------------------------- Test 43 ------------------------------
595:before
595:zero
596:zero
597:after
597:zero
RC=0
---------------------------- Test 44 ------------------------------
595:before
595:zero
596:zero
597:zero
RC=0
---------------------------- Test 45 ------------------------------
10:pattern
595:binary
596:binary
597:binary
RC=0
---------------------------- Test 46 ------------------------------
pcregrep: Error in 2nd command-line regex at offset 9: missing )
RC=2
---------------------------- Test 47 ------------------------------
AB.VE
RC=0
---------------------------- Test 48 ------------------------------
ABOVE the elephant 
AB.VE
AB.VE the turtle
RC=0
---------------------------- Test 49 ------------------------------
ABOVE the elephant 
AB.VE
AB.VE the turtle
PUT NEW DATA ABOVE THIS LINE.
RC=0
---------------------------- Test 50 ------------------------------
RC=1
---------------------------- Test 51 ------------------------------
over the lazy dog.
This time it jumps and jumps and jumps.
RC=0
---------------------------- Test 52 ------------------------------
fox [1;31mjumps[00m
This time it [1;31mjumps[00m and [1;31mjumps[00m and [1;31mjumps[00m.
RC=0
---------------------------- Test 53 ------------------------------
36972,6
36990,4
37024,4
37066,5
37083,4
RC=0
---------------------------- Test 54 ------------------------------
595:15,6
595:33,4
596:28,4
597:15,5
597:32,4
RC=0
---------------------------- Test 55 -----------------------------
Here is the [1;31mpattern[00m again.
That time it was on a [1;31mline by itself[00m.
This line contains [1;31mpattern[00m not on a [1;31mline by itself[00m.
RC=0
---------------------------- Test 56 -----------------------------
./testdata/grepinput:456
./testdata/grepinput3:0
./testdata/grepinput8:0
./testdata/grepinputv:1
./testdata/grepinputx:0
RC=0
---------------------------- Test 57 -----------------------------
./testdata/grepinput:456
./testdata/grepinputv:1
RC=0
---------------------------- Test 58 -----------------------------
PATTERN at the start of a line.
In the middle of a line, PATTERN appears.
Check up on PATTERN near the end.
RC=0
---------------------------- Test 59 -----------------------------
PATTERN at the start of a line.
In the middle of a line, PATTERN appears.
Check up on PATTERN near the end.
RC=0
---------------------------- Test 60 -----------------------------
PATTERN at the start of a line.
In the middle of a line, PATTERN appears.
Check up on PATTERN near the end.
RC=0
---------------------------- Test 61 -----------------------------
PATTERN at the start of a line.
In the middle of a line, PATTERN appears.
Check up on PATTERN near the end.
RC=0
---------------------------- Test 62 -----------------------------
pcregrep: pcre_exec() gave error -8 while matching text that starts:

This is a file of miscellaneous text that is used as test data for checking
that the pcregrep command is working correctly. The file must be more than 24K
long so that it needs more than a single read

pcregrep: Error -8, -21 or -27 means that a resource limit was exceeded.
pcregrep: Check your regex for nested unlimited loops.
RC=1
---------------------------- Test 63 -----------------------------
pcregrep: pcre_exec() gave error -21 while matching text that starts:

This is a file of miscellaneous text that is used as test data for checking
that the pcregrep command is working correctly. The file must be more than 24K
long so that it needs more than a single read

pcregrep: Error -8, -21 or -27 means that a resource limit was exceeded.
pcregrep: Check your regex for nested unlimited loops.
RC=1
---------------------------- Test 64 ------------------------------
appears
RC=0
---------------------------- Test 65 ------------------------------
pear
RC=0
---------------------------- Test 66 ------------------------------
RC=0
---------------------------- Test 67 ------------------------------
RC=0
---------------------------- Test 68 ------------------------------
pear
RC=0
---------------------------- Test 69 -----------------------------
1:This is a second file of input for the pcregrep tests.
2:
4:
5:Pattern
6:That time it was on a line by itself.
7:
8:To pat or not to pat, that is the question.
9:
10:complete pair
11:of lines
12:
13:That was a complete pair
14:of lines all by themselves.
15:
16:complete pair
17:of lines
18:
19:And there they were again, to check line numbers.
20:
21:one
22:two
23:three
24:four
25:five
26:six
27:seven
28:eight
29:nine
30:ten
31:eleven
32:twelve
33:thirteen
34:fourteen
35:fifteen
36:sixteen
37:seventeen
38:eighteen
39:nineteen
40:twenty
41:
43:This is the last line of this file.
RC=0
---------------------------- Test 70 -----------------------------
[1;31mtriple:   t1_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   o_txt

[00m[1;31mtriple:   t3_txt   s2_tag   s_txt   p_tag   p_txt   o_tag   o_txt

[00m[1;31mtriple:   t4_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   o_txt

[00m[1;31mtriple:   t6_txt   s2_tag   s_txt   p_tag   p_txt   o_tag   o_txt

[00mRC=0
---------------------------- Test 71 -----------------------------
01
RC=0
---------------------------- Test 72 -----------------------------
[1;31m01[00m0203040506
RC=0
---------------------------- Test 73 -----------------------------
[1;31m01[00m
RC=0
---------------------------- Test 74 -----------------------------
01
02
RC=0
---------------------------- Test 75 -----------------------------
[1;31m01[00m[1;31m02[00m03040506
RC=0
---------------------------- Test 76 -----------------------------
[1;31m01[00m
[1;31m02[00m
RC=0
---------------------------- Test 77 -----------------------------
01
03
RC=0
---------------------------- Test 78 -----------------------------
[1;31m01[00m02[1;31m03[00m040506
RC=0
---------------------------- Test 79 -----------------------------
[1;31m01[00m
[1;31m03[00m
RC=0
---------------------------- Test 80 -----------------------------
01
RC=0
---------------------------- Test 81 -----------------------------
[1;31m01[00m0203040506
RC=0
---------------------------- Test 82 -----------------------------
[1;31m01[00m
RC=0
---------------------------- Test 83 -----------------------------
pcregrep: line 4 of file ./testdata/grepinput3 is too long for the internal buffer
pcregrep: check the --buffer-size option
RC=2
---------------------------- Test 84 -----------------------------
testdata/grepinputv:fox jumps
testdata/grepinputx:complete pair
testdata/grepinputx:That was a complete pair
testdata/grepinputx:complete pair
testdata/grepinput3:triple:   t7_txt   s1_tag   s_txt   p_tag   p_txt   o_tag   o_txt
RC=0
---------------------------- Test 85 -----------------------------
./testdata/grepinput3:Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
RC=0
---------------------------- Test 86 -----------------------------
Binary file ./testdata/grepbinary matches
RC=0
---------------------------- Test 87 -----------------------------
RC=1
---------------------------- Test 88 -----------------------------
Binary file ./testdata/grepbinary matches
RC=0
---------------------------- Test 89 -----------------------------
RC=1
---------------------------- Test 90 -----------------------------
RC=1
---------------------------- Test 91 -----------------------------
The quick brown f x jumps over the lazy dog.
RC=0
---------------------------- Test 92 -----------------------------
The quick brown f x jumps over the lazy dog.
RC=0
---------------------------- Test 93 -----------------------------
The quick brown f x jumps over the lazy dog.
RC=0
---------------------------- Test 94 -----------------------------
./testdata/grepinput8
./testdata/grepinputx
RC=0
---------------------------- Test 95 -----------------------------
testdata/grepinputx:complete pair
testdata/grepinputx:That was a complete pair
testdata/grepinputx:complete pair
RC=0
---------------------------- Test 96 -----------------------------
./testdata/grepinput3
./testdata/grepinput8
./testdata/grepinputx
RC=0
---------------------------- Test 97 -----------------------------
./testdata/grepinput3
./testdata/grepinputx
RC=0
---------------------------- Test 98 -----------------------------
./testdata/grepinputx
RC=0
---------------------------- Test 99 -----------------------------
./testdata/grepinput3
./testdata/grepinputx
RC=0
---------------------------- Test 100 ------------------------------
./testdata/grepinput:zerothe.
./testdata/grepinput:zeroa
./testdata/grepinput:zerothe.
RC=0
---------------------------- Test 101 ------------------------------
./testdata/grepinput:[1;31m.[00m|[1;31mzero[00m|[1;31mthe[00m|[1;31m.[00m
./testdata/grepinput:[1;31mzero[00m|[1;31ma[00m
./testdata/grepinput:[1;31m.[00m|[1;31mzero[00m|[1;31mthe[00m|[1;31m.[00m
RC=0
./ ADD NAME=GRPOTN 
---------------------------- Test N1 ------------------------------
1:abc
2:def
---------------------------- Test N2 ------------------------------
1:abc
def
2:ghi
jkl---------------------------- Test N3 ------------------------------
2:def
3:
ghi
jkl---------------------------- Test N4 ------------------------------
2:ghi
jkl---------------------------- Test N5 ------------------------------
1:abc
2:def
3:ghi
4:jkl---------------------------- Test N6 ------------------------------
1:abc
2:def
3:ghi
4:jkl
./ ADD NAME=GRPPATN4 
xxx
jkl
./ ADD NAME=TSTIN1 
/-- This set of tests is for features that are compatible with all versions of
    Perl >= 5.10, in non-UTF-8 mode. It should run clean for both the 8-bit and
    16-bit PCRE libraries. --/

/the quick brown fox/
    the quick brown fox
    The quick brown FOX
    What do you know about the quick brown fox?
    What do you know about THE QUICK BROWN FOX?

/The quick brown fox/i
    the quick brown fox
    The quick brown FOX
    What do you know about the quick brown fox?
    What do you know about THE QUICK BROWN FOX?

/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
    abcd\t\n\r\f\a\e9;\$\\?caxyz

/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
    abxyzpqrrrabbxyyyypqAzz
    abxyzpqrrrabbxyyyypqAzz
    aabxyzpqrrrabbxyyyypqAzz
    aaabxyzpqrrrabbxyyyypqAzz
    aaaabxyzpqrrrabbxyyyypqAzz
    abcxyzpqrrrabbxyyyypqAzz
    aabcxyzpqrrrabbxyyyypqAzz
    aaabcxyzpqrrrabbxyyyypAzz
    aaabcxyzpqrrrabbxyyyypqAzz
    aaabcxyzpqrrrabbxyyyypqqAzz
    aaabcxyzpqrrrabbxyyyypqqqAzz
    aaabcxyzpqrrrabbxyyyypqqqqAzz
    aaabcxyzpqrrrabbxyyyypqqqqqAzz
    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
    aaaabcxyzpqrrrabbxyyyypqAzz
    abxyzzpqrrrabbxyyyypqAzz
    aabxyzzzpqrrrabbxyyyypqAzz
    aaabxyzzzzpqrrrabbxyyyypqAzz
    aaaabxyzzzzpqrrrabbxyyyypqAzz
    abcxyzzpqrrrabbxyyyypqAzz
    aabcxyzzzpqrrrabbxyyyypqAzz
    aaabcxyzzzzpqrrrabbxyyyypqAzz
    aaaabcxyzzzzpqrrrabbxyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
    aaabcxyzpqrrrabbxyyyypABzz
    aaabcxyzpqrrrabbxyyyypABBzz
    >>>aaabxyzpqrrrabbxyyyypqAzz
    >aaaabxyzpqrrrabbxyyyypqAzz
    >>>>abcxyzpqrrrabbxyyyypqAzz
    *** Failers
    abxyzpqrrabbxyyyypqAzz
    abxyzpqrrrrabbxyyyypqAzz
    abxyzpqrrrabxyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyypqAzz
    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz

/(abc){1,2}zz/
    abczz
    abcabczz
    *** Failers
    zz
    abcabcabczz
    >>abczz

/(b+?|a){1,2}?c/
    bc
    bbc
    bbbc
    bac
    bbac
    aac
    abbbbbbbbbbbc
    bbbbbbbbbbbac
    *** Failers
    aaac
    abbbbbbbbbbbac

/(b+|a){1,2}c/
    bc
    bbc
    bbbc
    bac
    bbac
    aac
    abbbbbbbbbbbc
    bbbbbbbbbbbac
    *** Failers
    aaac
    abbbbbbbbbbbac

/(b+|a){1,2}?bc/
    bbc

/(b*|ba){1,2}?bc/
    babc
    bbabc
    bababc
    *** Failers
    bababbc
    babababc

/(ba|b*){1,2}?bc/
    babc
    bbabc
    bababc
    *** Failers
    bababbc
    babababc

/\ca\cA\c[\c{\c:/
    \x01\x01\e;z

/[ab\]cde]/
    athing
    bthing
    ]thing
    cthing
    dthing
    ething
    *** Failers
    fthing
    [thing
    \\thing

/[]cde]/
    ]thing
    cthing
    dthing
    ething
    *** Failers
    athing
    fthing

/[ab\]cde]/
    fthing
    [thing
    \\thing
    *** Failers
    athing
    bthing
    ]thing
    cthing
    dthing
    ething

/[]cde]/
    athing
    fthing
    *** Failers
    ]thing
    cthing
    dthing
    ething

/\/
    

/\xFF/
    \xFF

/[0-9]+$/
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    100
    *** Failers
    abc

/.*nter/
    enter
    inter
    uponter

/xxx[0-9]+$/
    xxx0
    xxx1234
    *** Failers
    xxx

/.+[0-9][0-9][0-9]$/
    x123
    xx123
    123456
    *** Failers
    123
    x1234

/.+?[0-9][0-9][0-9]$/
    x123
    xx123
    123456
    *** Failers
    123
    x1234

/([!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
    abc!pqr=apquxz.ixr.zzz.ac.uk
    *** Failers
    !pqr=apquxz.ixr.zzz.ac.uk
    abc!=apquxz.ixr.zzz.ac.uk
    abc!pqr=apquxz:ixr.zzz.ac.uk
    abc!pqr=apquxz.ixr.zzz.ac.ukk

/:/
    Well, we need a colon: somewhere
    *** Fail if we don't

/([\da-f:]+)$/i
    0abc
    abc
    fed
    E
    ::
    5f03:12C0::932e
    fed def
    Any old stuff
    *** Failers
    0zzz
    gzzz
    fed\x20
    Any old rubbish

/.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
    .1.2.3
    A.12.123.0
    *** Failers
    .1.2.3333
    1.2.3
    1234.2.3

/(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
    1 IN SOA non-sp1 non-sp2(
    1    IN    SOA    non-sp1    non-sp2   (
    *** Failers
    1IN SOA non-sp1 non-sp2(

/[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
    a.
    Z.
    2.
    ab-c.pq-r.
    sxk.zzz.ac.uk.
    x-.y-.
    *** Failers
    -abc.peq.

/\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
    *.a
    *.b0-a
    *.c3-b.c
    *.c-a.b-c
    *** Failers
    *.0
    *.a-
    *.a-b.c-
    *.c-a.0-c

/(?=ab(de))(abd)(e)/
    abde

/(?!(ab)de|x)(abd)(f)/
    abdf

/(?=(ab(cd)))(ab)/
    abcd

/[\da-f](\.[\da-f])*$/i
    a.b.c.d
    A.B.C.D
    a.b.c.1.2.3.C

/\".*\"\s*(;.*)?$/
    \"1234\"
    \"abcd\" ;
    \"\" ; rhubarb
    *** Failers
    \"1234\" : things

/$/
    \
    *** Failers

/       a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
    ab c
    *** Failers
    abc
    ab cde

/(?x)       a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
    ab c
    *** Failers
    abc
    ab cde

/   a\ b[c ]d       $/x
    a bcd
    a b d
    *** Failers
    abcd
    ab d

/(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
    abcdefhijklm

/(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
    abcdefhijklm

/[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
    a+ Z0+\x08\n\x1d\x12

/[.$|()*+?{,}]+/
    .\$(*+)|{?,?}

/a*\w/
    z
    az
    aaaz
    a
    aa
    aaaa
    a+
    aa+

/a*?\w/
    z
    az
    aaaz
    a
    aa
    aaaa
    a+
    aa+

/a+\w/
    az
    aaaz
    aa
    aaaa
    aa+

/a+?\w/
    az
    aaaz
    aa
    aaaa
    aa+

/\d{8}\w{2,}/
    1234567890
    12345678ab
    12345678__
    *** Failers
    1234567

/[aeiou\d]{4,5}$/
    uoie
    1234
    12345
    aaaaa
    *** Failers
    123456

/[aeiou\d]{4,5}?/
    uoie
    1234
    12345
    aaaaa
    123456

/\A(abc|def)=(\1){2,3}\Z/
    abc=abcabc
    def=defdefdef
    *** Failers
    abc=defdef

/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
    abcdefghijkcda2
    abcdefghijkkkkcda2

/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
    cataract cataract23
    catatonic catatonic23
    caterpillar caterpillar23


/From +([ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
    From abcd  Mon Sep 01 12:33:02 1997

/From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
    From abcd  Mon Sep 01 12:33:02 1997
    From abcd  Mon Sep  1 12:33:02 1997
    *** Failers
    From abcd  Sep 01 12:33:02 1997

/12.34/s
    12\n34
    12\r34

/\w+(?=\t)/
    the quick brown\t fox

/foo(?!bar)(.*)/
    foobar is foolish see?

/(?:(?!foo)...|.{0,2})bar(.*)/
    foobar crowbar etc
    barrel
    2barrel
    A barrel

/(\D*)(?=\d)(?!123)/
    abc456
    *** Failers
    abc123

/1234(?# test newlines
  inside)/
    1234

/1234 #comment in extended re
  /x
    1234

/#rhubarb
  abcd/x
    abcd

/abcd#rhubarb/x
    abcd

/(a)\1{2,3}(.)/
    aaab
    aaaab
    aaaaab
    aaaaaab

/(?!)abc/
    the abc
    *** Failers
    abc

/(?=)abc/
    abc
    *** Failers
    the abc

/[ab]{1,3}(ab*|b)/
    aabbbbb

/[ab]{1,3}?(ab*|b)/
    aabbbbb

/[ab]{1,3}?(ab*?|b)/
    aabbbbb

/[ab]{1,3}(ab*?|b)/
    aabbbbb

/  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                          # optional leading comment
(?:    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
# address
|                     #  or
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)             # one word, optionally followed by....
(?:
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
\(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)       |  # comments, or...

" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
# quoted strings
)*
<  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                     # leading <
(?:  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*

(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  ,  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
)* # further okay, if led by comma
:                                # closing colon
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  )? #       optional route
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
#       address spec
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  > #                  trailing >
# name and address
)  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                       # optional trailing comment
/x
    Alan Other <user\@dom.ain>
    <user\@dom.ain>
    user\@dom.ain
    \"A. Other\" <user.1234\@dom.ain> (a comment)
    A. Other <user.1234\@dom.ain> (a comment)
    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
    A missing angle <user\@some.where
    *** Failers
    The quick brown fox

/[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional leading comment
(?:
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# additional words
)*
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
# address
|                             #  or
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
# leading word
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
(?:
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
|
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
) # "special" comment or quoted string
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
)*
<
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# <
(?:
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
(?: ,
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
)*  # additional domains
:
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)?     #       optional route
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# additional words
)*
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
#       address spec
>                    #                 >
# name and address
)
/x
    Alan Other <user\@dom.ain>
    <user\@dom.ain>
    user\@dom.ain
    \"A. Other\" <user.1234\@dom.ain> (a comment)
    A. Other <user.1234\@dom.ain> (a comment)
    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
    A missing angle <user\@some.where
    *** Failers
    The quick brown fox

/abc\0def\00pqr\000xyz\0000AB/
    abc\0def\00pqr\000xyz\0000AB
    abc456 abc\0def\00pqr\000xyz\0000ABCDE

/abc\x0def\x00pqr\x000xyz\x0000AB/
    abc\x0def\x00pqr\x000xyz\x0000AB
    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE

/[\000-\037]/
    \0A
    \01B
    \037C

/\0*/
    \0\0\0\0

/A\x0{2,3}Z/
    The A\x0\x0Z
    An A\0\x0\0Z
    *** Failers
    A\0Z
    A\0\x0\0\x0Z

/(cow|)\1(bell)/
    cowcowbell
    bell
    *** Failers
    cowbell

/\s/
    \040abc
    \x0cabc
    \nabc
    \rabc
    \tabc
    *** Failers
    abc

/a   b
      c/x
    abc

/(a|)\1*b/
    ab
    aaaab
    b
    *** Failers
    acb

/(a|)\1+b/
    aab
    aaaab
    b
    *** Failers
    ab

/(a|)\1?b/
    ab
    aab
    b
    *** Failers
    acb

/(a|)\1{2}b/
    aaab
    b
    *** Failers
    ab
    aab
    aaaab

/(a|)\1{2,3}b/
    aaab
    aaaab
    b
    *** Failers
    ab
    aab
    aaaaab

/ab{1,3}bc/
    abbbbc
    abbbc
    abbc
    *** Failers
    abc
    abbbbbc

/([.]*)\.([:]*):[T ]+(.*)/
    track1.title:TBlah blah blah

/([.]*)\.([:]*):[T ]+(.*)/i
    track1.title:TBlah blah blah

/([.]*)\.([:]*):[t ]+(.*)/i
    track1.title:TBlah blah blah

/[W-c]+$/
    WXY_abc
    *** Failers
    wxy

/[W-c]+$/i
    WXY_abc
    wxy_ABC

/[\x3f-\x5F]+$/i
    WXY_abc
    wxy_ABC

/abc$/m
    abc
    qqq\nabc
    abc\nzzz
    qqq\nabc\nzzz

/abc$/
    abc
    *** Failers
    qqq\nabc
    abc\nzzz
    qqq\nabc\nzzz

/\Aabc\Z/m
    abc
    abc\n 
    *** Failers
    qqq\nabc
    abc\nzzz
    qqq\nabc\nzzz
    
/\A(.)*\Z/s
    abc\ndef

/\A(.)*\Z/m
    *** Failers
    abc\ndef

/(?:b)|(?::+)/
    b::c
    c::b

/[-az]+/
    az-
    *** Failers
    b

/[az-]+/
    za-
    *** Failers
    b

/[a\-z]+/
    a-z
    *** Failers
    b

/[a-z]+/
    abcdxyz

/[\d-]+/
    12-34
    *** Failers
    aaa

/[\d-z]+/
    12-34z
    *** Failers
    aaa

/\x5c/
    \\

/\x20Z/
    the Zoo
    *** Failers
    Zulu

/(abc)\1/i
    abcabc
    ABCabc
    abcABC

/ab{3cd/
    ab{3cd

/ab{3,cd/
    ab{3,cd

/ab{3,4a}cd/
    ab{3,4a}cd

/{4,5a}bc/
    {4,5a}bc

/abc$/
    abc
    abc\n
    *** Failers
    abc\ndef

/(abc)\123/
    abc\x53

/(abc)\223/
    abc\x93

/(abc)\323/
    abc\xd3

/(abc)\100/
    abc\x40
    abc\100

/(abc)\1000/
    abc\x400
    abc\x40\x30
    abc\1000
    abc\100\x30
    abc\100\060
    abc\100\60

/abc\81/
    abc\081
    abc\0\x38\x31

/abc\91/
    abc\091
    abc\0\x39\x31

/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
    abcdefghijkllS

/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
    abcdefghijk\12S

/ab\idef/
    abidef

/a{0}bc/
    bc

/(a|(bc)){0,0}?xyz/
    xyz

/abc[\10]de/
    abc\010de

/abc[\1]de/
    abc\1de

/(abc)[\1]de/
    abc\1de

/(?s)a.b/
    a\nb

/([a])([\b])([c]*)([d]{3,4})/
    baNOTccccd
    baNOTcccd
    baNOTccd
    bacccd
    *** Failers
    anything
    b\bc   
    baccd

/[a]/
    Abc
  
/[a]/i
    Abc 

/[a]+/
    AAAaAbc
  
/[a]+/i
    AAAaAbc 

/[a]+/
    bbb\nccc
   
/[k]$/
    abc
    *** Failers
    abk   
   
/[k]{2,3}$/
    abc
    kbc
    kabc 
    *** Failers
    abk
    akb
    akk 

/\d{8,}\@.+[k]$/
    12345678\@a.b.c.d
    123456789\@x.y.z
    *** Failers
    12345678\@x.y.uk
    1234567\@a.b.c.d       

/(a)\1{8,}/
    aaaaaaaaa
    aaaaaaaaaa
    *** Failers
    aaaaaaa   

/[a]/
    aaaabcd
    aaAabcd 

/[a]/i
    aaaabcd
    aaAabcd 

/[az]/
    aaaabcd
    aaAabcd 

/[az]/i
    aaaabcd
    aaAabcd 

/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
 \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377

/P[*]TAIRE[*]{1,6}?LL/
    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx

/P[*]TAIRE[*]{1,}?LL/
    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx

/(\.\d\d[1-9]?)\d+/
    1.230003938
    1.875000282   
    1.235  
                  
/(\.\d\d((?=0)|\d(?=\d)))/
    1.230003938      
    1.875000282
    *** Failers 
    1.235 
    
/a(?)b/
    ab 
 
/\b(foo)\s+(\w+)/i
    Food is on the foo table
    
/foo(.*)bar/
    The food is under the bar in the barn.
    
/foo(.*?)bar/  
    The food is under the bar in the barn.

/(.*)(\d*)/
    I have 2 numbers: 53147
    
/(.*)(\d+)/
    I have 2 numbers: 53147
 
/(.*?)(\d*)/
    I have 2 numbers: 53147

/(.*?)(\d+)/
    I have 2 numbers: 53147

/(.*)(\d+)$/
    I have 2 numbers: 53147

/(.*?)(\d+)$/
    I have 2 numbers: 53147

/(.*)\b(\d+)$/
    I have 2 numbers: 53147

/(.*\D)(\d+)$/
    I have 2 numbers: 53147

/\D*(?!123)/
    ABC123
     
/(\D*)(?=\d)(?!123)/
    ABC445
    *** Failers
    ABC123
    
/[W-]46]/
    W46]789 
    -46]789
    *** Failers
    Wall
    Zebra
    42
    [abcd] 
    ]abcd[
       
/[W-\]46]/
    W46]789 
    Wall
    Zebra
    Xylophone  
    42
    [abcd] 
    ]abcd[
    \\backslash 
    *** Failers
    -46]789
    well
    
/\d\d\/\d\d\/\d\d\d\d/
    01/01/2000

/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
  word cat dog elephant mussel cow horse canary baboon snake shark otherword
  word cat dog elephant mussel cow horse canary baboon snake shark

/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope

/(a){0,0}/
    bcd
    abc
    aab     

/(a){0,1}/
    bcd
    abc
    aab  

/(a){0,2}/
    bcd
    abc
    aab  

/(a){0,3}/
    bcd
    abc
    aab
    aaa   

/(a){0,}/
    bcd
    abc
    aab
    aaa
    aaaaaaaa    

/(a){1,1}/
    bcd
    abc
    aab  

/(a){1,2}/
    bcd
    abc
    aab  

/(a){1,3}/
    bcd
    abc
    aab
    aaa   

/(a){1,}/
    bcd
    abc
    aab
    aaa
    aaaaaaaa    

/.*\.gif/
    borfle\nbib.gif\nno

/.{0,}\.gif/
    borfle\nbib.gif\nno

/.*\.gif/m
    borfle\nbib.gif\nno

/.*\.gif/s
    borfle\nbib.gif\nno

/.*\.gif/ms
    borfle\nbib.gif\nno
    
/.*$/
    borfle\nbib.gif\nno

/.*$/m
    borfle\nbib.gif\nno

/.*$/s
    borfle\nbib.gif\nno

/.*$/ms
    borfle\nbib.gif\nno
    
/.*$/
    borfle\nbib.gif\nno\n

/.*$/m
    borfle\nbib.gif\nno\n

/.*$/s
    borfle\nbib.gif\nno\n

/.*$/ms
    borfle\nbib.gif\nno\n
    
/(.*X|B)/
    abcde\n1234Xyz
    BarFoo 
    *** Failers
    abcde\nBar  

/(.*X|B)/m
    abcde\n1234Xyz
    BarFoo 
    abcde\nBar  

/(.*X|B)/s
    abcde\n1234Xyz
    BarFoo 
    *** Failers
    abcde\nBar  

/(.*X|B)/ms
    abcde\n1234Xyz
    BarFoo 
    abcde\nBar  

/(?s)(.*X|B)/
    abcde\n1234Xyz
    BarFoo 
    *** Failers 
    abcde\nBar  

/(?s:.*X|B)/
    abcde\n1234Xyz
    BarFoo 
    *** Failers 
    abcde\nBar  

/.*B/
    **** Failers
    abc\nB
     
/(?s).*B/
    abc\nB

/(?m).*B/
    abc\nB
     
/(?ms).*B/
    abc\nB

/(?ms)B/
    abc\nB

/(?s)B$/
    B\n

/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
    123456654321
  
/\d\d\d\d\d\d\d\d\d\d\d\d/
    123456654321 

/[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
    123456654321
  
/[abc]{12}/
    abcabcabcabc
    
/[a-c]{12}/
    abcabcabcabc
    
/(a|b|c){12}/
    abcabcabcabc 

/[abcdefghijklmnopqrstuvwxy0123456789]/
    n
    *** Failers 
    z 

/abcde{0,0}/
    abcd
    *** Failers
    abce  

/ab[cd]{0,0}e/
    abe
    *** Failers
    abcde 
    
/ab(c){0,0}d/
    abd
    *** Failers
    abcd   

/a(b*)/
    a
    ab
    abbbb
    *** Failers
    bbbbb    
    
/ab\d{0}e/
    abe
    *** Failers
    ab1e   
    
/"([\\"]+|\\.)*"/
    the \"quick\" brown fox
    \"the \\\"quick\\\" brown fox\" 

/.*?/g+
    abc
  
/\b/g+
    abc 

/\b/+g
    abc 

//g
    abc

/<tr([\w\W\s\d][<>]{0,})><TD([\w\W\s\d][<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><\/TR>/is
  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>

/a[a]b/
    acb
    a\nb
    
/a.b/
    acb
    *** Failers 
    a\nb   
    
/a[a]b/s
    acb
    a\nb  
    
/a.b/s
    acb
    a\nb  

/(b+?|a){1,2}?c/
    bac
    bbac
    bbbac
    bbbbac
    bbbbbac 

/(b+|a){1,2}?c/
    bac
    bbac
    bbbac
    bbbbac
    bbbbbac 
    
/(?!\A)x/m
    x\nb\n
    a\bx\n  
    
/\x0{ab}/
    \0{ab} 

/(A|B)*?CD/
    CD 
    
/(A|B)*CD/
    CD 

/(AB)*?\1/
    ABABAB

/(AB)*\1/
    ABABAB
    
/(?<!bar)foo/
    foo
    catfood
    arfootle
    rfoosh
    *** Failers
    barfoo
    towbarfoo

/\w{3}(?<!bar)foo/
    catfood
    *** Failers
    foo
    barfoo
    towbarfoo

/(?<=(foo)a)bar/
    fooabar
    *** Failers
    bar
    foobbar
      
/\Aabc\z/m
    abc
    *** Failers
    abc\n   
    qqq\nabc
    abc\nzzz
    qqq\nabc\nzzz

"(?>.*/)foo"
    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/

"(?>.*/)foo"
    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo

/(?>(\.\d\d[1-9]?))\d+/
    1.230003938
    1.875000282
    *** Failers 
    1.235 

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

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

/(?>a+)b/
    aaab

/((?>a+)b)/
    aaab

/(?>(a+))b/
    aaab

/(?>b)+/
    aaabbbccc

/(?>a+|b+|c+)*c/
    aaabbbbccccd

/((?>[()]+)|\([()]*\))+/
    ((abc(ade)ufh()()x
    
/\(((?>[()]+)|\([()]+\))+\)/ 
    (abc)
    (abc(def)xyz)
    *** Failers
    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   

/a(?-i)b/i
    ab
    Ab
    *** Failers 
    aB
    AB
        
/(a (?x)b c)d e/
    a bcd e
    *** Failers
    a b cd e
    abcd e   
    a bcde 
 
/(a b(?x)c d (?-x)e f)/
    a bcde f
    *** Failers
    abcdef  

/(a(?i)b)c/
    abc
    aBc
    *** Failers
    abC
    aBC  
    Abc
    ABc
    ABC
    AbC
    
/a(?i:b)c/
    abc
    aBc
    *** Failers 
    ABC
    abC
    aBC
    
/a(?i:b)*c/
    aBc
    aBBc
    *** Failers 
    aBC
    aBBC
    
/a(?=b(?i)c)\w\wd/
    abcd
    abCd
    *** Failers
    aBCd
    abcD     
    
/(?s-i:more.*than).*million/i
    more than million
    more than MILLION
    more \n than Million 
    *** Failers
    MORE THAN MILLION    
    more \n than \n million 

/(?:(?s-i)more.*than).*million/i
    more than million
    more than MILLION
    more \n than Million 
    *** Failers
    MORE THAN MILLION    
    more \n than \n million 
    
/(?>a(?i)b+)+c/ 
    abc
    aBbc
    aBBc 
    *** Failers
    Abc
    abAb    
    abbC 
    
/(?=a(?i)b)\w\wc/
    abc
    aBc
    *** Failers
    Ab 
    abC
    aBC     
    
/(?<=a(?i)b)(\w\w)c/
    abxxc
    aBxxc
    *** Failers
    Abxxc
    ABxxc
    abxxC      

/(?:(a)|b)(?(1)A|B)/
    aA
    bB
    *** Failers
    aB
    bA    

/(a)?(?(1)a|b)+$/
    aa
    b
    bb  
    *** Failers
    ab   

/(?(?=abc)\w{3}:|\d\d)$/
    abc:
    12
    *** Failers
    123
    xyz    

/(?(?!abc)\d\d|\w{3}:)$/
    abc:
    12
    *** Failers
    123
    xyz    
    
/(?(?<=foo)bar|cat)/
    foobar
    cat
    fcat
    focat   
    *** Failers
    foocat  

/(?(?<!foo)cat|bar)/
    foobar
    cat
    fcat
    focat   
    *** Failers
    foocat  

/( \( )? [()]+ (?(1) \) |) /x
    abcd
    (abcd)
    the quick (abcd) fox
    (abcd   

/( \( )? [()]+ (?(1) \) ) /x
    abcd
    (abcd)
    the quick (abcd) fox
    (abcd   

/(?(2)a|(1)(2))+$/
    12
    12a
    12aa
    *** Failers
    1234    

/((?i)blah)\s+\1/
    blah blah
    BLAH BLAH
    Blah Blah
    blaH blaH
    *** Failers
    blah BLAH
    Blah blah      
    blaH blah 

/((?i)blah)\s+(?i:\1)/
    blah blah
    BLAH BLAH
    Blah Blah
    blaH blaH
    blah BLAH
    Blah blah      
    blaH blah 

/(?>a*)*/
    a
    aa
    aaaa
    
/(abc|)+/
    abc
    abcabc
    abcabcabc
    xyz      

/([a]*)*/
    a
    aaaaa 
 
/([ab]*)*/
    a
    b
    ababab
    aaaabcde
    bbbb    
 
/([a]*)*/
    b
    bbbb
    aaa   
 
/([ab]*)*/
    cccc
    abab  
 
/([a]*?)*/
    a
    aaaa 
 
/([ab]*?)*/
    a
    b
    abab
    baba   
 
/([a]*?)*/
    b
    bbbb
    aaa   
 
/([ab]*?)*/
    c
    cccc
    baba   
 
/(?>a*)*/
    a
    aaabcde 
 
/((?>a*))*/
    aaaaa
    aabbaa 
 
/((?>a*?))*/
    aaaaa
    aabbaa 

/(?(?=[a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
    12-sep-98
    12-09-98
    *** Failers
    sep-12-98
        
/(?<=(foo))bar\1/
    foobarfoo
    foobarfootling 
    *** Failers
    foobar
    barfoo   

/(?i:saturday|sunday)/
    saturday
    sunday
    Saturday
    Sunday
    SATURDAY
    SUNDAY
    SunDay
    
/(a(?i)bc|BB)x/
    abcx
    aBCx
    bbx
    BBx
    *** Failers
    abcX
    aBCX
    bbX
    BBX               

/([ab](?i)[cd]|[ef])/
    ac
    aC
    bD
    elephant
    Europe 
    frog
    France
    *** Failers
    Africa     

/(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
    ab
    aBd
    xy
    xY
    zebra
    Zambesi
    *** Failers
    aCD  
    XY  

/(?<=foo\n)bar/m
    foo\nbar
    *** Failers
    bar
    baz\nbar   

/(?<=(?<!foo)bar)baz/
    barbaz
    barbarbaz 
    koobarbaz 
    *** Failers
    baz
    foobarbaz 

/The cases of aaaa and aaaaaa are missed out below because Perl does things/
/differently. We know that odd, and maybe incorrect, things happen with/
/recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./

/(a\1?){4}$/
    a
    aa
    aaa
    aaaaa
    aaaaaaa
    aaaaaaaa
    aaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaaa
    aaaaaaaaaaaa
    aaaaaaaaaaaaa
    aaaaaaaaaaaaaa
    aaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaa               

/(a\1?)(a\1?)(a\2?)(a\3?)$/
    a
    aa
    aaa
    aaaa
    aaaaa
    aaaaaa
    aaaaaaa
    aaaaaaaa
    aaaaaaaaa
    aaaaaaaaaa
    aaaaaaaaaaa
    aaaaaaaaaaaa
    aaaaaaaaaaaaa
    aaaaaaaaaaaaaa
    aaaaaaaaaaaaaaa
    aaaaaaaaaaaaaaaa               

/The following tests are taken from the Perl 5.005 test suite; some of them/
/are compatible with 5.004, but I'd rather not have to sort them out./

/abc/
    abc
    xabcy
    ababc
    *** Failers
    xbc
    axc
    abx

/ab*c/
    abc

/ab*bc/
    abc
    abbc
    abbbbc

/.{1}/
    abbbbc

/.{3,4}/
    abbbbc

/ab{0,}bc/
    abbbbc

/ab+bc/
    abbc
    *** Failers
    abc
    abq

/ab{1,}bc/

/ab+bc/
    abbbbc

/ab{1,}bc/
    abbbbc

/ab{1,3}bc/
    abbbbc

/ab{3,4}bc/
    abbbbc

/ab{4,5}bc/
    *** Failers
    abq
    abbbbc

/ab?bc/
    abbc
    abc

/ab{0,1}bc/
    abc

/ab?bc/

/ab?c/
    abc

/ab{0,1}c/
    abc

/abc$/
    abc
    *** Failers
    abbbbc
    abcc

/abc/
    abcc

/abc$/

/abc$/
    aabc
    *** Failers
    aabc
    aabcd

//
    abc

/$/
    abc

/a.c/
    abc
    axc

/a.*c/
    axyzc

/a[bc]d/
    abd
    *** Failers
    axyzd
    abc

/a[b-d]e/
    ace

/a[b-d]/
    aac

/a[-b]/
    a-

/a[b-]/
    a-

/a]/
    a]

/a[]]b/
    a]b

/a[bc]d/
    aed
    *** Failers
    abd
    abd

/a[-b]c/
    adc

/a[]b]c/
    adc
    *** Failers
    a-c
    a]c

/\ba\b/
    a-
    -a
    -a-

/\by\b/
    *** Failers
    xy
    yz
    xyz

/\Ba\B/
    *** Failers
    a-
    -a
    -a-

/\By\b/
    xy

/\by\B/
    yz

/\By\B/
    xyz

/\w/
    a

/\W/
    -
    *** Failers
    -
    a

/a\sb/
    a b

/a\Sb/
    a-b
    *** Failers
    a-b
    a b

/\d/
    1

/\D/
    -
    *** Failers
    -
    1

/[\w]/
    a

/[\W]/
    -
    *** Failers
    -
    a

/a[\s]b/
    a b

/a[\S]b/
    a-b
    *** Failers
    a-b
    a b

/[\d]/
    1

/[\D]/
    -
    *** Failers
    -
    1

/ab|cd/
    abc
    abcd

/()ef/
    def

/$b/

/a\(b/
    a(b

/a\(*b/
    ab
    a((b

/a\\b/
    a\b

/((a))/
    abc

/(a)b(c)/
    abc

/a+b+c/
    aabbabc

/a{1,}b{1,}c/
    aabbabc

/a.+?c/
    abcabc

/(a+|b)*/
    ab

/(a+|b){0,}/
    ab

/(a+|b)+/
    ab

/(a+|b){1,}/
    ab

/(a+|b)?/
    ab

/(a+|b){0,1}/
    ab

/[ab]*/
    cde

/abc/
    *** Failers
    b
    

/a*/
    

/([abc])*d/
    abbbcd

/([abc])*bcd/
    abcd

/a|b|c|d|e/
    e

/(a|b|c|d|e)f/
    ef

/abcd*efg/
    abcdefg

/ab*/
    xabyabbbz
    xayabbbz

/(ab|cd)e/
    abcde

/[abhgefdc]ij/
    hij

/(ab|cd)e/

/(abc|)ef/
    abcdef

/(a|b)c*d/
    abcd

/(ab|ab*)bc/
    abc

/a([bc]*)c*/
    abc

/a([bc]*)(c*d)/
    abcd

/a([bc]+)(c*d)/
    abcd

/a([bc]*)(c+d)/
    abcd

/a[bcd]*dcdcde/
    adcdcde

/a[bcd]+dcdcde/
    *** Failers
    abcde
    adcdcde

/(ab|a)b*c/
    abc

/((a)(b)c)(d)/
    abcd

/[a-zA-Z_][a-zA-Z0-9_]*/
    alpha

/a(bc+|b[eh])g|.h$/
    abh

/(bc+d$|ef*g.|h?i(j|k))/
    effgz
    ij
    reffgz
    *** Failers
    effg
    bcdd

/((((((((((a))))))))))/
    a

/((((((((((a))))))))))\10/
    aa

/(((((((((a)))))))))/
    a

/multiple words of text/
    *** Failers
    aa
    uh-uh

/multiple words/
    multiple words, yeah

/(.*)c(.*)/
    abcde

/\((.*), (.*)\)/
    (a, b)

/[k]/

/abcd/
    abcd

/a(bc)d/
    abcd

/a[-]?c/
    ac

/(abc)\1/
    abcabc

/([a-c]*)\1/
    abcabc

/(a)|\1/
    a
    *** Failers
    ab
    x

/(([a-c])b*?\2)*/
    ababbbcbc

/(([a-c])b*?\2){3}/
    ababbbcbc

/((\3|b)\2(a)x)+/
    aaaxabaxbaaxbbax

/((\3|b)\2(a)){2,}/
    bbaababbabaaaaabbaaaabba

/abc/i
    ABC
    XABCY
    ABABC
    *** Failers
    aaxabxbaxbbx
    XBC
    AXC
    ABX

/ab*c/i
    ABC

/ab*bc/i
    ABC
    ABBC

/ab*?bc/i
    ABBBBC

/ab{0,}?bc/i
    ABBBBC

/ab+?bc/i
    ABBC

/ab+bc/i
    *** Failers
    ABC
    ABQ

/ab{1,}bc/i

/ab+bc/i
    ABBBBC

/ab{1,}?bc/i
    ABBBBC

/ab{1,3}?bc/i
    ABBBBC

/ab{3,4}?bc/i
    ABBBBC

/ab{4,5}?bc/i
    *** Failers
    ABQ
    ABBBBC

/ab??bc/i
    ABBC
    ABC

/ab{0,1}?bc/i
    ABC

/ab??bc/i

/ab??c/i
    ABC

/ab{0,1}?c/i
    ABC

/abc$/i
    ABC
    *** Failers
    ABBBBC
    ABCC

/abc/i
    ABCC

/abc$/i

/abc$/i
    AABC

//i
    ABC

/$/i
    ABC

/a.c/i
    ABC
    AXC

/a.*?c/i
    AXYZC

/a.*c/i
    *** Failers
    AABC
    AXYZD

/a[bc]d/i
    ABD

/a[b-d]e/i
    ACE
    *** Failers
    ABC
    ABD

/a[b-d]/i
    AAC

/a[-b]/i
    A-

/a[b-]/i
    A-

/a]/i
    A]

/a[]]b/i
    A]B

/a[bc]d/i
    AED

/a[-b]c/i
    ADC
    *** Failers
    ABD
    A-C

/a[]b]c/i
    ADC

/ab|cd/i
    ABC
    ABCD

/()ef/i
    DEF

/$b/i
    *** Failers
    A]C
    B

/a\(b/i
    A(B

/a\(*b/i
    AB
    A((B

/a\\b/i
    A\B

/((a))/i
    ABC

/(a)b(c)/i
    ABC

/a+b+c/i
    AABBABC

/a{1,}b{1,}c/i
    AABBABC

/a.+?c/i
    ABCABC

/a.*?c/i
    ABCABC

/a.{0,5}?c/i
    ABCABC

/(a+|b)*/i
    AB

/(a+|b){0,}/i
    AB

/(a+|b)+/i
    AB

/(a+|b){1,}/i
    AB

/(a+|b)?/i
    AB

/(a+|b){0,1}/i
    AB

/(a+|b){0,1}?/i
    AB

/[ab]*/i
    CDE

/abc/i

/a*/i
    

/([abc])*d/i
    ABBBCD

/([abc])*bcd/i
    ABCD

/a|b|c|d|e/i
    E

/(a|b|c|d|e)f/i
    EF

/abcd*efg/i
    ABCDEFG

/ab*/i
    XABYABBBZ
    XAYABBBZ

/(ab|cd)e/i
    ABCDE

/[abhgefdc]ij/i
    HIJ

/(ab|cd)e/i
    ABCDE

/(abc|)ef/i
    ABCDEF

/(a|b)c*d/i
    ABCD

/(ab|ab*)bc/i
    ABC

/a([bc]*)c*/i
    ABC

/a([bc]*)(c*d)/i
    ABCD

/a([bc]+)(c*d)/i
    ABCD

/a([bc]*)(c+d)/i
    ABCD

/a[bcd]*dcdcde/i
    ADCDCDE

/a[bcd]+dcdcde/i

/(ab|a)b*c/i
    ABC

/((a)(b)c)(d)/i
    ABCD

/[a-zA-Z_][a-zA-Z0-9_]*/i
    ALPHA

/a(bc+|b[eh])g|.h$/i
    ABH

/(bc+d$|ef*g.|h?i(j|k))/i
    EFFGZ
    IJ
    REFFGZ
    *** Failers
    ADCDCDE
    EFFG
    BCDD

/((((((((((a))))))))))/i
    A

/((((((((((a))))))))))\10/i
    AA

/(((((((((a)))))))))/i
    A

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
    A

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
    C

/multiple words of text/i
    *** Failers
    AA
    UH-UH

/multiple words/i
    MULTIPLE WORDS, YEAH

/(.*)c(.*)/i
    ABCDE

/\((.*), (.*)\)/i
    (A, B)

/[k]/i

/abcd/i
    ABCD

/a(bc)d/i
    ABCD

/a[-]?c/i
    AC

/(abc)\1/i
    ABCABC

/([a-c]*)\1/i
    ABCABC

/a(?!b)./
    abad

/a(?=d)./
    abad

/a(?=c|d)./
    abad

/a(?:b|c|d)(.)/
    ace

/a(?:b|c|d)*(.)/
    ace

/a(?:b|c|d)+?(.)/
    ace
    acdbcdbe

/a(?:b|c|d)+(.)/
    acdbcdbe

/a(?:b|c|d){2}(.)/
    acdbcdbe

/a(?:b|c|d){4,5}(.)/
    acdbcdbe

/a(?:b|c|d){4,5}?(.)/
    acdbcdbe

/((foo)|(bar))*/
    foobar

/a(?:b|c|d){6,7}(.)/
    acdbcdbe

/a(?:b|c|d){6,7}?(.)/
    acdbcdbe

/a(?:b|c|d){5,6}(.)/
    acdbcdbe

/a(?:b|c|d){5,6}?(.)/
    acdbcdbe

/a(?:b|c|d){5,7}(.)/
    acdbcdbe

/a(?:b|c|d){5,7}?(.)/
    acdbcdbe

/a(?:b|(c|e){1,2}?|d)+?(.)/
    ace

/(.+)?B/
    AB

/([a-z])|(\)$/
    .

/[<>]&/
    <&OUT

/(a\1?){4}$/
    aaaaaaaaaa
    *** Failers
    AB
    aaaaaaaaa
    aaaaaaaaaaa

/(a(?(1)\1)){4}$/
    aaaaaaaaaa
    *** Failers
    aaaaaaaaa
    aaaaaaaaaaa

/(?:(f)(o)(o)|(b)(a)(r))*/
    foobar

/(?<=a)b/
    ab
    *** Failers
    cb
    b

/(?<!c)b/
    ab
    b
    b

/(?:..)*a/
    aba

/(?:..)*?a/
    aba

/(?:b|a(?=(.)))*\1/
    abc

/(){3,5}/
    abc

/(a+)*ax/
    aax

/((a|b)+)*ax/
    aax

/((a|bc)+)*ax/
    aax

/(a|x)*ab/
    cab

/(a)*ab/
    cab

/(?:(?i)a)b/
    ab

/((?i)a)b/
    ab

/(?:(?i)a)b/
    Ab

/((?i)a)b/
    Ab

/(?:(?i)a)b/
    *** Failers
    cb
    aB

/((?i)a)b/

/(?i:a)b/
    ab

/((?i:a))b/
    ab

/(?i:a)b/
    Ab

/((?i:a))b/
    Ab

/(?i:a)b/
    *** Failers
    aB
    aB

/((?i:a))b/

/(?:(?-i)a)b/i
    ab

/((?-i)a)b/i
    ab

/(?:(?-i)a)b/i
    aB

/((?-i)a)b/i
    aB

/(?:(?-i)a)b/i
    *** Failers
    aB
    Ab

/((?-i)a)b/i

/(?:(?-i)a)b/i
    aB

/((?-i)a)b/i
    aB

/(?:(?-i)a)b/i
    *** Failers
    Ab
    AB

/((?-i)a)b/i

/(?-i:a)b/i
    ab

/((?-i:a))b/i
    ab

/(?-i:a)b/i
    aB

/((?-i:a))b/i
    aB

/(?-i:a)b/i
    *** Failers
    AB
    Ab

/((?-i:a))b/i

/(?-i:a)b/i
    aB

/((?-i:a))b/i
    aB

/(?-i:a)b/i
    *** Failers
    Ab
    AB

/((?-i:a))b/i

/((?-i:a.))b/i
    *** Failers
    AB
    a\nB

/((?s-i:a.))b/i
    a\nB

/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
    cabbbb

/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

/(ab)\d\1/i
    Ab4ab
    ab4Ab

/foo\w*\d{4}baz/
    foobar1234baz

/x(~~)*(?:(?:F)?)?/
    x~~

/a(?#xxx){3}c/
    aaac

/a (?#xxx) (?#yyy) {3}c/x
    aaac

/(?<![cd])b/
    *** Failers
    B\nB
    dbcb

/(?<![cd])[ab]/
    dbaacb

/(?<!(c|d))b/

/(?<!(c|d))[ab]/
    dbaacb

/(?<!cd)[ab]/
    cdaccb

/(?:a?b?)*$/
    \
    a
    ab
    aaa   
    *** Failers
    dbcb
    a--
    aa-- 

/((?s)a(.))((?m)b$)/
    a\nb\nc\n

/((?m)b$)/
    a\nb\nc\n

/(?m)b/
    a\nb\n

/(?m)(b)/
    a\nb\n

/((?m)b)/
    a\nb\n

/\n((?m)b)/
    a\nb\n

/((?s).)c(?!.)/
    a\nb\nc\n
    a\nb\nc\n

/((?s)b.)c(?!.)/
    a\nb\nc\n
    a\nb\nc\n

/b/

/()b/
    *** Failers
    a\nb\nc\n
    a\nb\nc\n

/((?m)b)/
    a\nb\nc\n

/(x)?(?(1)a|b)/
    *** Failers
    a
    a

/(x)?(?(1)b|a)/
    a

/()?(?(1)b|a)/
    a

/()(?(1)b|a)/

/()?(?(1)a|b)/
    a

/(\()?blah(?(1)(\)))$/
    (blah)
    blah
    *** Failers
    a
    blah)
    (blah

/(\(+)?blah(?(1)(\)))$/
    (blah)
    blah
    *** Failers
    blah)
    (blah

/(?(?!a)a|b)/

/(?(?!a)b|a)/
    a

/(?(?=a)b|a)/
    *** Failers
    a
    a

/(?(?=a)a|b)/
    a

/(?=(a+?))(\1ab)/
    aaab

/(?=(a+?))\1ab/

/(\w+:)+/
    one:

/$(?<=(a))/
    a

/(?=(a+?))(\1ab)/
    aaab

/(?=(a+?))\1ab/
    *** Failers
    aaab
    aaab

/([\w:]+::)?(\w+)$/
    abcd
    xy:z:::abcd

/[bcd]*(c+)/
    aexycd

/(a*)b+/
    caab

/([\w:]+::)?(\w+)$/
    abcd
    xy:z:::abcd
    *** Failers
    abcd:
    abcd:

/[bcd]*(c+)/
    aexycd

/(>a+)ab/

/(?>a+)b/
    aaab

/([[:]+)/
    a:[b]:

/([[=]+)/
    a=[b]=

/([[.]+)/
    a.[b].

/((?>a+)b)/
    aaab

/(?>(a+))b/
    aaab

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

/a\Z/
    *** Failers
    aaab
    a\nb\n

/b\Z/
    a\nb\n

/b\z/

/b\Z/
    a\nb

/b\z/
    a\nb
    *** Failers
    
/(?>(?(1)\.|())[\W_](?>[a-z0-9-]*[\W_])?)+$/
    a
    abc
    a-b
    0-9 
    a.b
    5.6.7  
    the.quick.brown.fox
    a100.b200.300c  
    12-ab.1245 
    *** Failers
    \
    .a
    -a
    a-
    a.  
    a_b 
    a.-
    a..  
    ab..bc 
    the.quick.brown.fox-
    the.quick.brown.fox.
    the.quick.brown.fox_
    the.quick.brown.fox+       

/(?>.*)(?<=(abcd|wxyz))/
    alphabetabcd
    endingwxyz
    *** Failers
    a rather long string that doesn't end with one of them

/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
    word cat dog elephant mussel cow horse canary baboon snake shark otherword
    word cat dog elephant mussel cow horse canary baboon snake shark
  
/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope

/(?<=\d{3}(?!999))foo/
    999foo
    123999foo 
    *** Failers
    123abcfoo
    
/(?<=(?!...999)\d{3})foo/
    999foo
    123999foo 
    *** Failers
    123abcfoo

/(?<=\d{3}(?!999)...)foo/
    123abcfoo
    123456foo 
    *** Failers
    123999foo  
    
/(?<=\d{3}...)(?<!999)foo/
    123abcfoo   
    123456foo 
    *** Failers
    123999foo  

/<a[\s]+href[\s]*=[\s]*          # find <a href=
 ([\"\'])?                       # find single or double quote
 (?(1) (.*?)\1 | ([\s]+))       # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isx
    <a href=abcd xyz
    <a href=\"abcd xyz pqr\" cats
    <a href=\'abcd xyz pqr\' cats

/<a\s+href\s*=\s*                # find <a href=
 (["'])?                         # find single or double quote
 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isx
    <a href=abcd xyz
    <a href=\"abcd xyz pqr\" cats
    <a href       =       \'abcd xyz pqr\' cats

/<a\s+href(?>\s*)=(?>\s*)        # find <a href=
 (["'])?                         # find single or double quote
 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isx
    <a href=abcd xyz
    <a href=\"abcd xyz pqr\" cats
    <a href       =       \'abcd xyz pqr\' cats

/((Z)+|A)*/
    ZABCDEFG

/(Z()|A)*/
    ZABCDEFG

/(Z(())|A)*/
    ZABCDEFG

/((?>Z)+|A)*/
    ZABCDEFG

/((?>)+|A)*/
    ZABCDEFG

/a*/g
    abbab

/[a-\d]/
    abcde
    -things
    0digit
    *** Failers
    bcdef    

/[\d-a]/
    abcde
    -things
    0digit
    *** Failers
    bcdef    
    
/[[:space:]]+/
    > \x09\x0a\x0c\x0d\x0b<
     
/[[:blank:]]+/
    > \x09\x0a\x0c\x0d\x0b<
     
/[\s]+/
    > \x09\x0a\x0c\x0d\x0b<
     
/\s+/
    > \x09\x0a\x0c\x0d\x0b<
     
/ab/x
    ab

/(?!\A)x/m
  a\nxb\n

/(?!)x/m
  a\nxb\n

/abc\Qabc\Eabc/
    abcabcabc
    
/abc\Q(*+|\Eabc/
    abc(*+|abc 

/   abc\Q abc\Eabc/x
    abc abcabc
    *** Failers
    abcabcabc  
    
/abc#comment
    \Q#not comment
    literal\E/x
    abc#not comment\n    literal     

/abc#comment
    \Q#not comment
    literal/x
    abc#not comment\n    literal     

/abc#comment
    \Q#not comment
    literal\E #more comment
    /x
    abc#not comment\n    literal     

/abc#comment
    \Q#not comment
    literal\E #more comment/x
    abc#not comment\n    literal     

/\Qabc\$xyz\E/
    abc\\\$xyz

/\Qabc\E\$\Qxyz\E/
    abc\$xyz

/\Gabc/
    abc
    *** Failers
    xyzabc  

/\Gabc./g
    abc1abc2xyzabc3

/abc./g
    abc1abc2xyzabc3 

/a(?x: b c )d/
    XabcdY
    *** Failers 
    Xa b c d Y 

/((?x)x y z | a b c)/
    XabcY
    AxyzB 

/(?i)AB(?-i)C/
    XabCY
    *** Failers
    XabcY  

/((?i)AB(?-i)C|D)E/
    abCE
    DE
    *** Failers
    abcE
    abCe  
    dE
    De    

/(.*)\d+\1/
    abc123abc
    abc123bc 

/(.*)\d+\1/s
    abc123abc
    abc123bc 
    
/((.*))\d+\1/
    abc123abc
    abc123bc  

/-- This tests for an IPv6 address in the form where it can have up to --/
/-- eight components, one and only one of which is empty. This must be --/
/-- an internal component. --/

/(?!:)                       # colon disallowed at start
  (?:                         # start of item
    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
    (?(1)0 | () ) )           # if null previously matched, fail; else null
    :                         # followed by colon
  ){1,7}                      # end item; 1-7 of them required               
  [0-9a-f]{1,4} $             # final hex number at end of string
  (?(1)|.)                    # check that there was an empty component
  /xi
    a123::a123
    a123:b342::abcd
    a123:b342::324e:abcd
    a123:ddde:b342::324e:abcd
    a123:ddde:b342::324e:dcba:abcd
    a123:ddde:9999:b342::324e:dcba:abcd
    *** Failers
    1:2:3:4:5:6:7:8
    a123:bce:ddde:9999:b342::324e:dcba:abcd
    a123::9999:b342::324e:dcba:abcd
    abcde:2:3:4:5:6:7:8
    ::1
    abcd:fee0:123::   
    :1
    1:  

/[z\Qa-d]\E]/
    z
    a
    -
    d
    ] 
    *** Failers
    b     

/[\z\C]/
    z
    C 
    
/\M/
    M 
    
/(a+)*b/
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
    
/(?i)reg(?:ul(?:[a]|ae)r|ex)/
    REGular
    regulaer
    Regex  
    regulr 

/[-\xFF-]+/
    
    \xFF
    
    

/(?<=Z)X./
  \x84XAZXB

/ab cd (?x) de fg/
    ab cd defg

/ab cd(?x) de fg/
    ab cddefg
    ** Failers 
    abcddefg

/(?<![f]oo)(bar)/
    foobarX 
    ** Failers 
    boobarX

/(?<![f])X/
    offX
    ** Failers
    onyX  

/(?<=[f])X/
    onyX
    ** Failers
    offX 

//mg
    a\nb\nc\n
    \ 
    
/(?<=C\n)/mg
    A\nC\nC\n 

/(?:(?(1)a|b)(X))+/
    bXaX

/(?:(?(1)\1a|b)(X|Y))+/
    bXXaYYaY
    bXYaXXaX  

/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
    bXXaYYaY

/[[,abc,]+]/
    abc]
    a,b]
    [a,b,c]  

/(?-x: )/x
    A\x20B
    
"(?x)(?-x: \s*#\s*)"
    A # B
    ** Failers
    #  

"(?x-is)(?:(?-ixs) \s*#\s*) include"
    A #include
    ** Failers
    A#include  
    A #Include

/a*b*\w/
    aaabbbb
    aaaa
    a

/a*b?\w/
    aaabbbb
    aaaa
    a

/a*b{0,4}\w/
    aaabbbb
    aaaa
    a

/a*b{0,}\w/
    aaabbbb
    aaaa
    a
    
/a*\d*\w/
    0a
    a 
    
/a*b *\w/x
    a 

/a*b#comment
  *\w/x
    a 

/a* b *\w/x
    a 

/\w+=.*(\\\n.*)*/
    abc=xyz\\\npqr

/(?=(\w+))\1:/
    abcd:

/(?=(\w+))\1:/
    abcd:

/\Eabc/
    abc
    
/[\Eabc]/
    a
    ** Failers 
    E 
    
/[a-\Ec]/
    b
    ** Failers
    -
    E    

/[a\E\E-\Ec]/
    b
    ** Failers
    -
    E    

/[\E\Qa\E-\Qz\E]+/
    b
    ** Failers
    -  
    
/[a\Q]bc\E]/
    a
    ]
    c
    
/[a-\Q\E]/
    a
    -     

/(a()*)*/
    aaaa

/(?:a(?:(?:))*)*/
    aaaa

/(a()+)+/
    aaaa

/(?:a(?:(?:))+)+/
    aaaa

/(a){0,3}(?(1)b|(c|))*D/
    abbD
    ccccD
    D  

/(a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/(?>a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/(?:a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/\Z/g
  abc\n
  
/(?s)(?>.*)(?<!\n)/
  abc
  abc\n  

/(?![\n]*\n\z)/
  abc
  abc\n 
  
/\z(?<!\n)/
  abc
  abc\n  

/(.*(.)?)*/
    abcd

/( (A | (?(1)0|) )*   )/x
    abcd

/( ( (?(1)0|) )*   )/x
    abcd

/(  (?(1)0|)*   )/x
    abcd

/[[:abcd:xyz]]/
    a]
    :] 
    
/[abc[:x\]pqr]/
    a
    [
    :
    ]
    p    

/.*[op][xyz]/
    fooabcfoo

/(?(?=.*b)b|)/
   adc
   abc 

/(?(?=.*b)b|)/
   adc
   abc 

/(?(?=.*b)b|)*/
   adc
   abc 

/(?(?=.*b)b|)+/
   adc
   abc 

/(?(?=b).*b|d)/
    abc

/(?(?=.*b).*b|d)/
    abc

/%((?(?=[a])[%])|b)*%$/
    %ab%

/(?i)a(?-i)b|c/
    XabX
    XAbX
    CcC 
    ** Failers
    XABX   

/[\x00-\xff\s]+/
    \x0a\x0b\x0c\x0d

/\c/
    ?

/(abc)\1/i
   abc

/(abc)\1/
   abc

/[a]*/i
    12abc
    12ABC

/[a]*+/i
    12abc
    12ABC

/[a]*?X/i
    ** Failers
    12abc
    12ABC
    
/[a]+?X/i   
    ** Failers
    12abc
    12ABC

/[a]?X/i
    12aXbcX
    12AXBCX
    BCX 

/[a]??X/i
    12aXbcX
    12AXBCX
    BCX
    
/[a]?+X/i
    12aXbcX
    12AXBCX
    BCX 

/[a]{2,3}/i
    abcdef
    ABCDEF  

/[a]{2,3}?/i
    abcdef
    ABCDEF  

/[a]{2,3}+/i
    abcdef
    ABCDEF  

/((a|)+)+Z/
    Z

/(a)b|(a)c/
    ac

/(?>(a))b|(a)c/
    ac

/(?=(a))ab|(a)c/
    ac

/((?>(a))b|(a)c)/
    ac

/((?>(a))b|(a)c)++/
    ac

/(?:(?>(a))b|(a)c)++/
    ac

/(?=(?>(a))b|(a)c)(..)/
    ac

/(?>(?>(a))b|(a)c)/
    ac

/(?:(?>([ab])))+a=/+
    =ba=

/(?>([ab]))+a=/+
    =ba=

/((?>(a+)b)+(aabab))/
    aaaabaaabaabab

/(?>a+|ab)+?c/
    aabc

/(?>a+|ab)+c/
    aabc

/(?:a+|ab)+c/
    aabc

/(?(?=(a))a)/
    a

/(?(?=(a))a)(b)/
    ab

/(?:a|ab)++c/
    aaaabc

/(?>a|ab)++c/
    aaaabc

/(?:a|ab)+c/
    aaaabc

/(?=abc){3}abc/+
    abcabcabc
    ** Failers
    xyz  
    
/(?=abc)+abc/+
    abcabcabc
    ** Failers
    xyz  
    
/(?=abc)++abc/+
    abcabcabc
    ** Failers
    xyz  
    
/(?=abc){0}xyz/
    xyz 

/(?=abc){1}xyz/
    ** Failers
    xyz 
    
/(?=(a))?./
    ab
    bc
      
/(?=(a))??./
    ab
    bc

/(?=(a)){0}b(?1)/
    backgammon

/(?=(?1))?[az]([abc])d/
    abd 
    zcdxx 

/(?!a){0}\w+/
    aaaaa

/(?<=(abc))?xyz/
    abcxyz
    pqrxyz 

/[\g<a>]+/
    ggg<<<aaa>>>
    ** Failers
    \\ga  
    
/[\ga]+/
    gggagagaxyz 
    
/[:a[:digit:]]+/
    aaaa444:::Z 

/[:a[:digit:]:b]+/
    aaaa444:::bbbZ 

/[:a]xxx[b:]/
     :xxx:
     
/(?<=a{2})b/i
    xaabc
    ** Failers
    xabc  

/(?<!a{2})b/i
    xabc
    ** Failers
    xaabc  

/(?<=a\h)c/
    xa c
    
/(?<=[a]{2})b/
    axxbc
    aAAbc 
    ** Failers
    xaabc    

/(?<=[a]{2})b/i
    axxbc  
    ** Failers
    aAAbc 
    xaabc    

/(?<=a\H)c/
    abc

/(?<=a\V)c/
    abc
    
/(?<=a\v)c/
    a\nc

/(?(?=c)c|d)++Y/
    XcccddYX

/(?(?=c)c|d)*+Y/
    XcccddYX

/(a{2,3}){2,}+a/
    aaaaaaa
    ** Failers
    aaaaaa
    aaaaaaaaa 

/(a{2,3})++a/
    ** Failers
    aaaaaa

/(a{2,3})*+a/
    ** Failers
    aaaaaa

/ab\Cde/
    abXde
    
/(?<=ab\Cde)X/
    abZdeX

/a[\CD]b/
    aCb
    aDb 

/a[\C-X]b/
    aJb

/\H\h\V\v/
    X X\x0a
    X\x09X\x0b
    ** Failers
    \xa0 X\x0a   
    
/\H*\h+\V?\v{3,4}/ 
    \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
    \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
    \x09\x20\xa0\x0a\x0b\x0c
    ** Failers 
    \x09\x20\xa0\x0a\x0b
     
/\H{3,4}/
    XY  ABCDE
    XY  PQR ST 
    
/.\h{3,4}./
    XY  AB    PQRS

/\h*X\h?\H+Y\H?Z/
    >XNNNYZ
    >  X NYQZ
    ** Failers
    >XYZ   
    >  X NY Z

/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
    >XY\x0aZ\x0aA\x0bNN\x0c
    >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c

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

/(foo\Kbar)baz/
    foobarbaz

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

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

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

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

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

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

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

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

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

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

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

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

/(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x
    abcd

/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
  (?(DEFINE)
  (?<NAME_PAT>[a-z]+)
  (?<ADDRESS_PAT>\d+)
  )/x
    metcalfe 33

/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
    1.2.3.4
    131.111.10.206
    10.0.0.0
    ** Failers
    10.6
    455.3.4.5

/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
    1.2.3.4
    131.111.10.206
    10.0.0.0
    ** Failers
    10.6
    455.3.4.5

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

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

/a++b/
    aaab

/(a++b)/
    aaab

/(a++)b/
    aaab

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

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

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

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

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

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

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

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

/a+(*FAIL)/
    aaaaaa
    
/a+b?c+(*FAIL)/
    aaabccc

/a+b?(*PRUNE)c+(*FAIL)/
    aaabccc

/a+b?(*COMMIT)c+(*FAIL)/
    aaabccc
    
/a+b?(*SKIP)c+(*FAIL)/
    aaabcccaaabccc

/(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
    aaaxxxxxx
    aaa++++++ 
    bbbxxxxx
    bbb+++++ 
    cccxxxx
    ccc++++ 
    dddddddd   

/(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
    aaaxxxxxx
    aaa++++++ 
    bbbxxxxx
    bbb+++++ 
    cccxxxx
    ccc++++ 
    dddddddd   

/a+b?(*THEN)c+(*FAIL)/
    aaabccc

/(A (A|B(*ACCEPT)|C) D)(E)/x
    AB
    ABX
    AADE
    ACDE
    ** Failers
    AD 
        
/\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
    1221
    Satan, oscillate my metallic sonatas!
    A man, a plan, a canal: Panama!
    Able was I ere I saw Elba.
    *** Failers
    The quick brown fox

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

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

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

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

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

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

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

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

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

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

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

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

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

/(?>a\Kb)/
    ab

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/(*SKIP)b/
    a 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/--- Capture ---/

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

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

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

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

/--- Non-capture ---/

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

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

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

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

/--- Atomic ---/

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

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

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

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

/--- Possessive capture ---/

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

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

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

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

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

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

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

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

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

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

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

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

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

/--- Assertion ---/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/--- Same --/

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/(another)?(\1?)test/
    hello world test

/(another)?(\1+)test/
    hello world test

/(a(*COMMIT)b){0}a(?1)|aac/
    aac

/(?!a(*COMMIT)b)ac|cd/
    ac

/((?:a?)*)*c/
  aac   

/((?>a?)*)*c/
  aac   

/(?>.*?a)(?<=ba)/
    aba

/(?:.*?a)(?<=ba)/
    aba

/.*?a(*PRUNE)b/
    aab

/.*?a(*PRUNE)b/s
    aab

/a(*PRUNE)b/s
    aab

/.*?a(*SKIP)b/
    aab

/(?>.*?a)b/s
    aab

/(?>.*?a)b/
    aab

/(?>a)b/s
    aab

/(?>.*?)(?<=(abcd)|(wxyz))/
    alphabetabcd
    endingwxyz 

/(?>.*)(?<=(abcd)|(wxyz))/
    alphabetabcd
    endingwxyz 

"(?>.*)foo"
    abcdfooxyz
    
"(?>.*?)foo"
    abcdfooxyz

/-- End of testinput1 --/
./ ADD NAME=TSTIN11 
/-- These are a few representative patterns whose lengths and offsets are to be 
shown when the link size is 2. This is just a doublecheck test to ensure the 
sizes don't go horribly wrong when something is changed. The pattern contents 
are all themselves checked in other tests. Unicode, including property support, 
is required for these tests. --/

/((?i)b)/BM

/(?s)(.*X|B)/BM

/(?s:.*X|B)/BM

/[[:alnum:]]/BM

/#/IxMD

/a#/IxMD

/x?+/BM

/x++/BM

/x{1,3}+/BM 

/(x)*+/BM

/((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/BM

|8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|BM

|\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|BM

/(a(?1)b)/BM

/(a(?1)+b)/BM

/a(?P<name1>b|c)d(?P<longername2>e)/BM

/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/BM

/(?P<a>a)...(?P=a)bbb(?P>a)d/BM

/abc(?C255)de(?C)f/BM

/abcde/CBM

/\x{100}/8BM

/\x{1000}/8BM

/\x{10000}/8BM

/\x{100000}/8BM

/\x{10ffff}/8BM

/\x{110000}/8BM

/[\x{ff}]/8BM

/[\x{100}]/8BM

/\x80/8BM

/\xff/8BM

/\x{0041}\x{2262}\x{0391}\x{002e}/D8M
    
/\x{D55c}\x{ad6d}\x{C5B4}/D8M 

/\x{65e5}\x{672c}\x{8a9e}/D8M

/[\x{100}]/8BM

/[Z\x{100}]/8BM

/[\x{100}\E-\Q\E\x{150}]/B8M

/[\QĀ\E-\QŐ\E]/B8M

/[\QĀ\E-\QŐ\E/B8M

/[\p{L}]/BM

/[\p{L}]/BM

/[\P{L}]/BM

/[\P{L}]/BM

/[abc\p{L}\x{0660}]/8BM

/[\p{Nd}]/8BM

/[\p{Nd}+-]+/8BM

/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8iBM

/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8BM

/[\x{105}-\x{109}]/8iBM

/( ( (?(1)0|) )*   )/xBM

/(  (?(1)0|)*   )/xBM

/[a]/BM

/[a]/8BM

/[\xaa]/BM

/[\xaa]/8BM

/[a]/BM

/[a]/8BM

/[\xaa]/BM

/[\xaa]/8BM

/[\d]/8WB

/[[:alpha:][:cntrl:]]+/8WB

/[[:cntrl:][:alpha:]]+/8WB

/[[:alpha:]]+/8WB

/[[:alpha:]\S]+/8WB

/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/B

/-- End of testinput11 --/
./ ADD NAME=TSTIN14 
/-- This set of tests is run only with the 8-bit library. It starts with all
    the tests of the POSIX interface, because that is supported only with the
    8-bit library. --/

/abc/P
    abc
    *** Failers

/abc|def/P
    abcdef
    abcdef\B

/.*((abc)$|(def))/P
    defabc
    \Zdefabc

/the quick brown fox/P
    the quick brown fox
    *** Failers
    The Quick Brown Fox

/the quick brown fox/Pi
    the quick brown fox
    The Quick Brown Fox

/abc.def/P
    *** Failers
    abc\ndef

/abc$/P
    abc
    abc\n

/(abc)\2/P

/(abc\1)/P
    abc

/a*(b+)(z)(z)/P
    aaaabbbbzzzz
    aaaabbbbzzzz\O0
    aaaabbbbzzzz\O1
    aaaabbbbzzzz\O2
    aaaabbbbzzzz\O3
    aaaabbbbzzzz\O4
    aaaabbbbzzzz\O5

/ab.cd/P
    ab-cd
    ab=cd
    ** Failers
    ab\ncd

/ab.cd/Ps
    ab-cd
    ab=cd
    ab\ncd

/a(b)c/PN
    abc

/a(?P<name>b)c/PN
    abc

/a?|b?/P
    abc
    ** Failers
    ddd\N   

/\w+A/P
   CDAAAAB 

/\w+A/PU
   CDAAAAB 
   
/\Biss\B/I+P
    Mississippi

/abc/\P

/-- End of POSIX tests --/ 

/a\Cb/
    aXb
    a\nb
    ** Failers (too big char) 
    A\x{123}B 
  
/\x{100}/I

/  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                          # optional leading comment
(?:    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
# address
|                     #  or
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)             # one word, optionally followed by....
(?:
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
\(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)       |  # comments, or...

" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
# quoted strings
)*
<  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                     # leading <
(?:  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*

(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  ,  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
)* # further okay, if led by comma
:                                # closing colon
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  )? #       optional route
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
#       address spec
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  > #                  trailing >
# name and address
)  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                       # optional trailing comment
/xSI

/-- Although this saved pattern was compiled with link-size=2, it does no harm
to run this test with other link sizes because it is going to generated a
"compiled in wrong mode" error as soon as it is loaded, so the link size does 
not matter. --/

<!testsaved16

/\h/SI

/\v/SI

/\R/SI

/[\h]/BZ
    >\x09<

/[\h]+/BZ
    >\x09\x20\xa0<

/[\v]/BZ

/[\H]/BZ

/[\h]/BZ

/[\V]/BZ

/[\x0a\V]/BZ

/\777/I

/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/K
    XX
     
/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/K
    XX

/\u0100/<JS>

/[\u0100-\u0200]/<JS>

/-- End of testinput14 --/
./ ADD NAME=TSTIN2 
/-- 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

/abc/I
    abc
    defabc
    \Aabc
    *** Failers
    \Adefabc
    ABC

/abc/I
    abc
    \Aabc
    *** Failers
    defabc
    \Adefabc

/a+bc/I

/a*bc/I

/a{3}bc/I

/(abc|a+z)/I

/abc$/I
    abc
    *** Failers
    def\nabc

/ab\idef/X

/(?X)ab\idef/X

/x{5,4}/

/z{65536}/

/[abcd/

/(?X)[\B]/

/(?X)[\R]/

/(?X)[\X]/

/[\B]/BZ

/[\R]/BZ

/[\X]/BZ

/[z-a]/

/*/

/(abc/

/(?# abc/

/(?z)abc/

/.*b/I

/.*?b/I

/cat|dog|elephant/I
    this sentence eventually mentions a cat
    this sentences rambles on and on for a while and then reaches elephant

/cat|dog|elephant/IS
    this sentence eventually mentions a cat
    this sentences rambles on and on for a while and then reaches elephant

/cat|dog|elephant/IiS
    this sentence eventually mentions a CAT cat
    this sentences rambles on and on for a while to elephant ElePhant

/a|[bcd]/IS

/(a|[\dZ])/IS

/(a|b)*[\s]/IS

/(ab\2)/

/{4,5}abc/

/(a)(b)(c)\2/I
    abcb
    \O0abcb
    \O3abcb
    \O6abcb
    \O9abcb
    \O12abcb

/(a)bc|(a)(b)\2/I
    abc
    \O0abc
    \O3abc
    \O6abc
    aba
    \O0aba
    \O3aba
    \O6aba
    \O9aba
    \O12aba

/abc$/IE
    abc
    *** Failers
    abc\n
    abc\ndef

/(a)(b)(c)(d)(e)\6/

/the quick brown fox/I
    the quick brown fox
    this is a line with the quick brown fox

/the quick brown fox/IA
    the quick brown fox
    *** Failers
    this is a line with the quick brown fox

/ab(?z)cd/

/abc|def/I
    abcdef
    abcdef\B

/.*((abc)$|(def))/I
    defabc
    \Zdefabc

/)/

/a[]b/

/[aeiou ]{3,}/I
    co-processors, and for

/<.*>/I
    abc<def>ghi<klm>nop

/<.*?>/I
    abc<def>ghi<klm>nop

/<.*>/IU
    abc<def>ghi<klm>nop

/(?U)<.*>/I
    abc<def>ghi<klm>nop

/<.*?>/IU
    abc<def>ghi<klm>nop

/={3,}/IU
    abc========def

/(?U)={3,}?/I
    abc========def

/(?<!bar|cattle)foo/I
    foo
    catfoo
    *** Failers
    the barfoo
    and cattlefoo

/(?<=a+)b/

/(?<=aaa|b{0,3})b/

/(?<!(foo)a\1)bar/

/(?i)abc/I

/(a|(?m)a)/I

/(?i)1234/I

/(b|(?i)d)/I

/(?s).*/I

/[abcd]/IS

/(?i)[abcd]/IS

/(?m)[xy]|(b|c)/IS

/(a|b)/Im

/(?i)(a|b)/Im

/(a)(?(1)a|b|c)/

/(?(?=a)a|b|c)/

/(?(1a)/

/(?(1a))/

/(?(?i))/

/(?(abc))/

/(?(?<ab))/

/((?s)blah)\s+\1/I

/((?i)blah)\s+\1/I

/((?i)b)/IDZS

/(a*b|(?i:c*(?-i)d))/IS

/a$/I
    a
    a\n
    *** Failers
    \Za
    \Za\n

/a$/Im
    a
    a\n
    \Za\n
    *** Failers
    \Za

/\Aabc/Im

/abc/Im

/((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/I
  aaaaabbbbbcccccdef

/(?<=foo)[ab]/IS

/(?<!foo)(alpha|omega)/IS

/(?!alphabet)[ab]/IS

/(?<=foo\n)bar/Im
    foo\nbarbar
    ***Failers
    rhubarb
    barbell
    abc\nbarton

/(?<=foo\n)bar/Im
    foo\nbarbar
    ***Failers
    rhubarb
    barbell
    abc\nbarton

/(?>abc)/Im
    abc
    def\nabc
    *** Failers
    defabc

/(?<=ab(c+)d)ef/

/(?<=ab(?<=c+)d)ef/

/(?<=ab(c|de)f)g/

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

/(?<=bullock|donkey)-cart/I
    the bullock-cart
    a donkey-cart race
    *** Failers
    cart
    horse-and-cart

/(?<=ab(?i)x|y|z)/I

/(?>.*)(?<=(abcd)|(xyz))/I
    alphabetabcd
    endingxyz

/(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ/I
    abxyZZ
    abXyZZ
    ZZZ
    zZZ
    bZZ
    BZZ
    *** Failers
    ZZ
    abXYZZ
    zzz
    bzz

/(?<!(foo)a)bar/I
    bar
    foobbar
    *** Failers
    fooabar

/This one is here because Perl 5.005_02 doesn't fail it/I

/(a)?(?(1)a|b)+$/I
    *** Failers
    a

/This one is here because Perl behaves differently; see also the following/I

/(a\1?){4}$/I
    aaaa
    aaaaaa
    
/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/
/a recursive reference to itself. PCRE has now made these into atomic patterns./

/(xa|=?\1a){2}$/
    xa=xaa
    ** Failers
    xa=xaaa

/(xa|=?\1a)+$/
    xa=xaa
    ** Failers
    xa=xaaa

/These are syntax tests from Perl 5.005/I

/a[b-a]/

/a[]b/

/a[/

/*a/

/(*)b/

/abc)/

/(abc/

/a**/

/)(/

/\1/

/\2/

/(a)|\2/

/a[b-a]/Ii

/a[]b/Ii

/a[/Ii

/*a/Ii

/(*)b/Ii

/abc)/Ii

/(abc/Ii

/a**/Ii

/)(/Ii

/:(?:/

/(?<%)b/

/a(?{)b/

/a(?{{})b/

/a(?{}})b/

/a(?{"{"})b/

/a(?{"{"}})b/

/(?(1?)a|b)/

/[a[:xyz:/

/(?<=x+)y/

/a{37,17}/

/abc/\

/abc/\i

/(a)bc(d)/I
    abcd
    abcd\C2
    abcd\C5

/(.{20})/I
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz\C1
    abcdefghijklmnopqrstuvwxyz\G1

/(.{15})/I
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz\C1\G1

/(.{16})/I
    abcdefghijklmnopqrstuvwxyz
    abcdefghijklmnopqrstuvwxyz\C1\G1\L

/(a|(bc))de(f)/I
    adef\G1\G2\G3\G4\L
    bcdef\G1\G2\G3\G4\L
    adefghijk\C0

/abc\00def/I
    abc\00def\L\C0

/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

/.*X/IDZ

/.*X/IDZs

/(.*X|B)/IDZ

/(.*X|B)/IDZs

/(?s)(.*X|B)/IDZ

/(?s:.*X|B)/IDZ

/\Biss\B/I+
    Mississippi

/iss/IG+
    Mississippi

/\Biss\B/IG+
    Mississippi

/\Biss\B/Ig+
    Mississippi
    *** Failers
    Mississippi\A

/(?<=[Ms])iss/Ig+
    Mississippi

/(?<=[Ms])iss/IG+
    Mississippi

/iss/Ig+
    ississippi

/.*iss/Ig+
    abciss\nxyzisspqr

/.i./I+g
    Mississippi
    Mississippi\A
    Missouri river
    Missouri river\A

/.is/I+g
    Mississippi

/ab\n/Ig+
    ab\nab\ncd

/ab\n/Img+
    ab\nab\ncd

/abc/I

/abc|bac/I

/(abc|bac)/I

/(abc|(c|dc))/I

/(abc|(d|de)c)/I

/a*/I

/a+/I

/(baa|a+)/I

/a{0,3}/I

/baa{3,}/I

/"([\\"]+|\\.)*"/I

/(abc|ab[cd])/I

/(a|.)/I

/a|ba|\w/I

/abc(?=pqr)/I

/...(?<=abc)/I

/abc(?!pqr)/I

/ab./I

/ab[xyz]/I

/abc*/I

/ab.c*/I

/a.c*/I

/.c*/I

/ac*/I

/(a.c*|b.c*)/I

/a.c*|aba/I

/.+a/I

/(?=abcda)a.*/I

/(?=a)a.*/I

/a(b)*/I

/a\d*/I

/ab\d*/I

/a(\d)*/I

/abcde{0,0}/I

/ab\d+/I

/a(?(1)b)(.)/I

/a(?(1)bag|big)(.)/I

/a(?(1)bag|big)*(.)/I

/a(?(1)bag|big)+(.)/I

/a(?(1)b..|b..)(.)/I

/ab\d{0}e/I

/a?b?/I
    a
    b
    ab
    \
    *** Failers
    \N

/|-/I
    abcd
    -abc
    \Nab-c
    *** Failers
    \Nabc

/.?abcd/IS

/\(             # ( 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
    (abcd)
    (abcd)xyz
    xyz(abcd)
    (ab(xy)cd)pqr
    (ab(xycd)pqr
    () abc ()
    12(abcde(fsh)xyz(foo(bar))lmno)89
    *** Failers
    abcd
    abcd)
    (abcd

/\(  ( (?>[()]+) | (?R) )* \) /Ixg
    (ab(xy)cd)pqr
    1(abcd)(x(y)z)pqr

/\(  (?: (?>[()]+) | (?R) ) \) /Ix
    (abcd)
    (ab(xy)cd)
    (a(b(c)d)e)
    ((ab))
    *** Failers
    ()

/\(  (?: (?>[()]+) | (?R) )? \) /Ix
    ()
    12(abcde(fsh)xyz(foo(bar))lmno)89

/\(  ( (?>[()]+) | (?R) )* \) /Ix
    (ab(xy)cd)

/\( ( ( (?>[()]+) | (?R) )* ) \) /Ix
    (ab(xy)cd)

/\( (123)? ( ( (?>[()]+) | (?R) )* ) \) /Ix
    (ab(xy)cd)
    (123ab(xy)cd)

/\( ( (123)? ( (?>[()]+) | (?R) )* ) \) /Ix
    (ab(xy)cd)
    (123ab(xy)cd)

/\( (((((((((( ( (?>[()]+) | (?R) )* )))))))))) \) /Ix
    (ab(xy)cd)

/\( ( ( (?>[()<>]+) | ((?>[()]+)) | (?R) )* ) \) /Ix
    (abcd(xyz<p>qrs)123)

/\( ( ( (?>[()]+) | ((?R)) )* ) \) /Ix
    (ab(cd)ef)
    (ab(cd(ef)gh)ij)

/[[:alnum:]]/DZ

/[[:alnum:]]/DZ

/[[:alpha:]]/DZ

/[[:alpha:]]/DZ

/[_[:alpha:]]/IS

/[[:ascii:]]/DZ

/[[:ascii:]]/DZ

/[[:blank:]]/DZ

/[[:blank:]]/DZ

/[\n\x0b\x0c\x0d[:blank:]]/IS

/[[:cntrl:]]/DZ

/[[:digit:]]/DZ

/[[:graph:]]/DZ

/[[:lower:]]/DZ

/[[:print:]]/DZ

/[[:punct:]]/DZ

/[[:space:]]/DZ

/[[:upper:]]/DZ

/[[:xdigit:]]/DZ

/[[:word:]]/DZ

/[[:cntrl:]]/DZ

/[12[:digit:]]/DZ

/[[:blank:]]/DZ

/[01[:alpha:]%]/DZ

/[[.ch.]]/I

/[[=ch=]]/I

/[[:rhubarb:]]/I

/[[:upper:]]/Ii
    A
    a

/[[:lower:]]/Ii
    A
    a

/((?-i)[[:lower:]])[[:lower:]]/Ii
    ab
    aB
    *** Failers
    Ab
    AB

/[\200-\110]/I

/(?(0)f|b)oo/I

/This one's here because of the large output vector needed/I

/(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\d+(?:\s|$))(\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
    \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC

/This one's here because Perl does this differently and PCRE can't at present/I

/(main(O)?)+/I
    mainmain
    mainOmain

/These are all cases where Perl does it differently (nested captures)/I

/(a(b)?)+$/I
    aba

/(aa(bb)?)+$/I
    aabbaa

/(aa|aa(bb))+$/I
    aabbaa

/(aa(bb)??)+$/I
    aabbaa

/(?:aa(bb)?)+$/I
    aabbaa

/(aa(b(b))?)+$/I
    aabbaa

/(?:aa(b(b))?)+$/I
    aabbaa

/(?:aa(b(?:b))?)+$/I
    aabbaa

/(?:aa(bb(?:b))?)+$/I
    aabbbaa

/(?:aa(b(?:bb))?)+$/I
    aabbbaa

/(?:aa(?:b(b))?)+$/I
    aabbaa

/(?:aa(?:b(bb))?)+$/I
    aabbbaa

/(aa(b(bb))?)+$/I
    aabbbaa

/(aa(bb(bb))?)+$/I
    aabbbbaa

/--------------------------------------------------------------------/I

/#/IxDZ

/a#/IxDZ

/[\s]/DZ

/[\S]/DZ

/a(?i)b/DZ
    ab
    aB
    *** Failers
    AB

/(a(?i)b)/DZ
    ab
    aB
    *** Failers
    AB

/   (?i)abc/IxDZ

/#this is a comment
  (?i)abc/IxDZ

/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/DZ

/\Q123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/DZ

/\Q\E/DZ
    \

/\Q\Ex/DZ

/ \Q\E/DZ

/a\Q\E/DZ
  abc
  bca
  bac

/a\Q\Eb/DZ
  abc

/\Q\Eabc/DZ

/x*+\w/DZ
    *** Failers
    xxxxx

/x?+/DZ

/x++/DZ

/x{1,3}+/DZ

/(x)*+/DZ

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

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

/a++b/I
    aaab

/(a++b)/I
    aaab

/(a++)b/I
    aaab

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

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

/(abc){1,3}+/DZ

/a+?+/I

/a{2,3}?+b/I

/(?U)a+?+/I

/a{2,3}?+b/IU

/x(?U)a++b/DZ
    xaaaab

/(?U)xa++b/DZ
    xaaaab

/((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/DZ

/x(?U)a+b/DZ

/x(?U)(a+)b/DZ

/[.x.]/I

/[=x=]/I

/[:x:]/I

/\l/I

/\L/I

/\N{name}/I

/\u/I

/\U/I

/[/I

/[a-/I

/[[:space:]/I

/[\s]/IDZ

/[[:space:]]/IDZ

/[[:space:]abcde]/IDZ

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

|8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|IDZ

|\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|IDZ

/(.*)\d+\1/I

/(.*)\d+/I

/(.*)\d+\1/Is

/(.*)\d+/Is

/(.*(xyz))\d+\2/I

/((.*))\d+\1/I
    abc123bc

/a[b]/I

/(?=a).*/I

/(?=abc).xyz/IiI

/(?=abc)(?i).xyz/I

/(?=a)(?=b)/I

/(?=.)a/I

/((?=abcda)a)/I

/((?=abcda)ab)/I

/()a/I

/(?(1)ab|ac)(.)/I

/(?(1)abz|acz)(.)/I

/(?(1)abz)(.)/I

/(?(1)abz)(1)23/I

/(a)+/I

/(a){2,3}/I

/(a)*/I

/[a]/I

/[ab]/I

/[ab]/IS

/[a]/I

/\d456/I

/\d456/IS

/ab/I

/a/Im
  abcde
  xy\nabc
  *** Failers
  xyabc

/c|abc/I

/(?i)[ab]/IS

/[ab](?i)cd/IS

/abc(?C)def/I
    abcdef
    1234abcdef
    *** Failers
    abcxyz
    abcxyzf

/abc(?C)de(?C1)f/I
    123abcdef

/(?C1)\dabc(?C2)def/IS
    1234abcdef
    *** Failers
    abcdef

/(?C1)\dabc(?C2)def/ISS
    1234abcdef
    *** Failers
    abcdef

/(?C255)ab/I

/(?C256)ab/I

/(?Cab)xx/I

/(?C12vr)x/I

/abc(?C)def/I
    *** Failers
    \x83\x0\x61bcdef

/(abc)(?C)de(?C1)f/I
    123abcdef
    123abcdef\C+
    123abcdef\C-
    *** Failers
    123abcdef\C!1

/(?C0)(abc(?C1))*/I
    abcabcabc
    abcabc\C!1!3
    *** Failers
    abcabcabc\C!1!3

/(\d{3}(?C))*/I
    123\C+
    123456\C+
    123456789\C+

/((xyz)(?C)p|(?C1)xyzabc)/I
    xyzabc\C+

/(X)((xyz)(?C)p|(?C1)xyzabc)/I
    Xxyzabc\C+

/(?=(abc))(?C)abcdef/I
    abcdef\C+

/(?!(abc)(?C1)d)(?C2)abcxyz/I
    abcxyz\C+

/(?<=(abc)(?C))xyz/I
   abcxyz\C+

/a(b+)(c*)(?C1)/I
    abbbbbccc\C*1

/a(b+?)(c*?)(?C1)/I
    abbbbbccc\C*1

/(?C)abc/I

/(?C)abc/I

/(?C)a|b/IS

/(?R)/I

/(a|(?R))/I

/(ab|(bc|(de|(?R))))/I

/x(ab|(bc|(de|(?R))))/I
    xab
    xbc
    xde
    xxab
    xxxab
    *** Failers
    xyab

/(ab|(bc|(de|(?1))))/I

/x(ab|(bc|(de|(?1)x)x)x)/I

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

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

/(a(?1)b)/DZ

/(a(?1)+b)/DZ

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

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

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

/(?1)/I

/((?2)(abc)/I

/(abc)def(?1)/I
    abcdefabc

/(a|b|c)=(?1)+/I
    a=a
    a=b
    a=bc

/(a|b|c)=((?1))+/I
    a=a
    a=b
    a=bc

/a(?P<name1>b|c)d(?P<longername2>e)/DZ
    abde
    acde

/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/DZ

/(?P<a>a)...(?P=a)bbb(?P>a)d/DZ

/\W*(?:(?P<one>(?P<two>.)\W*(?P>one)\W*(?P=two)|)|(?P<three>(?P<four>.)\W*(?P>three)\W*(?P=four)|\W*.\W*))\W*$/Ii
    1221
    Satan, oscillate my metallic sonatas!
    A man, a plan, a canal: Panama!
    Able was I ere I saw Elba.
    *** Failers
    The quick brown fox

/((?(R)a|b))\1(?1)?/I
  bb
  bbaa

/(.*)a/Is

/(.*)a\1/Is

/(.*)a(b)\2/Is

/((.*)a|(.*)b)z/Is

/((.*)a|(.*)b)z\1/Is

/((.*)a|(.*)b)z\2/Is

/((.*)a|(.*)b)z\3/Is

/((.*)a|(.*)b)z\3/Is

/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a/Is

/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\31/Is

/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\32/Is

/(a)(bc)/INDZ
  abc

/(?P<one>a)(bc)/INDZ
  abc

/(a)(?P<named>bc)/INDZ

/(a+)*zz/I
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\M
  aaaaaaaaaaaaaz\M

/(aaa(?C1)bbb|ab)/I
   aaabbb
   aaabbb\C*0
   aaabbb\C*1
   aaabbb\C*-1

/ab(?P<one>cd)ef(?P<two>gh)/I
    abcdefgh
    abcdefgh\C1\Gtwo
    abcdefgh\Cone\Ctwo
    abcdefgh\Cthree

/(?P<Tes>)(?P<Test>)/DZ

/(?P<Test>)(?P<Tes>)/DZ

/(?P<Z>zz)(?P<A>aa)/I
    zzaa\CZ
    zzaa\CA

/(?P<x>eks)(?P<x>eccs)/I

/(?P<abc>abc(?P<def>def)(?P<abc>xyz))/I

"\[((?P<elem>\d+)(,(?P>elem))*)\]"I
    [10,20,30,5,5,4,4,2,43,23,4234]
    *** Failers
    []

"\[((?P<elem>\d+)(,(?P>elem))*)?\]"I
    [10,20,30,5,5,4,4,2,43,23,4234]
    []

/(a(b(?2)c))?/DZ

/(a(b(?2)c))*/DZ

/(a(b(?2)c)){0,2}/DZ

/[ab]{1}+/DZ

/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/Ii
     Baby Bjorn Active Carrier - With free SHIPPING!!

/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/IiS
     Baby Bjorn Active Carrier - With free SHIPPING!!

/a*.*b/ISDZ

/(a|b)*.?c/ISDZ

/abc(?C255)de(?C)f/DZ

/abcde/ICDZ
  abcde
  abcdfe

/a*b/ICDZS
  ab
  aaaab
  aaaacb

/a*b/ICDZSS
  ab
  aaaab
  aaaacb

/a+b/ICDZ
  ab
  aaaab
  aaaacb

/(abc|def)x/ICDZS
  abcx
  defx
  ** Failers 
  abcdefzx

/(abc|def)x/ICDZSS
  abcx
  defx
  ** Failers 
  abcdefzx

/(ab|cd){3,4}/IC
  ababab
  abcdabcd
  abcdcdcdcdcd

/([ab]{,4}c|xy)/ICDZS
    Note: that { does NOT introduce a quantifier

/([ab]{,4}c|xy)/ICDZSS
    Note: that { does NOT introduce a quantifier

/([ab]{1,4}c|xy){4,5}?123/ICDZ
    aacaacaacaacaac123

/\b.*/I
  ab cd\>1

/\b.*/Is
  ab cd\>1

/(?!.bcd).*/I
  Xbcd12345

/abcde/I
    ab\P
    abc\P
    abcd\P
    abcde\P
    the quick brown abc\P
    ** Failers\P
    the quick brown abxyz fox\P

"(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\d\d$"I
    13/05/04\P
    13/5/2004\P
    02/05/09\P
    1\P
    1/2\P
    1/2/0\P
    1/2/04\P
    0\P
    02/\P
    02/0\P
    02/1\P
    ** Failers\P
    \P
    123\P
    33/4/04\P
    3/13/04\P
    0/1/2003\P
    0/\P
    02/0/\P
    02/13\P

/0{0,2}ABC/I

/\d{3,}ABC/I

/\d*ABC/I

/[abc]+DE/I

/[abc]?123/I
    123\P
    a\P
    b\P
    c\P
    c12\P
    c123\P

/(?:\d){3,5}X/I
    1\P
    123\P
    123X
    1234\P
    1234X
    12345\P
    12345X
    *** Failers
    1X
    123456\P

/abc/IS>testsavedregex
<testsavedregex
    abc
    ** Failers
    bca

/abc/ISS>testsavedregex
<testsavedregex
    abc
    ** Failers
    bca

/abc/IFS>testsavedregex
<testsavedregex
    abc
    ** Failers
    bca

/abc/IFSS>testsavedregex
<testsavedregex
    abc
    ** Failers
    bca

/(a|b)/IS>testsavedregex
<testsavedregex
    abc
    ** Failers
    def

/(a|b)/ISS>testsavedregex
<testsavedregex
    abc
    ** Failers
    def

/(a|b)/ISF>testsavedregex
<testsavedregex
    abc
    ** Failers
    def

/(a|b)/ISSF>testsavedregex
<testsavedregex
    abc
    ** Failers
    def

~<(\w+)/?>(.)*</(\1)>~smgI
    \J1024<!DOCTYPE seite SYSTEM "http://www.lco.lineas.de/xmlCms.dtd">\n<seite>\n<dokumenteninformation>\n<seitentitel>Partner der LCO</seitentitel>\n<sprache>de</sprache>\n<seitenbeschreibung>Partner der LINEAS Consulting\nGmbH</seitenbeschreibung>\n<schluesselworte>LINEAS Consulting GmbH Hamburg\nPartnerfirmen</schluesselworte>\n<revisit>30 days</revisit>\n<robots>index,follow</robots>\n<menueinformation>\n<aktiv>ja</aktiv>\n<menueposition>3</menueposition>\n<menuetext>Partner</menuetext>\n</menueinformation>\n<lastedited>\n<autor>LCO</autor>\n<firma>LINEAS Consulting</firma>\n<datum>15.10.2003</datum>\n</lastedited>\n</dokumenteninformation>\n<inhalt>\n\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\nGmbH</absatzueberschrift>\n\n<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\n<bild name="logo_ca.gif" rahmen="no"/></link> <link\nziel="http://www.ey.com/" zielfenster="_blank"><bild\nname="logo_euy.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\n<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\n\n<absatz><link ziel="http://www.atelion.de/"\nzielfenster="_blank"><bild\nname="logo_atelion.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.line-information.de/"\nzielfenster="_blank">\n<bild name="logo_line_information.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\n\n<absatz><link ziel="http://www.incognis.de/"\nzielfenster="_blank"><bild\nname="logo_incognis.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.addcraft.com/"\nzielfenster="_blank"><bild\nname="logo_addcraft.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.comendo.com/"\nzielfenster="_blank"><bild\nname="logo_comendo.gif" rahmen="no"/></link></absatz>\n\n</inhalt>\n</seite>

/a/IF

/line\nbreak/I
    this is a line\nbreak
    line one\nthis is a line\nbreak in the second line

/line\nbreak/If
    this is a line\nbreak
    ** Failers
    line one\nthis is a line\nbreak in the second line

/line\nbreak/Imf
    this is a line\nbreak
    ** Failers
    line one\nthis is a line\nbreak in the second line

/(?i)(?-i)AbCd/I
    AbCd
    ** Failers
    abcd

/a{11111111111111111111}/I

/(){64294967295}/I

/(){2,4294967295}/I

"(?i:a)(?i:b)(?i:c)(?i:d)(?i:e)(?i:f)(?i:g)(?i:h)(?i:i)(?i:j)(k)(?i:l)A\1B"I
    abcdefghijklAkB

"(?P<n0>a)(?P<n1>b)(?P<n2>c)(?P<n3>d)(?P<n4>e)(?P<n5>f)(?P<n6>g)(?P<n7>h)(?P<n8>i)(?P<n9>j)(?P<n10>k)(?P<n11>l)A\11B"I
    abcdefghijklAkB

"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)A\11B"I
    abcdefghijklAkB

"(?P<name0>a)(?P<name1>a)(?P<name2>a)(?P<name3>a)(?P<name4>a)(?P<name5>a)(?P<name6>a)(?P<name7>a)(?P<name8>a)(?P<name9>a)(?P<name10>a)(?P<name11>a)(?P<name12>a)(?P<name13>a)(?P<name14>a)(?P<name15>a)(?P<name16>a)(?P<name17>a)(?P<name18>a)(?P<name19>a)(?P<name20>a)(?P<name21>a)(?P<name22>a)(?P<name23>a)(?P<name24>a)(?P<name25>a)(?P<name26>a)(?P<name27>a)(?P<name28>a)(?P<name29>a)(?P<name30>a)(?P<name31>a)(?P<name32>a)(?P<name33>a)(?P<name34>a)(?P<name35>a)(?P<name36>a)(?P<name37>a)(?P<name38>a)(?P<name39>a)(?P<name40>a)(?P<name41>a)(?P<name42>a)(?P<name43>a)(?P<name44>a)(?P<name45>a)(?P<name46>a)(?P<name47>a)(?P<name48>a)(?P<name49>a)(?P<name50>a)(?P<name51>a)(?P<name52>a)(?P<name53>a)(?P<name54>a)(?P<name55>a)(?P<name56>a)(?P<name57>a)(?P<name58>a)(?P<name59>a)(?P<name60>a)(?P<name61>a)(?P<name62>a)(?P<name63>a)(?P<name64>a)(?P<name65>a)(?P<name66>a)(?P<name67>a)(?P<name68>a)(?P<name69>a)(?P<name70>a)(?P<name71>a)(?P<name72>a)(?P<name73>a)(?P<name74>a)(?P<name75>a)(?P<name76>a)(?P<name77>a)(?P<name78>a)(?P<name79>a)(?P<name80>a)(?P<name81>a)(?P<name82>a)(?P<name83>a)(?P<name84>a)(?P<name85>a)(?P<name86>a)(?P<name87>a)(?P<name88>a)(?P<name89>a)(?P<name90>a)(?P<name91>a)(?P<name92>a)(?P<name93>a)(?P<name94>a)(?P<name95>a)(?P<name96>a)(?P<name97>a)(?P<name98>a)(?P<name99>a)(?P<name100>a)"I
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

"(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)"I
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

/[()]*(?:\((?R)\)[()]*)*/I
    (this(and)that
    (this(and)that)
    (this(and)that)stuff

/[()]*(?:\((?>(?R))\)[()]*)*/I
    (this(and)that
    (this(and)that)

/[()]*(?:\((?R)\))*[()]*/I
    (this(and)that
    (this(and)that)

/(?:\((?R)\))*[()]*/I
    (this(and)that
    (this(and)that)
    ((this))

/(?:\((?R)\))|[()]*/I
    (this(and)that
    (this(and)that)
    (this)
    ((this))

/\x{0000ff}/I

/((?P<A>a1)|(?P<A>a2)b)/I

/((?P<A>a1)|(?P<A>a2)b)/IJ
    a1b\CA
    a2b\CA
    ** Failers
    a1b\CZ\CA

/(?P<A>a)(?P<A>b)/IJ
    ab\CA

/(?P<A>a)(?P<A>b)|cd/IJ
    ab\CA
    cd\CA

/(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/IJ
    cdefgh\CA

/((?P<A>a1)|(?P<A>a2)b)/IJ
    a1b\GA
    a2b\GA
    ** Failers
    a1b\GZ\GA

/(?P<A>a)(?P<A>b)/IJ
    ab\GA

/(?P<A>a)(?P<A>b)|cd/IJ
    ab\GA
    cd\GA

/(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/IJ
    cdefgh\GA

/(?J)((?P<A>a1)|(?P<A>a2)b)/I
    a1b\CA
    a2b\CA

/(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<A>d)/I

/ In this next test, J is not set at the outer level; consequently it isn't
set in the pattern's options; consequently pcre_get_named_substring() produces
a random value. /Ix

/(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<C>d)/I
    a bc d\CA\CB\CC

/(?P<A>a)?(?(A)a|b)/I
    aabc
    bc
    ** Failers
    abc

/(?:(?(ZZ)a|b)(?P<ZZ>X))+/I
    bXaX

/(?:(?(2y)a|b)(X))+/I

/(?:(?(ZA)a|b)(?P<ZZ>X))+/I

/(?:(?(ZZ)a|b)(?(ZZ)a|b)(?P<ZZ>X))+/I
    bbXaaX

/(?:(?(ZZ)a|\(b\))\\(?P<ZZ>X))+/I
    (b)\\Xa\\X

/(?P<ABC/I

/(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I
    bXXaYYaY
    bXYaXXaX

/()()()()()()()()()(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I
    bXXaYYaY

/\s*,\s*/IS
    \x0b,\x0b
    \x0c,\x0d

/abc/Im
    xyz\nabc
    xyz\nabc\<lf>
    xyz\r\nabc\<lf>
    xyz\rabc\<cr>
    xyz\r\nabc\<crlf>
    ** Failers
    xyz\nabc\<cr>
    xyz\r\nabc\<cr>
    xyz\nabc\<crlf>
    xyz\rabc\<crlf>
    xyz\rabc\<lf>

/abc$/Im<lf>
    xyzabc
    xyzabc\n
    xyzabc\npqr
    xyzabc\r\<cr>
    xyzabc\rpqr\<cr>
    xyzabc\r\n\<crlf>
    xyzabc\r\npqr\<crlf>
    ** Failers
    xyzabc\r
    xyzabc\rpqr
    xyzabc\r\n
    xyzabc\r\npqr

/abc/Im<cr>
    xyz\rabcdef
    xyz\nabcdef\<lf>
    ** Failers
    xyz\nabcdef

/abc/Im<lf>
    xyz\nabcdef
    xyz\rabcdef\<cr>
    ** Failers
    xyz\rabcdef

/abc/Im<crlf>
    xyz\r\nabcdef
    xyz\rabcdef\<cr>
    ** Failers
    xyz\rabcdef

/abc/Im<bad>

/abc/I
    xyz\rabc\<bad>
    abc

/.*/I<lf>
    abc\ndef
    abc\rdef
    abc\r\ndef
    \<cr>abc\ndef
    \<cr>abc\rdef
    \<cr>abc\r\ndef
    \<crlf>abc\ndef
    \<crlf>abc\rdef
    \<crlf>abc\r\ndef

/\w+(.)(.)?def/Is
    abc\ndef
    abc\rdef
    abc\r\ndef

+((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)+I
   /* this is a C style comment */\M

/(?P<B>25[0-5]|2[0-4]\d|[01]?\d?\d)(?:\.(?P>B)){3}/I

/()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 (.(.))/Ix
    XY\O400

/(a*b|(?i:c*(?-i)d))/IS

/()[ab]xyz/IS

/(|)[ab]xyz/IS

/(|c)[ab]xyz/IS

/(|c?)[ab]xyz/IS

/(d?|c?)[ab]xyz/IS

/(d?|c)[ab]xyz/IS

/a*b\d/DZ

/a*+b\d/DZ

/a*?b\d/DZ

/a+A\d/DZ
    aaaA5
    ** Failers
    aaaa5

/a*A\d/IiDZ
    aaaA5
    aaaa5

/(a*|b*)[cd]/IS

/(a+|b*)[cd]/IS

/(a*|b+)[cd]/IS

/(a+|b+)[cd]/IS

/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
 (((
 a
 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
 )))
/Ix
  large nest

/a*\d/BZ

/a*\D/BZ

/0*\d/BZ

/0*\D/BZ

/a*\s/BZ

/a*\S/BZ

/ *\s/BZ

/ *\S/BZ

/a*\w/BZ

/a*\W/BZ

/=*\w/BZ

/=*\W/BZ

/\d*a/BZ

/\d*2/BZ

/\d*\d/BZ

/\d*\D/BZ

/\d*\s/BZ

/\d*\S/BZ

/\d*\w/BZ

/\d*\W/BZ

/\D*a/BZ

/\D*2/BZ

/\D*\d/BZ

/\D*\D/BZ

/\D*\s/BZ

/\D*\S/BZ

/\D*\w/BZ

/\D*\W/BZ

/\s*a/BZ

/\s*2/BZ

/\s*\d/BZ

/\s*\D/BZ

/\s*\s/BZ

/\s*\S/BZ

/\s*\w/BZ

/\s*\W/BZ

/\S*a/BZ

/\S*2/BZ

/\S*\d/BZ

/\S*\D/BZ

/\S*\s/BZ

/\S*\S/BZ

/\S*\w/BZ

/\S*\W/BZ

/\w*a/BZ

/\w*2/BZ

/\w*\d/BZ

/\w*\D/BZ

/\w*\s/BZ

/\w*\S/BZ

/\w*\w/BZ

/\w*\W/BZ

/\W*a/BZ

/\W*2/BZ

/\W*\d/BZ

/\W*\D/BZ

/\W*\s/BZ

/\W*\S/BZ

/\W*\w/BZ

/\W*\W/BZ

/[a]+a/BZ

/[a]+a/BZi

/[a]+A/BZi

/[a]+b/BZ

/[a]+\d/BZ

/a*[a]/BZ

/(?P<abc>x)(?P<xyz>y)/I
    xy\Cabc\Cxyz

/(?<abc>x)(?'xyz'y)/I
    xy\Cabc\Cxyz

/(?<abc'x)(?'xyz'y)/I

/(?<abc>x)(?'xyz>y)/I

/(?P'abc'x)(?P<xyz>y)/I

/(?:(?(ZZ)a|b)(?<ZZ>X))+/
    bXaX
    bXbX
    ** Failers
    aXaX
    aXbX

/(?P>abc)(?<abcd>xxx)/

/(?P>abc)(?<abc>x|y)/
    xx
    xy
    yy
    yx

/(?P>abc)(?P<abc>x|y)/
    xx
    xy
    yy
    yx

/((?(abc)a|b)(?<abc>x|y))+/
    bxay
    bxby
    ** Failers
    axby

/(((?P=abc)|X)(?<abc>x|y))+/
    XxXxxx
    XxXyyx
    XxXyxx
    ** Failers
    x

/(?1)(abc)/
    abcabc

/(?:(?:\1|X)(a|b))+/
    Xaaa
    Xaba

/[\E\Qa\E-\Qz\E]+/BZ

/[a\Q]bc\E]/BZ

/[a-\Q\E]/BZ

/(?P>abc)[()](?<abc>)/BZ

/((?(abc)y)[()](?P<abc>x))+/BZ
    (xy)x

/(?P>abc)\Q()\E(?<abc>)/BZ

/(?P>abc)[a\Q(]\E(](?<abc>)/BZ

/(?P>abc) # this is (a comment)
  (?<abc>)/BZx

/\W*(?:(?<one>(?<two>.)\W*(?&one)\W*\k<two>|)|(?<three>(?<four>.)\W*(?&three)\W*\k'four'|\W*.\W*))\W*$/Ii
    1221
    Satan, oscillate my metallic sonatas!
    A man, a plan, a canal: Panama!
    Able was I ere I saw Elba.
    *** Failers
    The quick brown fox

/(?=(\w+))\1:/I
    abcd:

/(?=(?'abc'\w+))\k<abc>:/I
    abcd:

/(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/J
    adaa
    ** Failers
    addd
    adbb

/(?'abc'a|b)(?<abc>d|e)(?&abc){2}/J
    bdaa
    bdab
    ** Failers
    bddd

/(?(<bc))/

/(?(''))/

/(?('R')stuff)/

/((abc (?(R) (?(R1)1) (?(R2)2) X  |  (?1)  (?2)   (?R) ))) /x
    abcabc1Xabc2XabcXabcabc

/(?<A> (?'B' abc (?(R) (?(R&A)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x
    abcabc1Xabc2XabcXabcabc

/(?<A> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x

/(?<1> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x
    abcabc1Xabc2XabcXabcabc

/(?(DEFINE) abc | xyz ) /x

/(?(DEFINE) abc) xyz/xI

/(a|)*\d/
  \O0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  \O0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/a.b/<lf>
    a\rb
    a\nb\<cr>
    a\x85b\<anycrlf> 
    ** Failers
    a\nb
    a\nb\<any>
    a\rb\<cr>
    a\rb\<any>
    a\x85b\<any> 
    a\rb\<anycrlf>

/abc./mgx<any>
    abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK

/abc.$/mgx<any>
    abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7 abc9

/a/<cr><any>

/a/<any><crlf>

/a\Rb/<bsr_unicode>
    a\nb
    a\rb
    a\r\nb
    a\x0bb
    a\x0cb
    a\x85b
    ** Failers
    a\n\rb

/a\R*b/<bsr_unicode>
    ab
    a\nb
    a\rb
    a\r\nb
    a\x0bb
    a\x0cb
    a\x85b
    a\n\rb
    a\n\r\x85\x0cb

/a\R+b/<bsr_unicode>
    a\nb
    a\rb
    a\r\nb
    a\x0bb
    a\x0cb
    a\x85b
    a\n\rb
    a\n\r\x85\x0cb
    ** Failers
    ab

/a\R{1,3}b/<bsr_unicode>
    a\nb
    a\n\rb
    a\n\r\x85b
    a\r\n\r\nb
    a\r\n\r\n\r\nb
    a\n\r\n\rb
    a\n\n\r\nb
    ** Failers
    a\n\n\n\rb
    a\r

/a[\R]b/<bsr_unicode>
    aRb
    ** Failers
    a\nb

/(?&abc)X(?<abc>P)/I
    abcPXP123

/(?1)X(?<abc>P)/I
    abcPXP123

/(?:a(?&abc)b)*(?<abc>x)/
    123axbaxbaxbx456
    123axbaxbaxb456

/(?:a(?&abc)b){1,5}(?<abc>x)/
    123axbaxbaxbx456

/(?:a(?&abc)b){2,5}(?<abc>x)/
    123axbaxbaxbx456

/(?:a(?&abc)b){2,}(?<abc>x)/
    123axbaxbaxbx456

/(abc)(?i:(?1))/
   defabcabcxyz
   DEFabcABCXYZ

/(abc)(?:(?i)(?1))/
   defabcabcxyz
   DEFabcABCXYZ

/(a)\g-2/

/(a)\g/

/(a)\g{0}/

/(a)\g{3/

/(a)\g{4a}/

/a.b/<lf>
    a\rb
    *** Failers
    a\nb

/.+foo/
    afoo
    ** Failers
    \r\nfoo
    \nfoo

/.+foo/<crlf>
    afoo
    \nfoo
    ** Failers
    \r\nfoo

/.+foo/<any>
    afoo
    ** Failers
    \nfoo
    \r\nfoo

/.+foo/s
    afoo
    \r\nfoo
    \nfoo
    
/$/mg<any>
    abc\r\rxyz
    abc\n\rxyz  
    ** Failers 
    abc\r\nxyz

/(?m)$/<any>g+
    abc\r\n\r\n

/(?m)$|\r\n/<any>g+ 
    abc\r\n\r\n
    
/(?m)$/<any>g+ 
    abc\r\n\r\n

/abc.$/mgx<anycrlf>
    abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9

/X/m
    XABC
    ** Failers 
    XABC\B

/(ab|c)(?-1)/BZ
    abc

/xy(?+1)(abc)/BZ
    xyabcabc
    ** Failers
    xyabc  
    
/x(?-0)y/

/x(?-1)y/

/x(?+0)y/ 

/x(?+1)y/

/(abc)?(?(-1)X|Y)/BZ
    abcX
    Y
    ** Failers
    abcY   
    
/((?(+1)X|Y)(abc))+/BZ 
    YabcXabc
    YabcXabcXabc
    ** Failers
    XabcXabc  

/(?(-1)a)/BZ

/((?(-1)a))/BZ

/((?(-2)a))/BZ

/(?(+1)X|Y)(.)/BZ
    Y!

/(?<A>tom|bon)-\k{A}/
    tom-tom
    bon-bon 
    ** Failers
    tom-bon  

/\g{A/ 

/(?|(abc)|(xyz))/BZ
   >abc<
   >xyz< 

/(x)(?|(abc)|(xyz))(x)/BZ
    xabcx
    xxyzx 

/(x)(?|(abc)(pqr)|(xyz))(x)/BZ
    xabcpqrx
    xxyzx 

/\H++X/BZ
    ** Failers
    XXXX
    
/\H+\hY/BZ
    XXXX Y 

/\H+ Y/BZ

/\h+A/BZ

/\v*B/BZ

/\V+\x0a/BZ

/A+\h/BZ

/ *\H/BZ

/A*\v/BZ

/\x0b*\V/BZ

/\d+\h/BZ

/\d*\v/BZ

/S+\h\S+\v/BZ

/\w{3,}\h\w+\v/BZ

/\h+\d\h+\w\h+\S\h+\H/BZ

/\v+\d\v+\w\v+\S\v+\V/BZ

/\H+\h\H+\d/BZ

/\V+\v\V+\w/BZ

/\( (?: [()]* | (?R) )* \)/x
\J1024(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)

/[\E]AAA/

/[\Q\E]AAA/

/[\E]AAA/

/[\Q\E]AAA/

/[\E]AAA/

/[\Q\E]AAA/

/A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/BZ

/a+(*FAIL)/C
    aaaaaa
    
/a+b?c+(*FAIL)/C
    aaabccc

/a+b?(*PRUNE)c+(*FAIL)/C
    aaabccc

/a+b?(*COMMIT)c+(*FAIL)/C
    aaabccc
    
/a+b?(*SKIP)c+(*FAIL)/C
    aaabcccaaabccc

/a+b?(*THEN)c+(*FAIL)/C
    aaabccc
    
/a(*MARK)b/ 

/(?i:A{1,}\6666666666)/

/\g6666666666/

/[\g6666666666]/BZ

/(?1)\c[/

/.+A/<crlf>
    \r\nA
    
/\nA/<crlf>
    \r\nA 

/[\r\n]A/<crlf>
    \r\nA 

/(\r|\n)A/<crlf>
    \r\nA 

/a(*CR)b/

/(*CR)a.b/
    a\nb
    ** Failers
    a\rb  

/(*CR)a.b/<lf>
    a\nb
    ** Failers
    a\rb  

/(*LF)a.b/<CRLF>
    a\rb
    ** Failers
    a\nb  

/(*CRLF)a.b/
    a\rb
    a\nb  
    ** Failers
    a\r\nb  

/(*ANYCRLF)a.b/<CR>
    ** Failers
    a\rb
    a\nb  
    a\r\nb  

/(*ANY)a.b/<cr>
    ** Failers
    a\rb
    a\nb  
    a\r\nb  
    a\x85b 
    
/(*ANY).*/g
    abc\r\ndef

/(*ANYCRLF).*/g
    abc\r\ndef

/(*CRLF).*/g
    abc\r\ndef

/a\Rb/I<bsr_anycrlf>
    a\rb
    a\nb
    a\r\nb
    ** Failers
    a\x85b
    a\x0bb     

/a\Rb/I<bsr_unicode>
    a\rb
    a\nb
    a\r\nb
    a\x85b
    a\x0bb     
    ** Failers 
    a\x85b\<bsr_anycrlf>
    a\x0bb\<bsr_anycrlf>
    
/a\R?b/I<bsr_anycrlf>
    a\rb
    a\nb
    a\r\nb
    ** Failers
    a\x85b
    a\x0bb     

/a\R?b/I<bsr_unicode>
    a\rb
    a\nb
    a\r\nb
    a\x85b
    a\x0bb     
    ** Failers 
    a\x85b\<bsr_anycrlf>
    a\x0bb\<bsr_anycrlf>
    
/a\R{2,4}b/I<bsr_anycrlf>
    a\r\n\nb
    a\n\r\rb
    a\r\n\r\n\r\n\r\nb
    ** Failers
    a\x85\85b
    a\x0b\0bb     

/a\R{2,4}b/I<bsr_unicode>
    a\r\rb
    a\n\n\nb
    a\r\n\n\r\rb
    a\x85\85b
    a\x0b\0bb     
    ** Failers 
    a\r\r\r\r\rb 
    a\x85\85b\<bsr_anycrlf>
    a\x0b\0bb\<bsr_anycrlf>
 
/(*BSR_ANYCRLF)a\Rb/I
    a\nb
    a\rb 

/(*BSR_UNICODE)a\Rb/I
    a\x85b

/(*BSR_ANYCRLF)(*CRLF)a\Rb/I
    a\nb
    a\rb 

/(*CRLF)(*BSR_UNICODE)a\Rb/I
    a\x85b

/(*CRLF)(*BSR_ANYCRLF)(*CR)ab/I

/(?<a>)(?&)/

/(?<abc>)(?&a)/

/(?<a>)(?&aaaaaaaaaaaaaaaaaaaaaaa)/

/(?+-a)/

/(?-+a)/

/(?(-1))/

/(?(+10))/

/(?(10))/

/(?(+2))()()/

/(?(2))()()/

/\k''/

/\k<>/

/\k{}/

/\k/

/\kabc/

/(?P=)/

/(?P>)/

/(?!\w)(?R)/

/(?=\w)(?R)/

/(?<!\w)(?R)/

/(?<=\w)(?R)/

/[[:foo:]]/

/[[:1234:]]/

/[[:f\oo:]]/

/[[: :]]/

/[[:...:]]/

/[[:l\ower:]]/

/[[:abc\:]]/

/[abc[:x\]pqr:]]/

/[[:a\dz:]]/

/((a|b\g<-1'c))/

/(?+1)(?<a>x|y){0}z/
    xzxx
    yzyy 
    ** Failers
    xxz  

/(\3)(\1)(a)/
    cat

/(\3)(\1)(a)/<JS>
    cat
    
/TA]/
    The ACTA] comes 

/TA]/<JS>
    The ACTA] comes 

/(?2)[]a()b](abc)/
    abcbabc

/(?2)[]a()b](abc)/
    abcbabc

/(?1)[]a()b](abc)/
    abcbabc
    ** Failers 
    abcXabc

/(?1)[]a()b](abc)/
    abcXabc
    ** Failers 
    abcbabc

/(?2)[]a()b](abc)(xyz)/
    xyzbabcxyz

/(?&N)[]a(?<N>)](?<M>abc)/
   abc<abc

/(?&N)[]a(?<N>)](abc)/
   abc<abc

/a[]b/

/a[]b/

/a[]b/<JS>
    ** Failers
    ab

/a[]+b/<JS>
    ** Failers
    ab 

/a[]*+b/<JS>
    ** Failers
    ab 

/a[]b/<JS>
    aXb
    a\nb 
    ** Failers
    ab  
    
/a[]+b/<JS> 
    aXb
    a\nX\nXb 
    ** Failers
    ab  

/a(?!)+b/

/a(*FAIL)+b/

/(abc|pqr|123){0}[xyz]/SI

/(?(?=.*b)b|)/CI
   adc
   abc 
   
/(?(?=b).*b|d)/I

/(?(?=.*b).*b|d)/I

/xyz/C
  xyz 
  abcxyz 
  abcxyz\Y
  ** Failers 
  abc
  abc\Y
  abcxypqr  
  abcxypqr\Y  
  
/(*NO_START_OPT)xyz/C
  abcxyz 

/xyz/CY
  abcxyz 

/"((?(?=[a])["])|b)*"$/C
    "ab"

/"((?(?=[a])["])|b)*"$/
    "ab"

/X(?5)(a)(?|(b)|(q))(c)(d)Y/
    XYabcdY

/X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/
    XYabcdY
 
/Xa{2,4}b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/Xa{2,4}?b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/Xa{2,4}+b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/X\d{2,4}b/
    X\P
    X3\P
    X33\P 
    X333\P
    X3333\P 
    
/X\d{2,4}?b/
    X\P
    X3\P
    X33\P 
    X333\P
    X3333\P 
    
/X\d{2,4}+b/
    X\P
    X3\P
    X33\P 
    X333\P
    X3333\P 
    
/X\D{2,4}b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/X\D{2,4}?b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/X\D{2,4}+b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/X[abc]{2,4}b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/X[abc]{2,4}?b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/X[abc]{2,4}+b/
    X\P
    Xa\P
    Xaa\P 
    Xaaa\P
    Xaaaa\P 
    
/X[a]{2,4}b/
    X\P
    Xz\P
    Xzz\P 
    Xzzz\P
    Xzzzz\P 
    
/X[a]{2,4}?b/
    X\P
    Xz\P
    Xzz\P 
    Xzzz\P
    Xzzzz\P 
    
/X[a]{2,4}+b/
    X\P
    Xz\P
    Xzz\P 
    Xzzz\P
    Xzzzz\P 
    
/(Y)X\1{2,4}b/
    YX\P
    YXY\P
    YXYY\P 
    YXYYY\P
    YXYYYY\P 
    
/(Y)X\1{2,4}?b/
    YX\P
    YXY\P
    YXYY\P 
    YXYYY\P
    YXYYYY\P 
    
/(Y)X\1{2,4}+b/
    YX\P
    YXY\P
    YXYY\P 
    YXYYY\P
    YXYYYY\P 
    
/\++\KZ|\d+X|9+Y/
    ++++123999\P
    ++++123999Y\P
    ++++Z1234\P 

/Z(*F)/
    Z\P
    ZA\P 
    
/Z(?!)/
    Z\P 
    ZA\P 

/dog(sbody)?/
    dogs\P
    dogs\P\P 
    
/dog(sbody)??/
    dogs\P
    dogs\P\P 

/dog|dogsbody/
    dogs\P
    dogs\P\P 
 
/dogsbody|dog/
    dogs\P
    dogs\P\P 

/\bthe cat\b/
    the cat\P
    the cat\P\P

/abc/
   abc\P
   abc\P\P
   
/abc\K123/
    xyzabc123pqr
    xyzabc12\P
    xyzabc12\P\P
    
/(?<=abc)123/
    xyzabc123pqr 
    xyzabc12\P
    xyzabc12\P\P

/\babc\b/
    +++abc+++
    +++ab\P
    +++ab\P\P  

/(?&word)(?&element)(?(DEFINE)(?<element><[m][>]>[<])(?<word>\w*+))/BZ

/(?&word)(?&element)(?(DEFINE)(?<element><[\d][>]>[<])(?<word>\w*+))/BZ

/(ab)(x(y)z(cd(*ACCEPT)))pq/BZ

/abc\K/+
    abcdef
    abcdef\N\N
    xyzabcdef\N\N
    ** Failers
    abcdef\N 
    xyzabcdef\N
    
/(?:(?=abc)|abc\K)/+
    abcdef
    abcdef\N\N 
    ** Failers 
    abcdef\N 

/a?b?/+
    xyz
    xyzabc
    xyzabc\N
    xyzabc\N\N
    xyz\N\N    
    ** Failers 
    xyz\N 

/a?b?/+
    xyz
    xyzabc
    ** Failers 
    xyzabc\N
    xyzabc\N\N
    xyz\N\N    
    xyz\N 
    
/(?<name>a|b\g<name>c)/
    aaaa
    bacxxx
    bbaccxxx 
    bbbacccxx

/(?<name>a|b\g'name'c)/
    aaaa
    bacxxx
    bbaccxxx 
    bbbacccxx

/(a|b\g<1>c)/
    aaaa
    bacxxx
    bbaccxxx 
    bbbacccxx

/(a|b\g'1'c)/
    aaaa
    bacxxx
    bbaccxxx 
    bbbacccxx

/(a|b\g'-1'c)/
    aaaa
    bacxxx
    bbaccxxx 
    bbbacccxx

/((a|b\g<-1>c))/
    aaaa
    bacxxx
    bbaccxxx 
    bbbacccxx

/(?-i:\g<name>)(?i:(?<name>a))/
    XaaX
    XAAX 

/(?i:\g<name>)(?-i:(?<name>a))/
    XaaX
    ** Failers 
    XAAX 

/(?-i:\g<+1>)(?i:(a))/
    XaaX
    XAAX 

/(?=(?<regex>(?#simplesyntax)\$(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?<index>[a-zA-Z0-9_\x{7f}-\x{ff}]+|\$\g<name>)\]|->\g<name>(\(.*?\))?)?|(?#simple syntax withbraces)\$\{(?:\g<name>(?<indices>\[(?:\g<index>|'(?:\\.|['\\])*'|"(?:\g<regex>|\\.|["\\])*")\])?|\g<complex>|\$\{\g<complex>\})\}|(?#complexsyntax)\{(?<complex>\$(?<segment>\g<name>(\g<indices>*|\(.*?\))?)(?:->\g<segment>)*|\$\g<complex>|\$\{\g<complex>\})\}))\{/

/(?<n>a|b|c)\g<n>*/
   abc
   accccbbb 

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

/(?<=b(?1)|zzz)(a)/
    xbaax
    xzzzax 

/(a)(?<=b\1)/

/(a)(?<=b+(?1))/

/(a+)(?<=b(?1))/

/(a(?<=b(?1)))/

/(?<=b(?1))xyz/

/(?<=b(?1))xyz(b+)pqrstuvew/

/(a|bc)\1/SI

/(a|bc)\1{2,3}/SI

/(a|bc)(?1)/SI

/(a|b\1)(a|b\1)/SI

/(a|b\1){2}/SI

/(a|bbbb\1)(a|bbbb\1)/SI

/(a|bbbb\1){2}/SI

/From +([ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/SI

/<tr([\w\W\s\d][<>]{0,})><TD([\w\W\s\d][<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><\/TR>/isIS

"(?>.*/)foo"SI

/(?(?=[a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /xSI

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/iSI

/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/SI

/<a[\s]+href[\s]*=[\s]*          # find <a href=
 ([\"\'])?                       # find single or double quote
 (?(1) (.*?)\1 | ([\s]+))       # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isxSI

/(?!:)                       # colon disallowed at start
  (?:                         # start of item
    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
    (?(1)0 | () ) )           # if null previously matched, fail; else null
    :                         # followed by colon
  ){1,7}                      # end item; 1-7 of them required               
  [0-9a-f]{1,4} $             # final hex number at end of string
  (?(1)|.)                    # check that there was an empty component
  /xiIS

/(?|(?<a>A)|(?<a>B))/I
    AB\Ca
    BA\Ca

/(?|(?<a>A)|(?<b>B))/ 

/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |
    b(?<quote> (?<apostrophe>')|(?<realquote>")) ) 
    (?('quote')[a-z]+|[0-9]+)/JIx
    a"aaaaa
    b"aaaaa 
    ** Failers 
    b"11111
    a"11111 
    
/(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/JDZx
    abcdX
    eX
    ** Failers
    abcdY
    ey     
    
/(?<A>a) (b)(c)  (?<A>d  (?(R&A)$ | (?4)) )/JDZx
    abcdd
    ** Failers
    abcdde  

/abcd*/
    xxxxabcd\P
    xxxxabcd\P\P

/abcd*/i
    xxxxabcd\P
    xxxxabcd\P\P
    XXXXABCD\P
    XXXXABCD\P\P

/abc\d*/
    xxxxabc1\P
    xxxxabc1\P\P

/(a)bc\1*/
    xxxxabca\P
    xxxxabca\P\P

/abc[de]*/
    xxxxabcde\P
    xxxxabcde\P\P

/-- This is not in the Perl >= 5.10 test because Perl seems currently to be
    broken and not behaving as specified in that it *does* bumpalong after
    hitting (*COMMIT). --/

/(?1)(A(*COMMIT)|B)D/
    ABD
    XABD
    BAD
    ABXABD  
    ** Failers 
    ABX 
    BAXBAD  

/(\3)(\1)(a)/<JS>
    cat

/(\3)(\1)(a)/SI<JS>
    cat

/(\3)(\1)(a)/SI
    cat

/i(?(DEFINE)(?<s>a))/SI
    i
    
/()i(?(1)a)/SI 
    ia

/(?i)a(?-i)b|c/BZ
    XabX
    XAbX
    CcC 
    ** Failers
    XABX   

/(?i)a(?s)b|c/BZ

/(?i)a(?s-i)b|c/BZ

/(ab(c\1)d|x){2}$/BZ
    xabcxd
    
/(?&t)*+(?(DEFINE)(?<t>.))$/BZ

/(?&t)*(?(DEFINE)(?<t>.))$/BZ

/ -- The first four of these are not in the Perl >= 5.10 test because Perl 
     documents that the use of \K in assertions is "not well defined". The
     last is here because Perl gives the match as "b" rather than "ab". I
     believe this to be a Perl bug. --/  
      
/(?=a\Kb)ab/
    ab 

/(?!a\Kb)ac/
    ac 
    
/abc(?<=b\Kc)d/
    abcd

/abc(?<!b\Kq)d/
    abcd

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

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

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

/abc(*MARK:)pqr/

/abc(*:)pqr/

/abc(*FAIL:123)xyz/

/--- This should, and does, fail. In Perl, it does not, which I think is a 
     bug because replacing the B in the pattern by (B|D) does make it fail. ---/

/A(*COMMIT)B/+K
    ACABX

/--- These should be different, but in Perl 5.11 are not, which I think
     is a bug in Perl. ---/

/A(*THEN)B|A(*THEN)C/K
    AC

/A(*PRUNE)B|A(*PRUNE)C/K
    AC
    
/--- This should fail; the SKIP advances by one, but when we get to AC, the
     PRUNE kills it. Perl behaves differently. ---/ 
    
/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
    AAAC

/--- Mark names can be duplicated. Perl doesn't give a mark for this one,
though PCRE does. ---/

/A(*:A)B|X(*:A)Y/K
    ** Failers
    XAQQ
    
/--- COMMIT at the start of a pattern should be the same as an anchor. Perl 
optimizations defeat this. So does the PCRE optimization unless we disable it 
with \Y. ---/

/(*COMMIT)ABC/
    ABCDEFG
    ** Failers
    DEFGABC\Y  
    
/(ab (c+(*THEN)cd) | xyz)/x
    abcccd  

/(ab (c+(*PRUNE)cd) | xyz)/x
    abcccd  

/(ab (c+(*FAIL)cd) | xyz)/x
    abcccd  
    
/--- Perl 5.11 gets some of these wrong ---/ 

/(?>.(*ACCEPT))*?5/
    abcde

/(.(*ACCEPT))*?5/
    abcde

/(.(*ACCEPT))5/
    abcde

/(.(*ACCEPT))*5/
    abcde

/A\NB./BZ
    ACBD
    *** Failers
    A\nB
    ACB\n   

/A\NB./sBZ
    ACBD
    ACB\n 
    *** Failers
    A\nB  
  
/A\NB/<crlf>
    A\nB
    A\rB
    ** Failers
    A\r\nB    

/\R+b/BZ

/\R+\n/BZ

/\R+\d/BZ

/\d*\R/BZ

/\s*\R/BZ
    \x20\x0a
    \x20\x0d
    \x20\x0d\x0a

/\S*\R/BZ
    a\x0a

/X\h*\R/BZ
    X\x20\x0a

/X\H*\R/BZ
    X\x0d\x0a

/X\H+\R/BZ
    X\x0d\x0a

/X\H++\R/BZ
    X\x0d\x0a

/-- Perl treats this one differently, not failing the second string. I believe
    that is a bug in Perl. --/

/((abc|abcx)(*THEN)y|abcd)/
    abcd
    *** Failers 
    abcxy 

/(?<=abc)def/
    abc\P\P

/abc$/
    abc
    abc\P
    abc\P\P

/abc$/m
    abc
    abc\n
    abc\P\P
    abc\n\P\P 
    abc\P
    abc\n\P

/abc\z/
    abc
    abc\P
    abc\P\P

/abc\Z/
    abc
    abc\P
    abc\P\P

/abc\b/
    abc
    abc\P
    abc\P\P

/abc\B/
    abc
    abc\P
    abc\P\P

/.+/
    abc\>0
    abc\>1
    abc\>2
    abc\>3
    abc\>4
    abc\>-4 

/\cģ/

/(?P<abn>(?P=abn)xxx)/BZ

/(a\1z)/BZ

/(?P<abn>(?P=abn)(?<badstufxxx)/BZ

/(?P<abn>(?P=axn)xxx)/BZ

/(?P<abn>(?P=axn)xxx)(?<axn>yy)/BZ

/-- These tests are here because Perl gets the first one wrong. --/

/(\R*)(.)/s
    \r\n
    \r\r\n\n\r 
    \r\r\n\n\r\n 

/(\R)*(.)/s
    \r\n
    \r\r\n\n\r 
    \r\r\n\n\r\n 

/((?>\r\n|\n|\x0b|\f|\r|\x85)*)(.)/s
    \r\n
    \r\r\n\n\r 
    \r\r\n\n\r\n 

/-- --/

/abc$/BZ

/abc$/BZm

/(a)*+(\w)/S
    aaaaX
    ** Failers 
    aaaa

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

/(a)++1234/SDZ

/([abc])++1234/SI

/(?<=(abc)+)X/

/(ab)/I

/(ab)++/I

/(ab|)+/I

/(ab|)++/I

/(?:ab)/I

/(?:ab)++/I

/(?:ab|)+/I

/(?:ab|)++/I

/(.*ab)/I

/(.*ab)++/I

/(.*ab|.*)+/I

/(.*ab|.*)++/I

/(?:.*ab)/I

/(?:.*ab)++/I

/(?:.*ab|.*)+/I

/(?:.*ab|.*)++/I

/(?=a)[bcd]/I

/((?=a))[bcd]/I

/((?=a))+[bcd]/I

/((?=a))++[bcd]/I

/(?=a+)[bcd]/iI

/(?=a+?)[bcd]/iI

/(?=a++)[bcd]/iI

/(?=a{3})[bcd]/iI

/(abc)\1+/S

/-- Perl doesn't get these right IMO (the 3rd is PCRE-specific) --/

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

/(?1)(?:(b(*ACCEPT))){0}c/
    bc
    ** Failers 
    b 

/(?1)(?:((*ACCEPT))){0}c/
    c
    c\N 

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

/.*?(?(?=a)a|bc)/
    ba

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

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

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

/.*?(a(*THEN)b|z)c/
    aabc

/.*?(z|a(*THEN)b)c/
    aabc

/-- --/

/-- These studied versions are here because they are not Perl-compatible; the
    studying means the mark is not seen. --/

/(*MARK:A)(*SKIP:B)(C|X)/KS
    C
    D
     
/(*:A)A+(*SKIP:A)(B|Z)/KS
    AAAC

/-- --/

"(?=a*(*ACCEPT)b)c"
    c
    c\N 
    
/(?1)c(?(DEFINE)((*ACCEPT)b))/
    c
    c\N  
    
/(?>(*ACCEPT)b)c/
    c
    c\N  

/(?:(?>(a)))+a%/++
    %aa%

/(a)b|ac/++SS
    ac\O3
    
/(a)(b)x|abc/++
     abc\O6

/(a)bc|(a)(b)\2/
    \O3abc
    \O4abc 

/(?(DEFINE)(a(?2)|b)(b(?1)|a))(?:(?1)|(?2))/SI

/(a(?2)|b)(b(?1)|a)(?:(?1)|(?2))/SI

/(a(?2)|b)(b(?1)|a)(?1)(?2)/SI

/(abc)(?1)/SI

/(?>a)++/
    aa\M
    aaaaaaaaa\M 
    
/(a)(?1)++/
    aa\M
    aaaaaaaaa\M  

/(?:(foo)|(bar)|(baz))X/SS=
    bazfooX
    foobazbarX
    barfooX
    bazX
    foobarbazX    
    bazfooX\O0
    bazfooX\O2
    bazfooX\O4
    bazfooX\O6
    bazfooX\O8
    bazfooX\O10

/(?=abc){3}abc/BZ

/(?=abc)+abc/BZ

/(?=abc)++abc/BZ

/(?=abc){0}xyz/BZ

/(?=(a))?./BZ

/(?=(a))??./BZ

/(?=(a)){0}b(?1)/BZ

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

/(?=(?1))?[az]([abc])d/BZ

/(?!a){0}\w+/BZ

/(?<=(abc))?xyz/BZ

/[:a[:abc]b:]/BZ

/((?2))((?1))/SS
    abc

/((?(R2)a+|(?1)b))/SS
    aaaabcde

/(?(R)a*(?1)|((?R))b)/SS
    aaaabcde

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

/(a(*:A)(d|e(*:B))z|aeq)/C
    adz
    aez
    aeqwerty

/.(*F)/
    \P\Pabc

/\btype\b\W*?\btext\b\W*?\bjavascript\b/IS

/\btype\b\W*?\btext\b\W*?\bjavascript\b|\burl\b\W*?\bshell:|<input\b.*?\btype\b\W*?\bimage\b|\bonkeyup\b\W*?\=/IS

/a(*SKIP)c|b(*ACCEPT)|/+SI
    a

/a(*SKIP)c|b(*ACCEPT)cd(*ACCEPT)|x/SI
    ax

'a*(*ACCEPT)b'+
    \N\N
    abc\N\N
    bbb\N\N 

/(*ACCEPT)a/+I
    bax

/z(*ACCEPT)a/+I
    baxzbx

/a(?:.)*?a/ims                                                                  
    \Mabbbbbbbbbbbbbbbbbbbbba
    
/a(?:.(*THEN))*?a/ims
    \Mabbbbbbbbbbbbbbbbbbbbba

/a(?:.(*THEN:ABC))*?a/ims
    \Mabbbbbbbbbbbbbbbbbbbbba

/-- These tests are in agreement with development Perl 5.015, which has fixed
    some things, but they don't all work with 5.012, so they aren't in the
    Perl-compatible tests. Those after the first come from Perl's own test
    files. --/
    
/((yes|no)(*THEN)(*F))?/
  yes

/(A (.*)   C? (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz

/(A (.*)   C? (*THEN)  | A D) z/x
AbcdCBefgBhiBqz

/(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x
AbcdCBefgBhiBqz

/(A (.*)   C? (*THEN)  | A D) \s* z/x
AbcdCBefgBhiBqz

/(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz

/(A (.*)   (?:C|) (*THEN)  | A D) z/x
AbcdCBefgBhiBqz

/(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz

/(A (.*)   C{0,6} (*THEN)  | A D) z/x
AbcdCBefgBhiBqz

/(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x
AbcdCEBefgBhiBqz

/(A (.*)   (CE){0,6} (*THEN)  | A D) z/x
AbcdCEBefgBhiBqz

/(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz

/(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x
AbcdCBefgBhiBqz

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

/(?>a+)(?>(z+))\w/BZ
    aaaazzzzb
    ** Failers
    aazz  

/(.)(\1|a(?2))/
    bab
    
/\1|(.)(?R)\1/
    cbbbc
    
/(.)((?(1)c|a)|a(?2))/
    baa  

/(?P<abn>(?P=abn)xxx)/BZ

/(a\1z)/BZ

/(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
     \Maabbccddee

/(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
     \Maabbccddee

/(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
     \Maabbccddee

/a\x41z/<JS>
    aAz
    *** Failers
    ax41z

/a[m\x41]z/<JS>
    aAz

/a\x1z/<JS>
    ax1z

/a\u0041z/<JS>
    aAz
    *** Failers
    au0041z

/a[m\u0041]z/<JS>
    aAz

/a\u041z/<JS>
    au041z
    *** Failers
    aAz

/a\U0041z/<JS>
    aU0041z
    *** Failers
    aAz

/(?(?=c)c|d)++Y/BZ

/(?(?=c)c|d)*+Y/BZ

/a[\NB]c/
    aNc
    
/a[B-\Nc]/ 

/(a)(?2){0,1999}?(b)/

/(a)(?(DEFINE)(b))(?2){0,1999}?(?2)/

/--- This test, with something more complicated than individual letters, causes
different behaviour in Perl. Perhaps it disables some optimization; no tag is
passed back for the failures, whereas in PCRE there is a tag. ---/
    
/(A|P)(*:A)(B|P) | (X|P)(X|P)(*:B)(Y|P)/xK
    AABC
    XXYZ 
    ** Failers
    XAQQ  
    XAQQXZZ  
    AXQQQ 
    AXXQQQ 

/-- Perl doesn't give marks for these, though it does if the alternatives are
replaced by single letters. --/
    
/(b|q)(*:m)f|a(*:n)w/K
    aw 
    ** Failers 
    abc

/(q|b)(*:m)f|a(*:n)w/K
    aw 
    ** Failers 
    abc

/-- After a partial match, the behaviour is as for a failure. --/

/a(*:X)bcde/K
   abc\P
   
/-- These are here because Perl doesn't return a mark, except for the first --/

/(?=(*:x))(q|)/K+
    abc

/(?=(*:x))((*:y)q|)/K+
    abc

/(?=(*:x))(?:(*:y)q|)/K+
    abc

/(?=(*:x))(?>(*:y)q|)/K+
    abc

/(?=a(*:x))(?!a(*:y)c)/K+
    ab

/(?=a(*:x))(?=a(*:y)c|)/K+
    ab

/(..)\1/
    ab\P
    aba\P
    abab\P

/(..)\1/i
    ab\P
    abA\P
    aBAb\P

/(..)\1{2,}/
    ab\P
    aba\P
    abab\P
    ababa\P
    ababab\P
    ababab\P\P
    abababa\P
    abababa\P\P

/(..)\1{2,}/i
    ab\P
    aBa\P
    aBAb\P
    AbaBA\P
    abABAb\P
    aBAbaB\P\P
    abABabA\P
    abaBABa\P\P

/(..)\1{2,}?x/i
    ab\P
    abA\P
    aBAb\P
    abaBA\P
    abAbaB\P
    abaBabA\P
    abAbABaBx\P

/(..)\1/
    aba\P

/(..)\1{2,3}x/
    aba\P
    ababa\P
    ababa\P\P
    abababx
    ababababx  

/(..)\1{2,3}?x/
    aba\P
    ababa\P
    ababa\P\P
    abababx
    ababababx  
    
/(..)(\1{2,3})ab/
    abababab

/\R/
    \r\P
    \r\P\P
    
/\R{2,3}x/
    \r\P
    \r\P\P
    \r\r\P 
    \r\r\P\P
    \r\r\r\P  
    \r\r\r\P\P
    \r\rx
    \r\r\rx    

/\R{2,3}?x/
    \r\P
    \r\P\P
    \r\r\P 
    \r\r\P\P
    \r\r\r\P  
    \r\r\r\P\P
    \r\rx
    \r\r\rx    
    
/\R?x/
    \r\P
    \r\P\P 
    x
    \rx  

/\R+x/
    \r\P
    \r\P\P 
    \r\n\P
    \r\n\P\P  
    \rx  

/a$/<CRLF>
    a\r\P
    a\r\P\P 

/a$/m<CRLF>
    a\r\P
    a\r\P\P 

/(a$|a\r)/<CRLF>
    a\r\P
    a\r\P\P 

/(a$|a\r)/m<CRLF>
    a\r\P
    a\r\P\P 

/./<CRLF>
    \r\P
    \r\P\P 
  
/.{2,3}/<CRLF>
    \r\P 
    \r\P\P
    \r\r\P
    \r\r\P\P
    \r\r\r\P
    \r\r\r\P\P     

/.{2,3}?/<CRLF>
    \r\P 
    \r\P\P
    \r\r\P
    \r\r\P\P
    \r\r\r\P
    \r\r\r\P\P     

/-- These two are here because Perl does not match: it seems to allow the
COMMIT to escape from the assertion. --/

/(?=a(*COMMIT)b|ac)ac|ac/
    ac

/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
    ac

"AB(C(D))(E(F))?(?(?=\2)(?=\4))"
    ABCDGHI\O03
    
/-- This one is here because Perl does not confine the *COMMIT to the 
assertion, and therefore fails the entire subroutine call. --/ 
    
/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
    ac 
    
/-- These are all run as real matches in test 1; here we are just checking the
settings of the anchored and startline bits. --/ 

/(?>.*?a)(?<=ba)/I

/(?:.*?a)(?<=ba)/I

/.*?a(*PRUNE)b/I

/.*?a(*PRUNE)b/sI

/a(*PRUNE)b/sI

/.*?a(*SKIP)b/I

/(?>.*?a)b/sI

/(?>.*?a)b/I

/(?>a)b/sI

/(?>.*?)(?<=(abcd)|(wxyz))/I

/(?>.*)(?<=(abcd)|(wxyz))/I

"(?>.*)foo"I

"(?>.*?)foo"I

/(?>abc)/mI

/(?>.*abc)/mI

/(?:.*abc)/mI

/-- Check PCRE_STUDY_EXTRA_NEEDED --/

/.?/S-I

/.?/S!I

/-- End of testinput2 --/
./ ADD NAME=TSTOT1 
/-- This set of tests is for features that are compatible with all versions of
    Perl >= 5.10, in non-UTF-8 mode. It should run clean for both the 8-bit and
    16-bit PCRE libraries. --/

/the quick brown fox/
    the quick brown fox
 0: the quick brown fox
    The quick brown FOX
No match
    What do you know about the quick brown fox?
 0: the quick brown fox
    What do you know about THE QUICK BROWN FOX?
No match

/The quick brown fox/i
    the quick brown fox
 0: the quick brown fox
    The quick brown FOX
 0: The quick brown FOX
    What do you know about the quick brown fox?
 0: the quick brown fox
    What do you know about THE QUICK BROWN FOX?
 0: THE QUICK BROWN FOX

/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
    abcd\t\n\r\f\a\e9;\$\\?caxyz
 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz

/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
    abxyzpqrrrabbxyyyypqAzz
 0: abxyzpqrrrabbxyyyypqAzz
    abxyzpqrrrabbxyyyypqAzz
 0: abxyzpqrrrabbxyyyypqAzz
    aabxyzpqrrrabbxyyyypqAzz
 0: aabxyzpqrrrabbxyyyypqAzz
    aaabxyzpqrrrabbxyyyypqAzz
 0: aaabxyzpqrrrabbxyyyypqAzz
    aaaabxyzpqrrrabbxyyyypqAzz
 0: aaaabxyzpqrrrabbxyyyypqAzz
    abcxyzpqrrrabbxyyyypqAzz
 0: abcxyzpqrrrabbxyyyypqAzz
    aabcxyzpqrrrabbxyyyypqAzz
 0: aabcxyzpqrrrabbxyyyypqAzz
    aaabcxyzpqrrrabbxyyyypAzz
 0: aaabcxyzpqrrrabbxyyyypAzz
    aaabcxyzpqrrrabbxyyyypqAzz
 0: aaabcxyzpqrrrabbxyyyypqAzz
    aaabcxyzpqrrrabbxyyyypqqAzz
 0: aaabcxyzpqrrrabbxyyyypqqAzz
    aaabcxyzpqrrrabbxyyyypqqqAzz
 0: aaabcxyzpqrrrabbxyyyypqqqAzz
    aaabcxyzpqrrrabbxyyyypqqqqAzz
 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
    aaabcxyzpqrrrabbxyyyypqqqqqAzz
 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
    aaaabcxyzpqrrrabbxyyyypqAzz
 0: aaaabcxyzpqrrrabbxyyyypqAzz
    abxyzzpqrrrabbxyyyypqAzz
 0: abxyzzpqrrrabbxyyyypqAzz
    aabxyzzzpqrrrabbxyyyypqAzz
 0: aabxyzzzpqrrrabbxyyyypqAzz
    aaabxyzzzzpqrrrabbxyyyypqAzz
 0: aaabxyzzzzpqrrrabbxyyyypqAzz
    aaaabxyzzzzpqrrrabbxyyyypqAzz
 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
    abcxyzzpqrrrabbxyyyypqAzz
 0: abcxyzzpqrrrabbxyyyypqAzz
    aabcxyzzzpqrrrabbxyyyypqAzz
 0: aabcxyzzzpqrrrabbxyyyypqAzz
    aaabcxyzzzzpqrrrabbxyyyypqAzz
 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
    aaaabcxyzzzzpqrrrabbxyyyypqAzz
 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
    aaabcxyzpqrrrabbxyyyypABzz
 0: aaabcxyzpqrrrabbxyyyypABzz
    aaabcxyzpqrrrabbxyyyypABBzz
 0: aaabcxyzpqrrrabbxyyyypABBzz
    >>>aaabxyzpqrrrabbxyyyypqAzz
 0: aaabxyzpqrrrabbxyyyypqAzz
    >aaaabxyzpqrrrabbxyyyypqAzz
 0: aaaabxyzpqrrrabbxyyyypqAzz
    >>>>abcxyzpqrrrabbxyyyypqAzz
 0: abcxyzpqrrrabbxyyyypqAzz
    *** Failers
No match
    abxyzpqrrabbxyyyypqAzz
No match
    abxyzpqrrrrabbxyyyypqAzz
No match
    abxyzpqrrrabxyyyypqAzz
No match
    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
No match
    aaaabcxyzzzzpqrrrabbbxyyypqAzz
No match
    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
No match

/(abc){1,2}zz/
    abczz
 0: abczz
 1: abc
    abcabczz
 0: abcabczz
 1: abc
    *** Failers
No match
    zz
No match
    abcabcabczz
No match
    >>abczz
No match

/(b+?|a){1,2}?c/
    bc
 0: bc
 1: b
    bbc
 0: bbc
 1: b
    bbbc
 0: bbbc
 1: bb
    bac
 0: bac
 1: a
    bbac
 0: bbac
 1: a
    aac
 0: aac
 1: a
    abbbbbbbbbbbc
 0: abbbbbbbbbbbc
 1: bbbbbbbbbbb
    bbbbbbbbbbbac
 0: bbbbbbbbbbbac
 1: a
    *** Failers
No match
    aaac
No match
    abbbbbbbbbbbac
No match

/(b+|a){1,2}c/
    bc
 0: bc
 1: b
    bbc
 0: bbc
 1: bb
    bbbc
 0: bbbc
 1: bbb
    bac
 0: bac
 1: a
    bbac
 0: bbac
 1: a
    aac
 0: aac
 1: a
    abbbbbbbbbbbc
 0: abbbbbbbbbbbc
 1: bbbbbbbbbbb
    bbbbbbbbbbbac
 0: bbbbbbbbbbbac
 1: a
    *** Failers
No match
    aaac
No match
    abbbbbbbbbbbac
No match

/(b+|a){1,2}?bc/
    bbc
 0: bbc
 1: b

/(b*|ba){1,2}?bc/
    babc
 0: babc
 1: ba
    bbabc
 0: bbabc
 1: ba
    bababc
 0: bababc
 1: ba
    *** Failers
No match
    bababbc
No match
    babababc
No match

/(ba|b*){1,2}?bc/
    babc
 0: babc
 1: ba
    bbabc
 0: bbabc
 1: ba
    bababc
 0: bababc
 1: ba
    *** Failers
No match
    bababbc
No match
    babababc
No match

/\ca\cA\c[\c{\c:/
    \x01\x01\e;z
 0: \x01\x01\x1b;z

/[ab\]cde]/
    athing
 0: a
    bthing
 0: b
    ]thing
 0: ]
    cthing
 0: c
    dthing
 0: d
    ething
 0: e
    *** Failers
No match
    fthing
No match
    [thing
No match
    \\thing
No match

/[]cde]/
    ]thing
 0: ]
    cthing
 0: c
    dthing
 0: d
    ething
 0: e
    *** Failers
No match
    athing
No match
    fthing
No match

/[ab\]cde]/
    fthing
 0: f
    [thing
 0: [
    \\thing
 0: \
    *** Failers
 0: *
    athing
No match
    bthing
No match
    ]thing
No match
    cthing
No match
    dthing
No match
    ething
No match

/[]cde]/
    athing
 0: a
    fthing
 0: f
    *** Failers
 0: *
    ]thing
No match
    cthing
No match
    dthing
No match
    ething
No match

/\/
    
 0: \x81

/\xFF/
    \xFF
 0: \xff

/[0-9]+$/
    0
 0: 0
    1
 0: 1
    2
 0: 2
    3
 0: 3
    4
 0: 4
    5
 0: 5
    6
 0: 6
    7
 0: 7
    8
 0: 8
    9
 0: 9
    10
 0: 10
    100
 0: 100
    *** Failers
No match
    abc
No match

/.*nter/
    enter
 0: enter
    inter
 0: inter
    uponter
 0: uponter

/xxx[0-9]+$/
    xxx0
 0: xxx0
    xxx1234
 0: xxx1234
    *** Failers
No match
    xxx
No match

/.+[0-9][0-9][0-9]$/
    x123
 0: x123
    xx123
 0: xx123
    123456
 0: 123456
    *** Failers
No match
    123
No match
    x1234
 0: x1234

/.+?[0-9][0-9][0-9]$/
    x123
 0: x123
    xx123
 0: xx123
    123456
 0: 123456
    *** Failers
No match
    123
No match
    x1234
 0: x1234

/([!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
    abc!pqr=apquxz.ixr.zzz.ac.uk
 0: abc!pqr=apquxz.ixr.zzz.ac.uk
 1: abc
 2: pqr
    *** Failers
No match
    !pqr=apquxz.ixr.zzz.ac.uk
No match
    abc!=apquxz.ixr.zzz.ac.uk
No match
    abc!pqr=apquxz:ixr.zzz.ac.uk
No match
    abc!pqr=apquxz.ixr.zzz.ac.ukk
No match

/:/
    Well, we need a colon: somewhere
 0: :
    *** Fail if we don't
No match

/([\da-f:]+)$/i
    0abc
 0: 0abc
 1: 0abc
    abc
 0: abc
 1: abc
    fed
 0: fed
 1: fed
    E
 0: E
 1: E
    ::
 0: ::
 1: ::
    5f03:12C0::932e
 0: 5f03:12C0::932e
 1: 5f03:12C0::932e
    fed def
 0: def
 1: def
    Any old stuff
 0: ff
 1: ff
    *** Failers
No match
    0zzz
No match
    gzzz
No match
    fed\x20
No match
    Any old rubbish
No match

/.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
    .1.2.3
 0: .1.2.3
 1: 1
 2: 2
 3: 3
    A.12.123.0
 0: A.12.123.0
 1: 12
 2: 123
 3: 0
    *** Failers
No match
    .1.2.3333
No match
    1.2.3
No match
    1234.2.3
No match

/(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
    1 IN SOA non-sp1 non-sp2(
 0: 1 IN SOA non-sp1 non-sp2(
 1: 1
 2: non-sp1
 3: non-sp2
    1    IN    SOA    non-sp1    non-sp2   (
 0: 1    IN    SOA    non-sp1    non-sp2   (
 1: 1
 2: non-sp1
 3: non-sp2
    *** Failers
No match
    1IN SOA non-sp1 non-sp2(
No match

/[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
    a.
 0: a.
    Z.
 0: Z.
    2.
 0: 2.
    ab-c.pq-r.
 0: ab-c.pq-r.
 1: .pq-r
    sxk.zzz.ac.uk.
 0: sxk.zzz.ac.uk.
 1: .uk
    x-.y-.
 0: x-.y-.
 1: .y-
    *** Failers
No match
    -abc.peq.
No match

/\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
    *.a
 0: *.a
    *.b0-a
 0: *.b0-a
 1: 0-a
    *.c3-b.c
 0: *.c3-b.c
 1: 3-b
 2: .c
    *.c-a.b-c
 0: *.c-a.b-c
 1: -a
 2: .b-c
 3: -c
    *** Failers
No match
    *.0
No match
    *.a-
No match
    *.a-b.c-
No match
    *.c-a.0-c
No match

/(?=ab(de))(abd)(e)/
    abde
 0: abde
 1: de
 2: abd
 3: e

/(?!(ab)de|x)(abd)(f)/
    abdf
 0: abdf
 1: <unset>
 2: abd
 3: f

/(?=(ab(cd)))(ab)/
    abcd
 0: ab
 1: abcd
 2: cd
 3: ab

/[\da-f](\.[\da-f])*$/i
    a.b.c.d
 0: a.b.c.d
 1: .d
    A.B.C.D
 0: A.B.C.D
 1: .D
    a.b.c.1.2.3.C
 0: a.b.c.1.2.3.C
 1: .C

/\".*\"\s*(;.*)?$/
    \"1234\"
 0: "1234"
    \"abcd\" ;
 0: "abcd" ;
 1: ;
    \"\" ; rhubarb
 0: "" ; rhubarb
 1: ; rhubarb
    *** Failers
No match
    \"1234\" : things
No match

/$/
    \
 0: 
    *** Failers
No match

/       a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
    ab c
 0: ab c
    *** Failers
No match
    abc
No match
    ab cde
No match

/(?x)       a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
    ab c
 0: ab c
    *** Failers
No match
    abc
No match
    ab cde
No match

/   a\ b[c ]d       $/x
    a bcd
 0: a bcd
    a b d
 0: a b d
    *** Failers
No match
    abcd
No match
    ab d
No match

/(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
    abcdefhijklm
 0: abcdefhijklm
 1: abc
 2: bc
 3: c
 4: def
 5: ef
 6: f
 7: hij
 8: ij
 9: j
10: klm
11: lm
12: m

/(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
    abcdefhijklm
 0: abcdefhijklm
 1: bc
 2: c
 3: ef
 4: f
 5: ij
 6: j
 7: lm
 8: m

/[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
    a+ Z0+\x08\n\x1d\x12
 0: a+ Z0+\x08\x0a\x1d\x12

/[.$|()*+?{,}]+/
    .\$(*+)|{?,?}
 0: .$(*+)|{?,?}

/a*\w/
    z
 0: z
    az
 0: az
    aaaz
 0: aaaz
    a
 0: a
    aa
 0: aa
    aaaa
 0: aaaa
    a+
 0: a
    aa+
 0: aa

/a*?\w/
    z
 0: z
    az
 0: a
    aaaz
 0: a
    a
 0: a
    aa
 0: a
    aaaa
 0: a
    a+
 0: a
    aa+
 0: a

/a+\w/
    az
 0: az
    aaaz
 0: aaaz
    aa
 0: aa
    aaaa
 0: aaaa
    aa+
 0: aa

/a+?\w/
    az
 0: az
    aaaz
 0: aa
    aa
 0: aa
    aaaa
 0: aa
    aa+
 0: aa

/\d{8}\w{2,}/
    1234567890
 0: 1234567890
    12345678ab
 0: 12345678ab
    12345678__
 0: 12345678__
    *** Failers
No match
    1234567
No match

/[aeiou\d]{4,5}$/
    uoie
 0: uoie
    1234
 0: 1234
    12345
 0: 12345
    aaaaa
 0: aaaaa
    *** Failers
No match
    123456
No match

/[aeiou\d]{4,5}?/
    uoie
 0: uoie
    1234
 0: 1234
    12345
 0: 1234
    aaaaa
 0: aaaa
    123456
 0: 1234

/\A(abc|def)=(\1){2,3}\Z/
    abc=abcabc
 0: abc=abcabc
 1: abc
 2: abc
    def=defdefdef
 0: def=defdefdef
 1: def
 2: def
    *** Failers
No match
    abc=defdef
No match

/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
    abcdefghijkcda2
 0: abcdefghijkcda2
 1: a
 2: b
 3: c
 4: d
 5: e
 6: f
 7: g
 8: h
 9: i
10: j
11: k
12: cd
    abcdefghijkkkkcda2
 0: abcdefghijkkkkcda2
 1: a
 2: b
 3: c
 4: d
 5: e
 6: f
 7: g
 8: h
 9: i
10: j
11: k
12: cd

/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
    cataract cataract23
 0: cataract cataract23
 1: cataract
 2: aract
 3: ract
 4: 
 5: 3
    catatonic catatonic23
 0: catatonic catatonic23
 1: catatonic
 2: atonic
 3: tonic
 4: 
 5: 3
    caterpillar caterpillar23
 0: caterpillar caterpillar23
 1: caterpillar
 2: erpillar
 3: <unset>
 4: 
 5: 3


/From +([ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
    From abcd  Mon Sep 01 12:33:02 1997
 0: From abcd  Mon Sep 01 12:33
 1: abcd

/From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
    From abcd  Mon Sep 01 12:33:02 1997
 0: From abcd  Mon Sep 01 12:33
 1: Sep 
    From abcd  Mon Sep  1 12:33:02 1997
 0: From abcd  Mon Sep  1 12:33
 1: Sep  
    *** Failers
No match
    From abcd  Sep 01 12:33:02 1997
No match

/12.34/s
    12\n34
 0: 12\x0a34
    12\r34
 0: 12\x0d34

/\w+(?=\t)/
    the quick brown\t fox
 0: brown

/foo(?!bar)(.*)/
    foobar is foolish see?
 0: foolish see?
 1: lish see?

/(?:(?!foo)...|.{0,2})bar(.*)/
    foobar crowbar etc
 0: rowbar etc
 1:  etc
    barrel
 0: barrel
 1: rel
    2barrel
 0: 2barrel
 1: rel
    A barrel
 0: A barrel
 1: rel

/(\D*)(?=\d)(?!123)/
    abc456
 0: abc
 1: abc
    *** Failers
No match
    abc123
No match

/1234(?# test newlines
  inside)/
    1234
 0: 1234

/1234 #comment in extended re
  /x
    1234
 0: 1234

/#rhubarb
  abcd/x
    abcd
 0: abcd

/abcd#rhubarb/x
    abcd
 0: abcd

/(a)\1{2,3}(.)/
    aaab
 0: aaab
 1: a
 2: b
    aaaab
 0: aaaab
 1: a
 2: b
    aaaaab
 0: aaaaa
 1: a
 2: a
    aaaaaab
 0: aaaaa
 1: a
 2: a

/(?!)abc/
    the abc
 0: abc
    *** Failers
No match
    abc
No match

/(?=)abc/
    abc
 0: abc
    *** Failers
No match
    the abc
No match

/[ab]{1,3}(ab*|b)/
    aabbbbb
 0: aabb
 1: b

/[ab]{1,3}?(ab*|b)/
    aabbbbb
 0: aabbbbb
 1: abbbbb

/[ab]{1,3}?(ab*?|b)/
    aabbbbb
 0: aa
 1: a

/[ab]{1,3}(ab*?|b)/
    aabbbbb
 0: aabb
 1: b

/  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                          # optional leading comment
(?:    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
# address
|                     #  or
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)             # one word, optionally followed by....
(?:
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
\(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)       |  # comments, or...

" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
# quoted strings
)*
<  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                     # leading <
(?:  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*

(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  ,  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
)* # further okay, if led by comma
:                                # closing colon
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  )? #       optional route
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
#       address spec
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  > #                  trailing >
# name and address
)  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                       # optional trailing comment
/x
    Alan Other <user\@dom.ain>
 0: Alan Other <user@dom.ain>
    <user\@dom.ain>
 0: user@dom.ain
    user\@dom.ain
 0: user@dom.ain
    \"A. Other\" <user.1234\@dom.ain> (a comment)
 0: "A. Other" <user.1234@dom.ain> (a comment)
    A. Other <user.1234\@dom.ain> (a comment)
 0:  Other <user.1234@dom.ain> (a comment)
    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
    A missing angle <user\@some.where
 0: user@some.where
    *** Failers
No match
    The quick brown fox
No match

/[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional leading comment
(?:
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# additional words
)*
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
# address
|                             #  or
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
# leading word
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
(?:
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
|
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
) # "special" comment or quoted string
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
)*
<
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# <
(?:
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
(?: ,
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
)*  # additional domains
:
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)?     #       optional route
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
# Atom
|                       #  or
"                                     # "
[\\\x80-\xff\n\015"] *                            #   normal
(?:  \\ [\x80-\xff]  [\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
"                                     #        "
# Quoted string
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# additional words
)*
@
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
(?:
\.
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
\[                            # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*     #    stuff
\]                           #           ]
)
[\040\t]*                    # Nab whitespace.
(?:
\(                              #  (
[\\\x80-\xff\n\015()] *                             #     normal*
(?:                                 #       (
(?:  \\ [\x80-\xff]  |
\(                            #  (
[\\\x80-\xff\n\015()] *                            #     normal*
(?:  \\ [\x80-\xff]   [\\\x80-\xff\n\015()] * )*        #     (special normal*)*
\)                           #                       )
)    #         special
[\\\x80-\xff\n\015()] *                         #         normal*
)*                                  #            )*
\)                             #                )
[\040\t]* )*    # If comment found, allow more spaces.
# optional trailing comments
)*
#       address spec
>                    #                 >
# name and address
)
/x
    Alan Other <user\@dom.ain>
 0: Alan Other <user@dom.ain>
    <user\@dom.ain>
 0: user@dom.ain
    user\@dom.ain
 0: user@dom.ain
    \"A. Other\" <user.1234\@dom.ain> (a comment)
 0: "A. Other" <user.1234@dom.ain>
    A. Other <user.1234\@dom.ain> (a comment)
 0:  Other <user.1234@dom.ain>
    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
    A missing angle <user\@some.where
 0: user@some.where
    *** Failers
No match
    The quick brown fox
No match

/abc\0def\00pqr\000xyz\0000AB/
    abc\0def\00pqr\000xyz\0000AB
 0: abc\x00def\x00pqr\x00xyz\x000AB
    abc456 abc\0def\00pqr\000xyz\0000ABCDE
 0: abc\x00def\x00pqr\x00xyz\x000AB

/abc\x0def\x00pqr\x000xyz\x0000AB/
    abc\x0def\x00pqr\x000xyz\x0000AB
 0: abc\x0def\x00pqr\x000xyz\x0000AB
    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
 0: abc\x0def\x00pqr\x000xyz\x0000AB

/[\000-\037]/
    \0A
 0: \x00
    \01B
 0: \x01
    \037C
 0: \x1f

/\0*/
    \0\0\0\0
 0: \x00\x00\x00\x00

/A\x0{2,3}Z/
    The A\x0\x0Z
 0: A\x00\x00Z
    An A\0\x0\0Z
 0: A\x00\x00\x00Z
    *** Failers
No match
    A\0Z
No match
    A\0\x0\0\x0Z
No match

/(cow|)\1(bell)/
    cowcowbell
 0: cowcowbell
 1: cow
 2: bell
    bell
 0: bell
 1: 
 2: bell
    *** Failers
No match
    cowbell
No match

/\s/
    \040abc
 0:  
    \x0cabc
 0: \x0c
    \nabc
 0: \x0a
    \rabc
 0: \x0d
    \tabc
 0: \x09
    *** Failers
No match
    abc
No match

/a   b
      c/x
    abc
 0: abc

/(a|)\1*b/
    ab
 0: ab
 1: a
    aaaab
 0: aaaab
 1: a
    b
 0: b
 1: 
    *** Failers
No match
    acb
No match

/(a|)\1+b/
    aab
 0: aab
 1: a
    aaaab
 0: aaaab
 1: a
    b
 0: b
 1: 
    *** Failers
No match
    ab
No match

/(a|)\1?b/
    ab
 0: ab
 1: a
    aab
 0: aab
 1: a
    b
 0: b
 1: 
    *** Failers
No match
    acb
No match

/(a|)\1{2}b/
    aaab
 0: aaab
 1: a
    b
 0: b
 1: 
    *** Failers
No match
    ab
No match
    aab
No match
    aaaab
No match

/(a|)\1{2,3}b/
    aaab
 0: aaab
 1: a
    aaaab
 0: aaaab
 1: a
    b
 0: b
 1: 
    *** Failers
No match
    ab
No match
    aab
No match
    aaaaab
No match

/ab{1,3}bc/
    abbbbc
 0: abbbbc
    abbbc
 0: abbbc
    abbc
 0: abbc
    *** Failers
No match
    abc
No match
    abbbbbc
No match

/([.]*)\.([:]*):[T ]+(.*)/
    track1.title:TBlah blah blah
 0: track1.title:TBlah blah blah
 1: track1
 2: title
 3: Blah blah blah

/([.]*)\.([:]*):[T ]+(.*)/i
    track1.title:TBlah blah blah
 0: track1.title:TBlah blah blah
 1: track1
 2: title
 3: Blah blah blah

/([.]*)\.([:]*):[t ]+(.*)/i
    track1.title:TBlah blah blah
 0: track1.title:TBlah blah blah
 1: track1
 2: title
 3: Blah blah blah

/[W-c]+$/
    WXY_abc
 0: WXY_abc
    *** Failers
No match
    wxy
No match

/[W-c]+$/i
    WXY_abc
 0: WXY_abc
    wxy_ABC
 0: wxy_ABC

/[\x3f-\x5F]+$/i
    WXY_abc
 0: WXY_abc
    wxy_ABC
 0: wxy_ABC

/abc$/m
    abc
 0: abc
    qqq\nabc
 0: abc
    abc\nzzz
 0: abc
    qqq\nabc\nzzz
 0: abc

/abc$/
    abc
 0: abc
    *** Failers
No match
    qqq\nabc
No match
    abc\nzzz
No match
    qqq\nabc\nzzz
No match

/\Aabc\Z/m
    abc
 0: abc
    abc\n 
 0: abc
    *** Failers
No match
    qqq\nabc
No match
    abc\nzzz
No match
    qqq\nabc\nzzz
No match
    
/\A(.)*\Z/s
    abc\ndef
 0: abc\x0adef
 1: f

/\A(.)*\Z/m
    *** Failers
 0: *** Failers
 1: s
    abc\ndef
No match

/(?:b)|(?::+)/
    b::c
 0: b
    c::b
 0: ::

/[-az]+/
    az-
 0: az-
    *** Failers
 0: a
    b
No match

/[az-]+/
    za-
 0: za-
    *** Failers
 0: a
    b
No match

/[a\-z]+/
    a-z
 0: a-z
    *** Failers
 0: a
    b
No match

/[a-z]+/
    abcdxyz
 0: abcdxyz

/[\d-]+/
    12-34
 0: 12-34
    *** Failers
No match
    aaa
No match

/[\d-z]+/
    12-34z
 0: 12-34z
    *** Failers
No match
    aaa
No match

/\x5c/
    \\
 0: \

/\x20Z/
    the Zoo
 0:  Z
    *** Failers
No match
    Zulu
No match

/(abc)\1/i
    abcabc
 0: abcabc
 1: abc
    ABCabc
 0: ABCabc
 1: ABC
    abcABC
 0: abcABC
 1: abc

/ab{3cd/
    ab{3cd
 0: ab{3cd

/ab{3,cd/
    ab{3,cd
 0: ab{3,cd

/ab{3,4a}cd/
    ab{3,4a}cd
 0: ab{3,4a}cd

/{4,5a}bc/
    {4,5a}bc
 0: {4,5a}bc

/abc$/
    abc
 0: abc
    abc\n
 0: abc
    *** Failers
No match
    abc\ndef
No match

/(abc)\123/
    abc\x53
 0: abcS
 1: abc

/(abc)\223/
    abc\x93
 0: abc\x93
 1: abc

/(abc)\323/
    abc\xd3
 0: abc\xd3
 1: abc

/(abc)\100/
    abc\x40
 0: abc@
 1: abc
    abc\100
 0: abc@
 1: abc

/(abc)\1000/
    abc\x400
 0: abc@0
 1: abc
    abc\x40\x30
 0: abc@0
 1: abc
    abc\1000
 0: abc@0
 1: abc
    abc\100\x30
 0: abc@0
 1: abc
    abc\100\060
 0: abc@0
 1: abc
    abc\100\60
 0: abc@0
 1: abc

/abc\81/
    abc\081
 0: abc\x0081
    abc\0\x38\x31
 0: abc\x0081

/abc\91/
    abc\091
 0: abc\x0091
    abc\0\x39\x31
 0: abc\x0091

/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
    abcdefghijkllS
 0: abcdefghijkllS
 1: a
 2: b
 3: c
 4: d
 5: e
 6: f
 7: g
 8: h
 9: i
10: j
11: k
12: l

/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
    abcdefghijk\12S
 0: abcdefghijk\x0aS
 1: a
 2: b
 3: c
 4: d
 5: e
 6: f
 7: g
 8: h
 9: i
10: j
11: k

/ab\idef/
    abidef
 0: abidef

/a{0}bc/
    bc
 0: bc

/(a|(bc)){0,0}?xyz/
    xyz
 0: xyz

/abc[\10]de/
    abc\010de
 0: abc\x08de

/abc[\1]de/
    abc\1de
 0: abc\x01de

/(abc)[\1]de/
    abc\1de
 0: abc\x01de
 1: abc

/(?s)a.b/
    a\nb
 0: a\x0ab

/([a])([\b])([c]*)([d]{3,4})/
    baNOTccccd
 0: baNOTcccc
 1: b
 2: a
 3: NOT
 4: cccc
    baNOTcccd
 0: baNOTccc
 1: b
 2: a
 3: NOT
 4: ccc
    baNOTccd
 0: baNOTcc
 1: b
 2: a
 3: NO
 4: Tcc
    bacccd
 0: baccc
 1: b
 2: a
 3: 
 4: ccc
    *** Failers
 0: *** Failers
 1: *
 2: *
 3: * Fail
 4: ers
    anything
No match
    b\bc   
No match
    baccd
No match

/[a]/
    Abc
 0: A
  
/[a]/i
    Abc 
 0: b

/[a]+/
    AAAaAbc
 0: AAA
  
/[a]+/i
    AAAaAbc 
 0: bc

/[a]+/
    bbb\nccc
 0: bbb\x0accc
   
/[k]$/
    abc
 0: c
    *** Failers
 0: s
    abk   
No match
   
/[k]{2,3}$/
    abc
 0: abc
    kbc
 0: bc
    kabc 
 0: abc
    *** Failers
 0: ers
    abk
No match
    akb
No match
    akk 
No match

/\d{8,}\@.+[k]$/
    12345678\@a.b.c.d
 0: 12345678@a.b.c.d
    123456789\@x.y.z
 0: 123456789@x.y.z
    *** Failers
No match
    12345678\@x.y.uk
No match
    1234567\@a.b.c.d       
No match

/(a)\1{8,}/
    aaaaaaaaa
 0: aaaaaaaaa
 1: a
    aaaaaaaaaa
 0: aaaaaaaaaa
 1: a
    *** Failers
No match
    aaaaaaa   
No match

/[a]/
    aaaabcd
 0: b
    aaAabcd 
 0: A

/[a]/i
    aaaabcd
 0: b
    aaAabcd 
 0: b

/[az]/
    aaaabcd
 0: b
    aaAabcd 
 0: A

/[az]/i
    aaaabcd
 0: b
    aaAabcd 
 0: b

/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
 \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
 0: \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 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]_`abcdefghijklmnopqrstuvwxyz{|}~\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

/P[*]TAIRE[*]{1,6}?LL/
    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
 0: PSTAIREISLL

/P[*]TAIRE[*]{1,}?LL/
    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
 0: PSTAIREISLL

/(\.\d\d[1-9]?)\d+/
    1.230003938
 0: .230003938
 1: .23
    1.875000282   
 0: .875000282
 1: .875
    1.235  
 0: .235
 1: .23
                  
/(\.\d\d((?=0)|\d(?=\d)))/
    1.230003938      
 0: .23
 1: .23
 2: 
    1.875000282
 0: .875
 1: .875
 2: 5
    *** Failers 
No match
    1.235 
No match
    
/a(?)b/
    ab 
 0: ab
 
/\b(foo)\s+(\w+)/i
    Food is on the foo table
 0: foo table
 1: foo
 2: table
    
/foo(.*)bar/
    The food is under the bar in the barn.
 0: food is under the bar in the bar
 1: d is under the bar in the 
    
/foo(.*?)bar/  
    The food is under the bar in the barn.
 0: food is under the bar
 1: d is under the 

/(.*)(\d*)/
    I have 2 numbers: 53147
 0: I have 2 numbers: 53147
 1: I have 2 numbers: 53147
 2: 
    
/(.*)(\d+)/
    I have 2 numbers: 53147
 0: I have 2 numbers: 53147
 1: I have 2 numbers: 5314
 2: 7
 
/(.*?)(\d*)/
    I have 2 numbers: 53147
 0: 
 1: 
 2: 

/(.*?)(\d+)/
    I have 2 numbers: 53147
 0: I have 2
 1: I have 
 2: 2

/(.*)(\d+)$/
    I have 2 numbers: 53147
 0: I have 2 numbers: 53147
 1: I have 2 numbers: 5314
 2: 7

/(.*?)(\d+)$/
    I have 2 numbers: 53147
 0: I have 2 numbers: 53147
 1: I have 2 numbers: 
 2: 53147

/(.*)\b(\d+)$/
    I have 2 numbers: 53147
 0: I have 2 numbers: 53147
 1: I have 2 numbers: 
 2: 53147

/(.*\D)(\d+)$/
    I have 2 numbers: 53147
 0: I have 2 numbers: 53147
 1: I have 2 numbers: 
 2: 53147

/\D*(?!123)/
    ABC123
 0: AB
     
/(\D*)(?=\d)(?!123)/
    ABC445
 0: ABC
 1: ABC
    *** Failers
No match
    ABC123
No match
    
/[W-]46]/
    W46]789 
 0: W46]
    -46]789
 0: -46]
    *** Failers
No match
    Wall
No match
    Zebra
No match
    42
No match
    [abcd] 
No match
    ]abcd[
No match
       
/[W-\]46]/
    W46]789 
 0: W
    Wall
 0: W
    Zebra
 0: Z
    Xylophone  
 0: X
    42
 0: 4
    [abcd] 
 0: [
    ]abcd[
 0: ]
    \\backslash 
 0: \
    *** Failers
No match
    -46]789
No match
    well
No match
    
/\d\d\/\d\d\/\d\d\d\d/
    01/01/2000
 0: 01/01/2000

/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
  word cat dog elephant mussel cow horse canary baboon snake shark otherword
 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
  word cat dog elephant mussel cow horse canary baboon snake shark
No match

/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
No match

/(a){0,0}/
    bcd
 0: 
    abc
 0: 
    aab     
 0: 

/(a){0,1}/
    bcd
 0: 
    abc
 0: a
 1: a
    aab  
 0: a
 1: a

/(a){0,2}/
    bcd
 0: 
    abc
 0: a
 1: a
    aab  
 0: aa
 1: a

/(a){0,3}/
    bcd
 0: 
    abc
 0: a
 1: a
    aab
 0: aa
 1: a
    aaa   
 0: aaa
 1: a

/(a){0,}/
    bcd
 0: 
    abc
 0: a
 1: a
    aab
 0: aa
 1: a
    aaa
 0: aaa
 1: a
    aaaaaaaa    
 0: aaaaaaaa
 1: a

/(a){1,1}/
    bcd
No match
    abc
 0: a
 1: a
    aab  
 0: a
 1: a

/(a){1,2}/
    bcd
No match
    abc
 0: a
 1: a
    aab  
 0: aa
 1: a

/(a){1,3}/
    bcd
No match
    abc
 0: a
 1: a
    aab
 0: aa
 1: a
    aaa   
 0: aaa
 1: a

/(a){1,}/
    bcd
No match
    abc
 0: a
 1: a
    aab
 0: aa
 1: a
    aaa
 0: aaa
 1: a
    aaaaaaaa    
 0: aaaaaaaa
 1: a

/.*\.gif/
    borfle\nbib.gif\nno
 0: bib.gif

/.{0,}\.gif/
    borfle\nbib.gif\nno
 0: bib.gif

/.*\.gif/m
    borfle\nbib.gif\nno
 0: bib.gif

/.*\.gif/s
    borfle\nbib.gif\nno
 0: borfle\x0abib.gif

/.*\.gif/ms
    borfle\nbib.gif\nno
 0: borfle\x0abib.gif
    
/.*$/
    borfle\nbib.gif\nno
 0: no

/.*$/m
    borfle\nbib.gif\nno
 0: borfle

/.*$/s
    borfle\nbib.gif\nno
 0: borfle\x0abib.gif\x0ano

/.*$/ms
    borfle\nbib.gif\nno
 0: borfle\x0abib.gif\x0ano
    
/.*$/
    borfle\nbib.gif\nno\n
 0: no

/.*$/m
    borfle\nbib.gif\nno\n
 0: borfle

/.*$/s
    borfle\nbib.gif\nno\n
 0: borfle\x0abib.gif\x0ano\x0a

/.*$/ms
    borfle\nbib.gif\nno\n
 0: borfle\x0abib.gif\x0ano\x0a
    
/(.*X|B)/
    abcde\n1234Xyz
 0: 1234X
 1: 1234X
    BarFoo 
 0: B
 1: B
    *** Failers
No match
    abcde\nBar  
No match

/(.*X|B)/m
    abcde\n1234Xyz
 0: 1234X
 1: 1234X
    BarFoo 
 0: B
 1: B
    abcde\nBar  
 0: B
 1: B

/(.*X|B)/s
    abcde\n1234Xyz
 0: abcde\x0a1234X
 1: abcde\x0a1234X
    BarFoo 
 0: B
 1: B
    *** Failers
No match
    abcde\nBar  
No match

/(.*X|B)/ms
    abcde\n1234Xyz
 0: abcde\x0a1234X
 1: abcde\x0a1234X
    BarFoo 
 0: B
 1: B
    abcde\nBar  
 0: B
 1: B

/(?s)(.*X|B)/
    abcde\n1234Xyz
 0: abcde\x0a1234X
 1: abcde\x0a1234X
    BarFoo 
 0: B
 1: B
    *** Failers 
No match
    abcde\nBar  
No match

/(?s:.*X|B)/
    abcde\n1234Xyz
 0: abcde\x0a1234X
    BarFoo 
 0: B
    *** Failers 
No match
    abcde\nBar  
No match

/.*B/
    **** Failers
No match
    abc\nB
No match
     
/(?s).*B/
    abc\nB
 0: abc\x0aB

/(?m).*B/
    abc\nB
 0: B
     
/(?ms).*B/
    abc\nB
 0: abc\x0aB

/(?ms)B/
    abc\nB
 0: B

/(?s)B$/
    B\n
 0: B

/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
    123456654321
 0: 123456654321
  
/\d\d\d\d\d\d\d\d\d\d\d\d/
    123456654321 
 0: 123456654321

/[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
    123456654321
 0: 123456654321
  
/[abc]{12}/
    abcabcabcabc
 0: abcabcabcabc
    
/[a-c]{12}/
    abcabcabcabc
 0: abcabcabcabc
    
/(a|b|c){12}/
    abcabcabcabc 
 0: abcabcabcabc
 1: c

/[abcdefghijklmnopqrstuvwxy0123456789]/
    n
 0: n
    *** Failers 
No match
    z 
No match

/abcde{0,0}/
    abcd
 0: abcd
    *** Failers
No match
    abce  
No match

/ab[cd]{0,0}e/
    abe
 0: abe
    *** Failers
No match
    abcde 
No match
    
/ab(c){0,0}d/
    abd
 0: abd
    *** Failers
No match
    abcd   
No match

/a(b*)/
    a
 0: a
 1: 
    ab
 0: ab
 1: b
    abbbb
 0: abbbb
 1: bbbb
    *** Failers
 0: a
 1: 
    bbbbb    
No match
    
/ab\d{0}e/
    abe
 0: abe
    *** Failers
No match
    ab1e   
No match
    
/"([\\"]+|\\.)*"/
    the \"quick\" brown fox
 0: "quick"
 1: quick
    \"the \\\"quick\\\" brown fox\" 
 0: "the \"quick\" brown fox"
 1:  brown fox

/.*?/g+
    abc
 0: 
 0+ abc
 0: a
 0+ bc
 0: 
 0+ bc
 0: b
 0+ c
 0: 
 0+ c
 0: c
 0+ 
 0: 
 0+ 
  
/\b/g+
    abc 
 0: 
 0+ abc
 0: 
 0+ 

/\b/+g
    abc 
 0: 
 0+ abc
 0: 
 0+ 

//g
    abc
 0: 
 0: 
 0: 
 0: 

/<tr([\w\W\s\d][<>]{0,})><TD([\w\W\s\d][<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><\/TR>/is
  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
 1:  BGCOLOR='#DBE9E9'
 2:  align=left valign=top
 3: 43.
 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
 5: 
 6: 
 7: <unset>
 8:  align=left valign=top
 9: Lega lstaff.com
10:  align=left valign=top
11: CA - Statewide

/a[a]b/
    acb
 0: acb
    a\nb
 0: a\x0ab
    
/a.b/
    acb
 0: acb
    *** Failers 
No match
    a\nb   
No match
    
/a[a]b/s
    acb
 0: acb
    a\nb  
 0: a\x0ab
    
/a.b/s
    acb
 0: acb
    a\nb  
 0: a\x0ab

/(b+?|a){1,2}?c/
    bac
 0: bac
 1: a
    bbac
 0: bbac
 1: a
    bbbac
 0: bbbac
 1: a
    bbbbac
 0: bbbbac
 1: a
    bbbbbac 
 0: bbbbbac
 1: a

/(b+|a){1,2}?c/
    bac
 0: bac
 1: a
    bbac
 0: bbac
 1: a
    bbbac
 0: bbbac
 1: a
    bbbbac
 0: bbbbac
 1: a
    bbbbbac 
 0: bbbbbac
 1: a
    
/(?!\A)x/m
    x\nb\n
No match
    a\bx\n  
 0: x
    
/\x0{ab}/
    \0{ab} 
 0: \x00{ab}

/(A|B)*?CD/
    CD 
 0: CD
    
/(A|B)*CD/
    CD 
 0: CD

/(AB)*?\1/
    ABABAB
 0: ABAB
 1: AB

/(AB)*\1/
    ABABAB
 0: ABABAB
 1: AB
    
/(?<!bar)foo/
    foo
 0: foo
    catfood
 0: foo
    arfootle
 0: foo
    rfoosh
 0: foo
    *** Failers
No match
    barfoo
No match
    towbarfoo
No match

/\w{3}(?<!bar)foo/
    catfood
 0: catfoo
    *** Failers
No match
    foo
No match
    barfoo
No match
    towbarfoo
No match

/(?<=(foo)a)bar/
    fooabar
 0: bar
 1: foo
    *** Failers
No match
    bar
No match
    foobbar
No match
      
/\Aabc\z/m
    abc
 0: abc
    *** Failers
No match
    abc\n   
No match
    qqq\nabc
No match
    abc\nzzz
No match
    qqq\nabc\nzzz
No match

"(?>.*/)foo"
    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
No match

"(?>.*/)foo"
    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo

/(?>(\.\d\d[1-9]?))\d+/
    1.230003938
 0: .230003938
 1: .23
    1.875000282
 0: .875000282
 1: .875
    *** Failers 
No match
    1.235 
No match

/((?>\w+)|(?>\s+))*$/
    now is the time for all good men to come to the aid of the party
 0: now is the time for all good men to come to the aid of the party
 1: party
    *** Failers
No match
    this is not a line with only words and spaces!
No match
    
/(\d+)(\w)/
    12345a
 0: 12345a
 1: 12345
 2: a
    12345+ 
 0: 12345
 1: 1234
 2: 5

/((?>\d+))(\w)/
    12345a
 0: 12345a
 1: 12345
 2: a
    *** Failers
No match
    12345+ 
No match

/(?>a+)b/
    aaab
 0: aaab

/((?>a+)b)/
    aaab
 0: aaab
 1: aaab

/(?>(a+))b/
    aaab
 0: aaab
 1: aaa

/(?>b)+/
    aaabbbccc
 0: bbb

/(?>a+|b+|c+)*c/
    aaabbbbccccd
 0: aaabbbbc

/((?>[()]+)|\([()]*\))+/
    ((abc(ade)ufh()()x
 0: abc(ade)ufh()()x
 1: x
    
/\(((?>[()]+)|\([()]+\))+\)/ 
    (abc)
 0: (abc)
 1: abc
    (abc(def)xyz)
 0: (abc(def)xyz)
 1: xyz
    *** Failers
No match
    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
No match

/a(?-i)b/i
    ab
 0: ab
    Ab
 0: Ab
    *** Failers 
No match
    aB
No match
    AB
No match
        
/(a (?x)b c)d e/
    a bcd e
 0: a bcd e
 1: a bc
    *** Failers
No match
    a b cd e
No match
    abcd e   
No match
    a bcde 
No match
 
/(a b(?x)c d (?-x)e f)/
    a bcde f
 0: a bcde f
 1: a bcde f
    *** Failers
No match
    abcdef  
No match

/(a(?i)b)c/
    abc
 0: abc
 1: ab
    aBc
 0: aBc
 1: aB
    *** Failers
No match
    abC
No match
    aBC  
No match
    Abc
No match
    ABc
No match
    ABC
No match
    AbC
No match
    
/a(?i:b)c/
    abc
 0: abc
    aBc
 0: aBc
    *** Failers 
No match
    ABC
No match
    abC
No match
    aBC
No match
    
/a(?i:b)*c/
    aBc
 0: aBc
    aBBc
 0: aBBc
    *** Failers 
No match
    aBC
No match
    aBBC
No match
    
/a(?=b(?i)c)\w\wd/
    abcd
 0: abcd
    abCd
 0: abCd
    *** Failers
No match
    aBCd
No match
    abcD     
No match
    
/(?s-i:more.*than).*million/i
    more than million
 0: more than million
    more than MILLION
 0: more than MILLION
    more \n than Million 
 0: more \x0a than Million
    *** Failers
No match
    MORE THAN MILLION    
No match
    more \n than \n million 
No match

/(?:(?s-i)more.*than).*million/i
    more than million
 0: more than million
    more than MILLION
 0: more than MILLION
    more \n than Million 
 0: more \x0a than Million
    *** Failers
No match
    MORE THAN MILLION    
No match
    more \n than \n million 
No match
    
/(?>a(?i)b+)+c/ 
    abc
 0: abc
    aBbc
 0: aBbc
    aBBc 
 0: aBBc
    *** Failers
No match
    Abc
No match
    abAb    
No match
    abbC 
No match
    
/(?=a(?i)b)\w\wc/
    abc
 0: abc
    aBc
 0: aBc
    *** Failers
No match
    Ab 
No match
    abC
No match
    aBC     
No match
    
/(?<=a(?i)b)(\w\w)c/
    abxxc
 0: xxc
 1: xx
    aBxxc
 0: xxc
 1: xx
    *** Failers
No match
    Abxxc
No match
    ABxxc
No match
    abxxC      
No match

/(?:(a)|b)(?(1)A|B)/
    aA
 0: aA
 1: a
    bB
 0: bB
    *** Failers
No match
    aB
No match
    bA    
No match

/(a)?(?(1)a|b)+$/
    aa
 0: aa
 1: a
    b
 0: b
    bb  
 0: bb
    *** Failers
No match
    ab   
No match

/(?(?=abc)\w{3}:|\d\d)$/
    abc:
 0: abc:
    12
 0: 12
    *** Failers
No match
    123
No match
    xyz    
No match

/(?(?!abc)\d\d|\w{3}:)$/
    abc:
 0: abc:
    12
 0: 12
    *** Failers
No match
    123
No match
    xyz    
No match
    
/(?(?<=foo)bar|cat)/
    foobar
 0: bar
    cat
 0: cat
    fcat
 0: cat
    focat   
 0: cat
    *** Failers
No match
    foocat  
No match

/(?(?<!foo)cat|bar)/
    foobar
 0: bar
    cat
 0: cat
    fcat
 0: cat
    focat   
 0: cat
    *** Failers
No match
    foocat  
No match

/( \( )? [()]+ (?(1) \) |) /x
    abcd
 0: abcd
    (abcd)
 0: (abcd)
 1: (
    the quick (abcd) fox
 0: the quick 
    (abcd   
 0: abcd

/( \( )? [()]+ (?(1) \) ) /x
    abcd
 0: abcd
    (abcd)
 0: (abcd)
 1: (
    the quick (abcd) fox
 0: the quick 
    (abcd   
 0: abcd

/(?(2)a|(1)(2))+$/
    12
 0: 12
 1: 1
 2: 2
    12a
 0: 12a
 1: 1
 2: 2
    12aa
 0: 12aa
 1: 1
 2: 2
    *** Failers
No match
    1234    
No match

/((?i)blah)\s+\1/
    blah blah
 0: blah blah
 1: blah
    BLAH BLAH
 0: BLAH BLAH
 1: BLAH
    Blah Blah
 0: Blah Blah
 1: Blah
    blaH blaH
 0: blaH blaH
 1: blaH
    *** Failers
No match
    blah BLAH
No match
    Blah blah      
No match
    blaH blah 
No match

/((?i)blah)\s+(?i:\1)/
    blah blah
 0: blah blah
 1: blah
    BLAH BLAH
 0: BLAH BLAH
 1: BLAH
    Blah Blah
 0: Blah Blah
 1: Blah
    blaH blaH
 0: blaH blaH
 1: blaH
    blah BLAH
 0: blah BLAH
 1: blah
    Blah blah      
 0: Blah blah
 1: Blah
    blaH blah 
 0: blaH blah
 1: blaH

/(?>a*)*/
    a
 0: a
    aa
 0: aa
    aaaa
 0: aaaa
    
/(abc|)+/
    abc
 0: abc
 1: 
    abcabc
 0: abcabc
 1: 
    abcabcabc
 0: abcabcabc
 1: 
    xyz      
 0: 
 1: 

/([a]*)*/
    a
 0: a
 1: 
    aaaaa 
 0: aaaaa
 1: 
 
/([ab]*)*/
    a
 0: a
 1: 
    b
 0: b
 1: 
    ababab
 0: ababab
 1: 
    aaaabcde
 0: aaaab
 1: 
    bbbb    
 0: bbbb
 1: 
 
/([a]*)*/
    b
 0: b
 1: 
    bbbb
 0: bbbb
 1: 
    aaa   
 0: 
 1: 
 
/([ab]*)*/
    cccc
 0: cccc
 1: 
    abab  
 0: 
 1: 
 
/([a]*?)*/
    a
 0: 
 1: 
    aaaa 
 0: 
 1: 
 
/([ab]*?)*/
    a
 0: 
 1: 
    b
 0: 
 1: 
    abab
 0: 
 1: 
    baba   
 0: 
 1: 
 
/([a]*?)*/
    b
 0: 
 1: 
    bbbb
 0: 
 1: 
    aaa   
 0: 
 1: 
 
/([ab]*?)*/
    c
 0: 
 1: 
    cccc
 0: 
 1: 
    baba   
 0: 
 1: 
 
/(?>a*)*/
    a
 0: a
    aaabcde 
 0: aaa
 
/((?>a*))*/
    aaaaa
 0: aaaaa
 1: 
    aabbaa 
 0: aa
 1: 
 
/((?>a*?))*/
    aaaaa
 0: 
 1: 
    aabbaa 
 0: 
 1: 

/(?(?=[a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
    12-sep-98
 0: 12-sep-98
    12-09-98
 0: 12-09-98
    *** Failers
No match
    sep-12-98
No match
        
/(?<=(foo))bar\1/
    foobarfoo
 0: barfoo
 1: foo
    foobarfootling 
 0: barfoo
 1: foo
    *** Failers
No match
    foobar
No match
    barfoo   
No match

/(?i:saturday|sunday)/
    saturday
 0: saturday
    sunday
 0: sunday
    Saturday
 0: Saturday
    Sunday
 0: Sunday
    SATURDAY
 0: SATURDAY
    SUNDAY
 0: SUNDAY
    SunDay
 0: SunDay
    
/(a(?i)bc|BB)x/
    abcx
 0: abcx
 1: abc
    aBCx
 0: aBCx
 1: aBC
    bbx
 0: bbx
 1: bb
    BBx
 0: BBx
 1: BB
    *** Failers
No match
    abcX
No match
    aBCX
No match
    bbX
No match
    BBX               
No match

/([ab](?i)[cd]|[ef])/
    ac
 0: ac
 1: ac
    aC
 0: aC
 1: aC
    bD
 0: bD
 1: bD
    elephant
 0: e
 1: e
    Europe 
 0: E
 1: E
    frog
 0: f
 1: f
    France
 0: F
 1: F
    *** Failers
No match
    Africa     
No match

/(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
    ab
 0: ab
 1: ab
    aBd
 0: aBd
 1: aBd
    xy
 0: xy
 1: xy
    xY
 0: xY
 1: xY
    zebra
 0: z
 1: z
    Zambesi
 0: Z
 1: Z
    *** Failers
No match
    aCD  
No match
    XY  
No match

/(?<=foo\n)bar/m
    foo\nbar
 0: bar
    *** Failers
No match
    bar
No match
    baz\nbar   
No match

/(?<=(?<!foo)bar)baz/
    barbaz
 0: baz
    barbarbaz 
 0: baz
    koobarbaz 
 0: baz
    *** Failers
No match
    baz
No match
    foobarbaz 
No match

/The cases of aaaa and aaaaaa are missed out below because Perl does things/
/differently. We know that odd, and maybe incorrect, things happen with/
No match
/recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
No match

/(a\1?){4}$/
    a
No match
    aa
No match
    aaa
No match
    aaaaa
 0: aaaaa
 1: a
    aaaaaaa
 0: aaaaaaa
 1: a
    aaaaaaaa
No match
    aaaaaaaaa
No match
    aaaaaaaaaa
 0: aaaaaaaaaa
 1: aaaa
    aaaaaaaaaaa
No match
    aaaaaaaaaaaa
No match
    aaaaaaaaaaaaa
No match
    aaaaaaaaaaaaaa
No match
    aaaaaaaaaaaaaaa
No match
    aaaaaaaaaaaaaaaa               
No match

/(a\1?)(a\1?)(a\2?)(a\3?)$/
    a
No match
    aa
No match
    aaa
No match
    aaaa
 0: aaaa
 1: a
 2: a
 3: a
 4: a
    aaaaa
 0: aaaaa
 1: a
 2: aa
 3: a
 4: a
    aaaaaa
 0: aaaaaa
 1: a
 2: aa
 3: a
 4: aa
    aaaaaaa
 0: aaaaaaa
 1: a
 2: aa
 3: aaa
 4: a
    aaaaaaaa
No match
    aaaaaaaaa
No match
    aaaaaaaaaa
 0: aaaaaaaaaa
 1: a
 2: aa
 3: aaa
 4: aaaa
    aaaaaaaaaaa
No match
    aaaaaaaaaaaa
No match
    aaaaaaaaaaaaa
No match
    aaaaaaaaaaaaaa
No match
    aaaaaaaaaaaaaaa
No match
    aaaaaaaaaaaaaaaa               
No match

/The following tests are taken from the Perl 5.005 test suite; some of them/
/are compatible with 5.004, but I'd rather not have to sort them out./
No match

/abc/
    abc
 0: abc
    xabcy
 0: abc
    ababc
 0: abc
    *** Failers
No match
    xbc
No match
    axc
No match
    abx
No match

/ab*c/
    abc
 0: abc

/ab*bc/
    abc
 0: abc
    abbc
 0: abbc
    abbbbc
 0: abbbbc

/.{1}/
    abbbbc
 0: a

/.{3,4}/
    abbbbc
 0: abbb

/ab{0,}bc/
    abbbbc
 0: abbbbc

/ab+bc/
    abbc
 0: abbc
    *** Failers
No match
    abc
No match
    abq
No match

/ab{1,}bc/

/ab+bc/
    abbbbc
 0: abbbbc

/ab{1,}bc/
    abbbbc
 0: abbbbc

/ab{1,3}bc/
    abbbbc
 0: abbbbc

/ab{3,4}bc/
    abbbbc
 0: abbbbc

/ab{4,5}bc/
    *** Failers
No match
    abq
No match
    abbbbc
No match

/ab?bc/
    abbc
 0: abbc
    abc
 0: abc

/ab{0,1}bc/
    abc
 0: abc

/ab?bc/

/ab?c/
    abc
 0: abc

/ab{0,1}c/
    abc
 0: abc

/abc$/
    abc
 0: abc
    *** Failers
No match
    abbbbc
No match
    abcc
No match

/abc/
    abcc
 0: abc

/abc$/

/abc$/
    aabc
 0: abc
    *** Failers
No match
    aabc
 0: abc
    aabcd
No match

//
    abc
 0: 

/$/
    abc
 0: 

/a.c/
    abc
 0: abc
    axc
 0: axc

/a.*c/
    axyzc
 0: axyzc

/a[bc]d/
    abd
 0: abd
    *** Failers
No match
    axyzd
No match
    abc
No match

/a[b-d]e/
    ace
 0: ace

/a[b-d]/
    aac
 0: ac

/a[-b]/
    a-
 0: a-

/a[b-]/
    a-
 0: a-

/a]/
    a]
 0: a]

/a[]]b/
    a]b
 0: a]b

/a[bc]d/
    aed
 0: aed
    *** Failers
No match
    abd
No match
    abd
No match

/a[-b]c/
    adc
 0: adc

/a[]b]c/
    adc
 0: adc
    *** Failers
No match
    a-c
 0: a-c
    a]c
No match

/\ba\b/
    a-
 0: a
    -a
 0: a
    -a-
 0: a

/\by\b/
    *** Failers
No match
    xy
No match
    yz
No match
    xyz
No match

/\Ba\B/
    *** Failers
 0: a
    a-
No match
    -a
No match
    -a-
No match

/\By\b/
    xy
 0: y

/\by\B/
    yz
 0: y

/\By\B/
    xyz
 0: y

/\w/
    a
 0: a

/\W/
    -
 0: -
    *** Failers
 0: *
    -
 0: -
    a
No match

/a\sb/
    a b
 0: a b

/a\Sb/
    a-b
 0: a-b
    *** Failers
No match
    a-b
 0: a-b
    a b
No match

/\d/
    1
 0: 1

/\D/
    -
 0: -
    *** Failers
 0: *
    -
 0: -
    1
No match

/[\w]/
    a
 0: a

/[\W]/
    -
 0: -
    *** Failers
 0: *
    -
 0: -
    a
No match

/a[\s]b/
    a b
 0: a b

/a[\S]b/
    a-b
 0: a-b
    *** Failers
No match
    a-b
 0: a-b
    a b
No match

/[\d]/
    1
 0: 1

/[\D]/
    -
 0: -
    *** Failers
 0: *
    -
 0: -
    1
No match

/ab|cd/
    abc
 0: ab
    abcd
 0: ab

/()ef/
    def
 0: ef
 1: 

/$b/

/a\(b/
    a(b
 0: a(b

/a\(*b/
    ab
 0: ab
    a((b
 0: a((b

/a\\b/
    a\b
No match

/((a))/
    abc
 0: a
 1: a
 2: a

/(a)b(c)/
    abc
 0: abc
 1: a
 2: c

/a+b+c/
    aabbabc
 0: abc

/a{1,}b{1,}c/
    aabbabc
 0: abc

/a.+?c/
    abcabc
 0: abc

/(a+|b)*/
    ab
 0: ab
 1: b

/(a+|b){0,}/
    ab
 0: ab
 1: b

/(a+|b)+/
    ab
 0: ab
 1: b

/(a+|b){1,}/
    ab
 0: ab
 1: b

/(a+|b)?/
    ab
 0: a
 1: a

/(a+|b){0,1}/
    ab
 0: a
 1: a

/[ab]*/
    cde
 0: cde

/abc/
    *** Failers
No match
    b
No match
    

/a*/
    

/([abc])*d/
    abbbcd
 0: abbbcd
 1: c

/([abc])*bcd/
    abcd
 0: abcd
 1: a

/a|b|c|d|e/
    e
 0: e

/(a|b|c|d|e)f/
    ef
 0: ef
 1: e

/abcd*efg/
    abcdefg
 0: abcdefg

/ab*/
    xabyabbbz
 0: ab
    xayabbbz
 0: a

/(ab|cd)e/
    abcde
 0: cde
 1: cd

/[abhgefdc]ij/
    hij
 0: hij

/(ab|cd)e/

/(abc|)ef/
    abcdef
 0: ef
 1: 

/(a|b)c*d/
    abcd
 0: bcd
 1: b

/(ab|ab*)bc/
    abc
 0: abc
 1: a

/a([bc]*)c*/
    abc
 0: abc
 1: bc

/a([bc]*)(c*d)/
    abcd
 0: abcd
 1: bc
 2: d

/a([bc]+)(c*d)/
    abcd
 0: abcd
 1: bc
 2: d

/a([bc]*)(c+d)/
    abcd
 0: abcd
 1: b
 2: cd

/a[bcd]*dcdcde/
    adcdcde
 0: adcdcde

/a[bcd]+dcdcde/
    *** Failers
No match
    abcde
No match
    adcdcde
No match

/(ab|a)b*c/
    abc
 0: abc
 1: ab

/((a)(b)c)(d)/
    abcd
 0: abcd
 1: abc
 2: a
 3: b
 4: d

/[a-zA-Z_][a-zA-Z0-9_]*/
    alpha
 0: alpha

/a(bc+|b[eh])g|.h$/
    abh
 0: bh

/(bc+d$|ef*g.|h?i(j|k))/
    effgz
 0: effgz
 1: effgz
    ij
 0: ij
 1: ij
 2: j
    reffgz
 0: effgz
 1: effgz
    *** Failers
No match
    effg
No match
    bcdd
No match

/((((((((((a))))))))))/
    a
 0: a
 1: a
 2: a
 3: a
 4: a
 5: a
 6: a
 7: a
 8: a
 9: a
10: a

/((((((((((a))))))))))\10/
    aa
 0: aa
 1: a
 2: a
 3: a
 4: a
 5: a
 6: a
 7: a
 8: a
 9: a
10: a

/(((((((((a)))))))))/
    a
 0: a
 1: a
 2: a
 3: a
 4: a
 5: a
 6: a
 7: a
 8: a
 9: a

/multiple words of text/
    *** Failers
No match
    aa
No match
    uh-uh
No match

/multiple words/
    multiple words, yeah
 0: multiple words

/(.*)c(.*)/
    abcde
 0: abcde
 1: ab
 2: de

/\((.*), (.*)\)/
    (a, b)
 0: (a, b)
 1: a
 2: b

/[k]/

/abcd/
    abcd
 0: abcd

/a(bc)d/
    abcd
 0: abcd
 1: bc

/a[-]?c/
    ac
 0: ac

/(abc)\1/
    abcabc
 0: abcabc
 1: abc

/([a-c]*)\1/
    abcabc
 0: abcabc
 1: abc

/(a)|\1/
    a
 0: a
 1: a
    *** Failers
 0: a
 1: a
    ab
 0: a
 1: a
    x
No match

/(([a-c])b*?\2)*/
    ababbbcbc
 0: ababb
 1: bb
 2: b

/(([a-c])b*?\2){3}/
    ababbbcbc
 0: ababbbcbc
 1: cbc
 2: c

/((\3|b)\2(a)x)+/
    aaaxabaxbaaxbbax
 0: bbax
 1: bbax
 2: b
 3: a

/((\3|b)\2(a)){2,}/
    bbaababbabaaaaabbaaaabba
 0: bbaaaabba
 1: bba
 2: b
 3: a

/abc/i
    ABC
 0: ABC
    XABCY
 0: ABC
    ABABC
 0: ABC
    *** Failers
No match
    aaxabxbaxbbx
No match
    XBC
No match
    AXC
No match
    ABX
No match

/ab*c/i
    ABC
 0: ABC

/ab*bc/i
    ABC
 0: ABC
    ABBC
 0: ABBC

/ab*?bc/i
    ABBBBC
 0: ABBBBC

/ab{0,}?bc/i
    ABBBBC
 0: ABBBBC

/ab+?bc/i
    ABBC
 0: ABBC

/ab+bc/i
    *** Failers
No match
    ABC
No match
    ABQ
No match

/ab{1,}bc/i

/ab+bc/i
    ABBBBC
 0: ABBBBC

/ab{1,}?bc/i
    ABBBBC
 0: ABBBBC

/ab{1,3}?bc/i
    ABBBBC
 0: ABBBBC

/ab{3,4}?bc/i
    ABBBBC
 0: ABBBBC

/ab{4,5}?bc/i
    *** Failers
No match
    ABQ
No match
    ABBBBC
No match

/ab??bc/i
    ABBC
 0: ABBC
    ABC
 0: ABC

/ab{0,1}?bc/i
    ABC
 0: ABC

/ab??bc/i

/ab??c/i
    ABC
 0: ABC

/ab{0,1}?c/i
    ABC
 0: ABC

/abc$/i
    ABC
 0: ABC
    *** Failers
No match
    ABBBBC
No match
    ABCC
No match

/abc/i
    ABCC
 0: ABC

/abc$/i

/abc$/i
    AABC
 0: ABC

//i
    ABC
 0: 

/$/i
    ABC
 0: 

/a.c/i
    ABC
 0: ABC
    AXC
 0: AXC

/a.*?c/i
    AXYZC
 0: AXYZC

/a.*c/i
    *** Failers
No match
    AABC
 0: AABC
    AXYZD
No match

/a[bc]d/i
    ABD
 0: ABD

/a[b-d]e/i
    ACE
 0: ACE
    *** Failers
No match
    ABC
No match
    ABD
No match

/a[b-d]/i
    AAC
 0: AC

/a[-b]/i
    A-
 0: A-

/a[b-]/i
    A-
 0: A-

/a]/i
    A]
 0: A]

/a[]]b/i
    A]B
 0: A]B

/a[bc]d/i
    AED
 0: AED

/a[-b]c/i
    ADC
 0: ADC
    *** Failers
No match
    ABD
No match
    A-C
No match

/a[]b]c/i
    ADC
 0: ADC

/ab|cd/i
    ABC
 0: AB
    ABCD
 0: AB

/()ef/i
    DEF
 0: EF
 1: 

/$b/i
    *** Failers
No match
    A]C
No match
    B
No match

/a\(b/i
    A(B
 0: A(B

/a\(*b/i
    AB
 0: AB
    A((B
 0: A((B

/a\\b/i
    A\B
No match

/((a))/i
    ABC
 0: A
 1: A
 2: A

/(a)b(c)/i
    ABC
 0: ABC
 1: A
 2: C

/a+b+c/i
    AABBABC
 0: ABC

/a{1,}b{1,}c/i
    AABBABC
 0: ABC

/a.+?c/i
    ABCABC
 0: ABC

/a.*?c/i
    ABCABC
 0: ABC

/a.{0,5}?c/i
    ABCABC
 0: ABC

/(a+|b)*/i
    AB
 0: AB
 1: B

/(a+|b){0,}/i
    AB
 0: AB
 1: B

/(a+|b)+/i
    AB
 0: AB
 1: B

/(a+|b){1,}/i
    AB
 0: AB
 1: B

/(a+|b)?/i
    AB
 0: A
 1: A

/(a+|b){0,1}/i
    AB
 0: A
 1: A

/(a+|b){0,1}?/i
    AB
 0: 

/[ab]*/i
    CDE
 0: CDE

/abc/i

/a*/i
    

/([abc])*d/i
    ABBBCD
 0: ABBBCD
 1: C

/([abc])*bcd/i
    ABCD
 0: ABCD
 1: A

/a|b|c|d|e/i
    E
 0: E

/(a|b|c|d|e)f/i
    EF
 0: EF
 1: E

/abcd*efg/i
    ABCDEFG
 0: ABCDEFG

/ab*/i
    XABYABBBZ
 0: AB
    XAYABBBZ
 0: A

/(ab|cd)e/i
    ABCDE
 0: CDE
 1: CD

/[abhgefdc]ij/i
    HIJ
 0: HIJ

/(ab|cd)e/i
    ABCDE
No match

/(abc|)ef/i
    ABCDEF
 0: EF
 1: 

/(a|b)c*d/i
    ABCD
 0: BCD
 1: B

/(ab|ab*)bc/i
    ABC
 0: ABC
 1: A

/a([bc]*)c*/i
    ABC
 0: ABC
 1: BC

/a([bc]*)(c*d)/i
    ABCD
 0: ABCD
 1: BC
 2: D

/a([bc]+)(c*d)/i
    ABCD
 0: ABCD
 1: BC
 2: D

/a([bc]*)(c+d)/i
    ABCD
 0: ABCD
 1: B
 2: CD

/a[bcd]*dcdcde/i
    ADCDCDE
 0: ADCDCDE

/a[bcd]+dcdcde/i

/(ab|a)b*c/i
    ABC
 0: ABC
 1: AB

/((a)(b)c)(d)/i
    ABCD
 0: ABCD
 1: ABC
 2: A
 3: B
 4: D

/[a-zA-Z_][a-zA-Z0-9_]*/i
    ALPHA
 0: ALPHA

/a(bc+|b[eh])g|.h$/i
    ABH
 0: BH

/(bc+d$|ef*g.|h?i(j|k))/i
    EFFGZ
 0: EFFGZ
 1: EFFGZ
    IJ
 0: IJ
 1: IJ
 2: J
    REFFGZ
 0: EFFGZ
 1: EFFGZ
    *** Failers
No match
    ADCDCDE
No match
    EFFG
No match
    BCDD
No match

/((((((((((a))))))))))/i
    A
 0: A
 1: A
 2: A
 3: A
 4: A
 5: A
 6: A
 7: A
 8: A
 9: A
10: A

/((((((((((a))))))))))\10/i
    AA
 0: AA
 1: A
 2: A
 3: A
 4: A
 5: A
 6: A
 7: A
 8: A
 9: A
10: A

/(((((((((a)))))))))/i
    A
 0: A
 1: A
 2: A
 3: A
 4: A
 5: A
 6: A
 7: A
 8: A
 9: A

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
    A
 0: A
 1: A

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
    C
 0: C
 1: C

/multiple words of text/i
    *** Failers
No match
    AA
No match
    UH-UH
No match

/multiple words/i
    MULTIPLE WORDS, YEAH
 0: MULTIPLE WORDS

/(.*)c(.*)/i
    ABCDE
 0: ABCDE
 1: AB
 2: DE

/\((.*), (.*)\)/i
    (A, B)
 0: (A, B)
 1: A
 2: B

/[k]/i

/abcd/i
    ABCD
 0: ABCD

/a(bc)d/i
    ABCD
 0: ABCD
 1: BC

/a[-]?c/i
    AC
 0: AC

/(abc)\1/i
    ABCABC
 0: ABCABC
 1: ABC

/([a-c]*)\1/i
    ABCABC
 0: ABCABC
 1: ABC

/a(?!b)./
    abad
 0: ad

/a(?=d)./
    abad
 0: ad

/a(?=c|d)./
    abad
 0: ad

/a(?:b|c|d)(.)/
    ace
 0: ace
 1: e

/a(?:b|c|d)*(.)/
    ace
 0: ace
 1: e

/a(?:b|c|d)+?(.)/
    ace
 0: ace
 1: e
    acdbcdbe
 0: acd
 1: d

/a(?:b|c|d)+(.)/
    acdbcdbe
 0: acdbcdbe
 1: e

/a(?:b|c|d){2}(.)/
    acdbcdbe
 0: acdb
 1: b

/a(?:b|c|d){4,5}(.)/
    acdbcdbe
 0: acdbcdb
 1: b

/a(?:b|c|d){4,5}?(.)/
    acdbcdbe
 0: acdbcd
 1: d

/((foo)|(bar))*/
    foobar
 0: foobar
 1: bar
 2: foo
 3: bar

/a(?:b|c|d){6,7}(.)/
    acdbcdbe
 0: acdbcdbe
 1: e

/a(?:b|c|d){6,7}?(.)/
    acdbcdbe
 0: acdbcdbe
 1: e

/a(?:b|c|d){5,6}(.)/
    acdbcdbe
 0: acdbcdbe
 1: e

/a(?:b|c|d){5,6}?(.)/
    acdbcdbe
 0: acdbcdb
 1: b

/a(?:b|c|d){5,7}(.)/
    acdbcdbe
 0: acdbcdbe
 1: e

/a(?:b|c|d){5,7}?(.)/
    acdbcdbe
 0: acdbcdb
 1: b

/a(?:b|(c|e){1,2}?|d)+?(.)/
    ace
 0: ace
 1: c
 2: e

/(.+)?B/
    AB
 0: AB
 1: A

/([a-z])|(\)$/
    .
 0: .
 1: .

/[<>]&/
    <&OUT
 0: <&

/(a\1?){4}$/
    aaaaaaaaaa
 0: aaaaaaaaaa
 1: aaaa
    *** Failers
No match
    AB
No match
    aaaaaaaaa
No match
    aaaaaaaaaaa
No match

/(a(?(1)\1)){4}$/
    aaaaaaaaaa
 0: aaaaaaaaaa
 1: aaaa
    *** Failers
No match
    aaaaaaaaa
No match
    aaaaaaaaaaa
No match

/(?:(f)(o)(o)|(b)(a)(r))*/
    foobar
 0: foobar
 1: f
 2: o
 3: o
 4: b
 5: a
 6: r

/(?<=a)b/
    ab
 0: b
    *** Failers
No match
    cb
No match
    b
No match

/(?<!c)b/
    ab
 0: b
    b
 0: b
    b
 0: b

/(?:..)*a/
    aba
 0: aba

/(?:..)*?a/
    aba
 0: a

/(?:b|a(?=(.)))*\1/
    abc
 0: ab
 1: b

/(){3,5}/
    abc
 0: 
 1: 

/(a+)*ax/
    aax
 0: aax
 1: a

/((a|b)+)*ax/
    aax
 0: aax
 1: a
 2: a

/((a|bc)+)*ax/
    aax
 0: aax
 1: a
 2: a

/(a|x)*ab/
    cab
 0: ab

/(a)*ab/
    cab
 0: ab

/(?:(?i)a)b/
    ab
 0: ab

/((?i)a)b/
    ab
 0: ab
 1: a

/(?:(?i)a)b/
    Ab
 0: Ab

/((?i)a)b/
    Ab
 0: Ab
 1: A

/(?:(?i)a)b/
    *** Failers
No match
    cb
No match
    aB
No match

/((?i)a)b/

/(?i:a)b/
    ab
 0: ab

/((?i:a))b/
    ab
 0: ab
 1: a

/(?i:a)b/
    Ab
 0: Ab

/((?i:a))b/
    Ab
 0: Ab
 1: A

/(?i:a)b/
    *** Failers
No match
    aB
No match
    aB
No match

/((?i:a))b/

/(?:(?-i)a)b/i
    ab
 0: ab

/((?-i)a)b/i
    ab
 0: ab
 1: a

/(?:(?-i)a)b/i
    aB
 0: aB

/((?-i)a)b/i
    aB
 0: aB
 1: a

/(?:(?-i)a)b/i
    *** Failers
No match
    aB
 0: aB
    Ab
No match

/((?-i)a)b/i

/(?:(?-i)a)b/i
    aB
 0: aB

/((?-i)a)b/i
    aB
 0: aB
 1: a

/(?:(?-i)a)b/i
    *** Failers
No match
    Ab
No match
    AB
No match

/((?-i)a)b/i

/(?-i:a)b/i
    ab
 0: ab

/((?-i:a))b/i
    ab
 0: ab
 1: a

/(?-i:a)b/i
    aB
 0: aB

/((?-i:a))b/i
    aB
 0: aB
 1: a

/(?-i:a)b/i
    *** Failers
No match
    AB
No match
    Ab
No match

/((?-i:a))b/i

/(?-i:a)b/i
    aB
 0: aB

/((?-i:a))b/i
    aB
 0: aB
 1: a

/(?-i:a)b/i
    *** Failers
No match
    Ab
No match
    AB
No match

/((?-i:a))b/i

/((?-i:a.))b/i
    *** Failers
No match
    AB
No match
    a\nB
No match

/((?s-i:a.))b/i
    a\nB
 0: a\x0aB
 1: a\x0a

/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
    cabbbb
 0: cabbbb

/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb

/(ab)\d\1/i
    Ab4ab
 0: Ab4ab
 1: Ab
    ab4Ab
 0: ab4Ab
 1: ab

/foo\w*\d{4}baz/
    foobar1234baz
 0: foobar1234baz

/x(~~)*(?:(?:F)?)?/
    x~~
 0: x~~
 1: ~~

/a(?#xxx){3}c/
    aaac
 0: aaac

/a (?#xxx) (?#yyy) {3}c/x
    aaac
 0: aaac

/(?<![cd])b/
    *** Failers
No match
    B\nB
No match
    dbcb
No match

/(?<![cd])[ab]/
    dbaacb
 0: a

/(?<!(c|d))b/

/(?<!(c|d))[ab]/
    dbaacb
 0: a

/(?<!cd)[ab]/
    cdaccb
 0: b

/(?:a?b?)*$/
    \
 0: 
    a
 0: a
    ab
 0: ab
    aaa   
 0: aaa
    *** Failers
No match
    dbcb
No match
    a--
No match
    aa-- 
No match

/((?s)a(.))((?m)b$)/
    a\nb\nc\n
 0: a\x0ab
 1: a\x0a
 2: \x0a
 3: b

/((?m)b$)/
    a\nb\nc\n
 0: b
 1: b

/(?m)b/
    a\nb\n
 0: b

/(?m)(b)/
    a\nb\n
 0: b
 1: b

/((?m)b)/
    a\nb\n
 0: b
 1: b

/\n((?m)b)/
    a\nb\n
 0: \x0ab
 1: b

/((?s).)c(?!.)/
    a\nb\nc\n
 0: \x0ac
 1: \x0a
    a\nb\nc\n
 0: \x0ac
 1: \x0a

/((?s)b.)c(?!.)/
    a\nb\nc\n
 0: b\x0ac
 1: b\x0a
    a\nb\nc\n
 0: b\x0ac
 1: b\x0a

/b/

/()b/
    *** Failers
No match
    a\nb\nc\n
No match
    a\nb\nc\n
No match

/((?m)b)/
    a\nb\nc\n
 0: b
 1: b

/(x)?(?(1)a|b)/
    *** Failers
No match
    a
No match
    a
No match

/(x)?(?(1)b|a)/
    a
 0: a

/()?(?(1)b|a)/
    a
 0: a

/()(?(1)b|a)/

/()?(?(1)a|b)/
    a
 0: a
 1: 

/(\()?blah(?(1)(\)))$/
    (blah)
 0: (blah)
 1: (
 2: )
    blah
 0: blah
    *** Failers
No match
    a
No match
    blah)
No match
    (blah
No match

/(\(+)?blah(?(1)(\)))$/
    (blah)
 0: (blah)
 1: (
 2: )
    blah
 0: blah
    *** Failers
No match
    blah)
No match
    (blah
No match

/(?(?!a)a|b)/

/(?(?!a)b|a)/
    a
 0: a

/(?(?=a)b|a)/
    *** Failers
No match
    a
No match
    a
No match

/(?(?=a)a|b)/
    a
 0: a

/(?=(a+?))(\1ab)/
    aaab
 0: aab
 1: a
 2: aab

/(?=(a+?))\1ab/

/(\w+:)+/
    one:
 0: one:
 1: one:

/$(?<=(a))/
    a
 0: 
 1: a

/(?=(a+?))(\1ab)/
    aaab
 0: aab
 1: a
 2: aab

/(?=(a+?))\1ab/
    *** Failers
No match
    aaab
No match
    aaab
No match

/([\w:]+::)?(\w+)$/
    abcd
 0: abcd
 1: <unset>
 2: abcd
    xy:z:::abcd
 0: xy:z:::abcd
 1: xy:z:::
 2: abcd

/[bcd]*(c+)/
    aexycd
 0: aexyc
 1: c

/(a*)b+/
    caab
 0: aab
 1: aa

/([\w:]+::)?(\w+)$/
    abcd
 0: abcd
 1: <unset>
 2: abcd
    xy:z:::abcd
 0: xy:z:::abcd
 1: xy:z:::
 2: abcd
    *** Failers
 0: Failers
 1: <unset>
 2: Failers
    abcd:
No match
    abcd:
No match

/[bcd]*(c+)/
    aexycd
 0: aexyc
 1: c

/(>a+)ab/

/(?>a+)b/
    aaab
 0: aaab

/([[:]+)/
    a:[b]:
 0: :[
 1: :[

/([[=]+)/
    a=[b]=
 0: =[
 1: =[

/([[.]+)/
    a.[b].
 0: .[
 1: .[

/((?>a+)b)/
    aaab
 0: aaab
 1: aaab

/(?>(a+))b/
    aaab
 0: aaab
 1: aaa

/((?>[()]+)|\([()]*\))+/
    ((abc(ade)ufh()()x
 0: abc(ade)ufh()()x
 1: x

/a\Z/
    *** Failers
No match
    aaab
No match
    a\nb\n
No match

/b\Z/
    a\nb\n
 0: b

/b\z/

/b\Z/
    a\nb
 0: b

/b\z/
    a\nb
 0: b
    *** Failers
No match
    
/(?>(?(1)\.|())[\W_](?>[a-z0-9-]*[\W_])?)+$/
    a
 0: a
 1: 
    abc
 0: abc
 1: 
    a-b
 0: a-b
 1: 
    0-9 
 0: 0-9
 1: 
    a.b
 0: a.b
 1: 
    5.6.7  
 0: 5.6.7
 1: 
    the.quick.brown.fox
 0: the.quick.brown.fox
 1: 
    a100.b200.300c  
 0: a100.b200.300c
 1: 
    12-ab.1245 
 0: 12-ab.1245
 1: 
    *** Failers
No match
    \
No match
    .a
No match
    -a
No match
    a-
No match
    a.  
No match
    a_b 
No match
    a.-
No match
    a..  
No match
    ab..bc 
No match
    the.quick.brown.fox-
No match
    the.quick.brown.fox.
No match
    the.quick.brown.fox_
No match
    the.quick.brown.fox+       
No match

/(?>.*)(?<=(abcd|wxyz))/
    alphabetabcd
 0: alphabetabcd
 1: abcd
    endingwxyz
 0: endingwxyz
 1: wxyz
    *** Failers
No match
    a rather long string that doesn't end with one of them
No match

/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
    word cat dog elephant mussel cow horse canary baboon snake shark otherword
 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
    word cat dog elephant mussel cow horse canary baboon snake shark
No match
  
/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
No match

/(?<=\d{3}(?!999))foo/
    999foo
 0: foo
    123999foo 
 0: foo
    *** Failers
No match
    123abcfoo
No match
    
/(?<=(?!...999)\d{3})foo/
    999foo
 0: foo
    123999foo 
 0: foo
    *** Failers
No match
    123abcfoo
No match

/(?<=\d{3}(?!999)...)foo/
    123abcfoo
 0: foo
    123456foo 
 0: foo
    *** Failers
No match
    123999foo  
No match
    
/(?<=\d{3}...)(?<!999)foo/
    123abcfoo   
 0: foo
    123456foo 
 0: foo
    *** Failers
No match
    123999foo  
No match

/<a[\s]+href[\s]*=[\s]*          # find <a href=
 ([\"\'])?                       # find single or double quote
 (?(1) (.*?)\1 | ([\s]+))       # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isx
    <a href=abcd xyz
 0: <a href=abcd
 1: <unset>
 2: <unset>
 3: abcd
    <a href=\"abcd xyz pqr\" cats
 0: <a href="abcd xyz pqr"
 1: "
 2: abcd xyz pqr
    <a href=\'abcd xyz pqr\' cats
 0: <a href='abcd xyz pqr'
 1: '
 2: abcd xyz pqr

/<a\s+href\s*=\s*                # find <a href=
 (["'])?                         # find single or double quote
 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isx
    <a href=abcd xyz
 0: <a href=abcd
 1: <unset>
 2: <unset>
 3: abcd
    <a href=\"abcd xyz pqr\" cats
 0: <a href="abcd xyz pqr"
 1: "
 2: abcd xyz pqr
    <a href       =       \'abcd xyz pqr\' cats
 0: <a href       =       'abcd xyz pqr'
 1: '
 2: abcd xyz pqr

/<a\s+href(?>\s*)=(?>\s*)        # find <a href=
 (["'])?                         # find single or double quote
 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isx
    <a href=abcd xyz
 0: <a href=abcd
 1: <unset>
 2: <unset>
 3: abcd
    <a href=\"abcd xyz pqr\" cats
 0: <a href="abcd xyz pqr"
 1: "
 2: abcd xyz pqr
    <a href       =       \'abcd xyz pqr\' cats
 0: <a href       =       'abcd xyz pqr'
 1: '
 2: abcd xyz pqr

/((Z)+|A)*/
    ZABCDEFG
 0: ZA
 1: A
 2: Z

/(Z()|A)*/
    ZABCDEFG
 0: ZA
 1: A
 2: 

/(Z(())|A)*/
    ZABCDEFG
 0: ZA
 1: A
 2: 
 3: 

/((?>Z)+|A)*/
    ZABCDEFG
 0: ZA
 1: A

/((?>)+|A)*/
    ZABCDEFG
 0: 
 1: 

/a*/g
    abbab
 0: a
 0: 
 0: 
 0: a
 0: 
 0: 

/[a-\d]/
    abcde
 0: a
    -things
 0: -
    0digit
 0: 0
    *** Failers
No match
    bcdef    
No match

/[\d-a]/
    abcde
 0: a
    -things
 0: -
    0digit
 0: 0
    *** Failers
No match
    bcdef    
No match
    
/[[:space:]]+/
    > \x09\x0a\x0c\x0d\x0b<
 0:  \x09\x0a\x0c\x0d\x0b
     
/[[:blank:]]+/
    > \x09\x0a\x0c\x0d\x0b<
 0:  \x09
     
/[\s]+/
    > \x09\x0a\x0c\x0d\x0b<
 0:  \x09\x0a\x0c\x0d
     
/\s+/
    > \x09\x0a\x0c\x0d\x0b<
 0:  \x09\x0a\x0c\x0d
     
/ab/x
    ab
No match

/(?!\A)x/m
  a\nxb\n
 0: x

/(?!)x/m
  a\nxb\n
No match

/abc\Qabc\Eabc/
    abcabcabc
 0: abcabcabc
    
/abc\Q(*+|\Eabc/
    abc(*+|abc 
 0: abc(*+|abc

/   abc\Q abc\Eabc/x
    abc abcabc
 0: abc abcabc
    *** Failers
No match
    abcabcabc  
No match
    
/abc#comment
    \Q#not comment
    literal\E/x
    abc#not comment\n    literal     
 0: abc#not comment\x0a    literal

/abc#comment
    \Q#not comment
    literal/x
    abc#not comment\n    literal     
 0: abc#not comment\x0a    literal

/abc#comment
    \Q#not comment
    literal\E #more comment
    /x
    abc#not comment\n    literal     
 0: abc#not comment\x0a    literal

/abc#comment
    \Q#not comment
    literal\E #more comment/x
    abc#not comment\n    literal     
 0: abc#not comment\x0a    literal

/\Qabc\$xyz\E/
    abc\\\$xyz
 0: abc\$xyz

/\Qabc\E\$\Qxyz\E/
    abc\$xyz
 0: abc$xyz

/\Gabc/
    abc
 0: abc
    *** Failers
No match
    xyzabc  
No match

/\Gabc./g
    abc1abc2xyzabc3
 0: abc1
 0: abc2

/abc./g
    abc1abc2xyzabc3 
 0: abc1
 0: abc2
 0: abc3

/a(?x: b c )d/
    XabcdY
 0: abcd
    *** Failers 
No match
    Xa b c d Y 
No match

/((?x)x y z | a b c)/
    XabcY
 0: abc
 1: abc
    AxyzB 
 0: xyz
 1: xyz

/(?i)AB(?-i)C/
    XabCY
 0: abC
    *** Failers
No match
    XabcY  
No match

/((?i)AB(?-i)C|D)E/
    abCE
 0: abCE
 1: abC
    DE
 0: DE
 1: D
    *** Failers
No match
    abcE
No match
    abCe  
No match
    dE
No match
    De    
No match

/(.*)\d+\1/
    abc123abc
 0: abc123abc
 1: abc
    abc123bc 
 0: bc123bc
 1: bc

/(.*)\d+\1/s
    abc123abc
 0: abc123abc
 1: abc
    abc123bc 
 0: bc123bc
 1: bc
    
/((.*))\d+\1/
    abc123abc
 0: abc123abc
 1: abc
 2: abc
    abc123bc  
 0: bc123bc
 1: bc
 2: bc

/-- This tests for an IPv6 address in the form where it can have up to --/
/-- eight components, one and only one of which is empty. This must be --/
No match
/-- an internal component. --/
No match

/(?!:)                       # colon disallowed at start
  (?:                         # start of item
    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
    (?(1)0 | () ) )           # if null previously matched, fail; else null
    :                         # followed by colon
  ){1,7}                      # end item; 1-7 of them required               
  [0-9a-f]{1,4} $             # final hex number at end of string
  (?(1)|.)                    # check that there was an empty component
  /xi
    a123::a123
 0: a123::a123
 1: 
    a123:b342::abcd
 0: a123:b342::abcd
 1: 
    a123:b342::324e:abcd
 0: a123:b342::324e:abcd
 1: 
    a123:ddde:b342::324e:abcd
 0: a123:ddde:b342::324e:abcd
 1: 
    a123:ddde:b342::324e:dcba:abcd
 0: a123:ddde:b342::324e:dcba:abcd
 1: 
    a123:ddde:9999:b342::324e:dcba:abcd
 0: a123:ddde:9999:b342::324e:dcba:abcd
 1: 
    *** Failers
No match
    1:2:3:4:5:6:7:8
No match
    a123:bce:ddde:9999:b342::324e:dcba:abcd
No match
    a123::9999:b342::324e:dcba:abcd
No match
    abcde:2:3:4:5:6:7:8
No match
    ::1
No match
    abcd:fee0:123::   
No match
    :1
No match
    1:  
No match

/[z\Qa-d]\E]/
    z
 0: z
    a
 0: a
    -
 0: -
    d
 0: d
    ] 
 0: ]
    *** Failers
 0: a
    b     
No match

/[\z\C]/
    z
 0: z
    C 
 0: C
    
/\M/
    M 
 0: M
    
/(a+)*b/
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
No match
    
/(?i)reg(?:ul(?:[a]|ae)r|ex)/
    REGular
 0: REGular
    regulaer
 0: regulaer
    Regex  
 0: Regex
    regulr 
 0: regul\xe4r

/[-\xFF-]+/
    
 0: \xc5\xe6\xe5\xe4\xe0
    \xFF
 0: \xc5\xe6\xe5\xe4\xff
    
 0: \xc5\xe6\xe5\xe4\xc0
    
 0: \xc5\xe6\xe5\xe4\xdf

/(?<=Z)X./
  \x84XAZXB
 0: XB

/ab cd (?x) de fg/
    ab cd defg
 0: ab cd defg

/ab cd(?x) de fg/
    ab cddefg
 0: ab cddefg
    ** Failers 
No match
    abcddefg
No match

/(?<![f]oo)(bar)/
    foobarX 
 0: bar
 1: bar
    ** Failers 
No match
    boobarX
No match

/(?<![f])X/
    offX
 0: X
    ** Failers
No match
    onyX  
No match

/(?<=[f])X/
    onyX
 0: X
    ** Failers
No match
    offX 
No match

//mg
    a\nb\nc\n
 0: 
 0: 
 0: 
    \ 
 0: 
    
/(?<=C\n)/mg
    A\nC\nC\n 
 0: 

/(?:(?(1)a|b)(X))+/
    bXaX
 0: bXaX
 1: X

/(?:(?(1)\1a|b)(X|Y))+/
    bXXaYYaY
 0: bXXaYYaY
 1: Y
    bXYaXXaX  
 0: bX
 1: X

/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
    bXXaYYaY
 0: bX
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: X

/[[,abc,]+]/
    abc]
 0: abc]
    a,b]
 0: a,b]
    [a,b,c]  
 0: [a,b,c]

/(?-x: )/x
    A\x20B
 0:  
    
"(?x)(?-x: \s*#\s*)"
    A # B
 0:  # 
    ** Failers
No match
    #  
No match

"(?x-is)(?:(?-ixs) \s*#\s*) include"
    A #include
 0:  #include
    ** Failers
No match
    A#include  
No match
    A #Include
No match

/a*b*\w/
    aaabbbb
 0: aaabbbb
    aaaa
 0: aaaa
    a
 0: a

/a*b?\w/
    aaabbbb
 0: aaabb
    aaaa
 0: aaaa
    a
 0: a

/a*b{0,4}\w/
    aaabbbb
 0: aaabbbb
    aaaa
 0: aaaa
    a
 0: a

/a*b{0,}\w/
    aaabbbb
 0: aaabbbb
    aaaa
 0: aaaa
    a
 0: a
    
/a*\d*\w/
    0a
 0: 0a
    a 
 0: a
    
/a*b *\w/x
    a 
 0: a

/a*b#comment
  *\w/x
    a 
 0: a

/a* b *\w/x
    a 
 0: a

/\w+=.*(\\\n.*)*/
    abc=xyz\\\npqr
 0: abc=xyz\

/(?=(\w+))\1:/
    abcd:
 0: abcd:
 1: abcd

/(?=(\w+))\1:/
    abcd:
 0: abcd:
 1: abcd

/\Eabc/
    abc
 0: abc
    
/[\Eabc]/
    a
 0: a
    ** Failers 
No match
    E 
No match
    
/[a-\Ec]/
    b
 0: b
    ** Failers
No match
    -
No match
    E    
No match

/[a\E\E-\Ec]/
    b
 0: b
    ** Failers
No match
    -
No match
    E    
No match

/[\E\Qa\E-\Qz\E]+/
    b
 0: b
    ** Failers
No match
    -  
No match
    
/[a\Q]bc\E]/
    a
 0: a
    ]
 0: ]
    c
 0: c
    
/[a-\Q\E]/
    a
 0: a
    -     
 0: -

/(a()*)*/
    aaaa
 0: aaaa
 1: a
 2: 

/(?:a(?:(?:))*)*/
    aaaa
 0: aaaa

/(a()+)+/
    aaaa
 0: aaaa
 1: a
 2: 

/(?:a(?:(?:))+)+/
    aaaa
 0: aaaa

/(a){0,3}(?(1)b|(c|))*D/
    abbD
 0: abbD
 1: a
    ccccD
 0: ccccD
 1: <unset>
 2: 
    D  
 0: D
 1: <unset>
 2: 

/(a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
 1: 

/(?>a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/(?:a|)*\d/
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4

/\Z/g
  abc\n
 0: 
 0: 
  
/(?s)(?>.*)(?<!\n)/
  abc
 0: abc
  abc\n  
No match

/(?![\n]*\n\z)/
  abc
 0: 
  abc\n 
No match
  
/\z(?<!\n)/
  abc
 0: 
  abc\n  
No match

/(.*(.)?)*/
    abcd
 0: abcd
 1: 

/( (A | (?(1)0|) )*   )/x
    abcd
 0: 
 1: 
 2: 

/( ( (?(1)0|) )*   )/x
    abcd
 0: 
 1: 
 2: 

/(  (?(1)0|)*   )/x
    abcd
 0: 
 1: 

/[[:abcd:xyz]]/
    a]
 0: a]
    :] 
 0: :]
    
/[abc[:x\]pqr]/
    a
 0: a
    [
 0: [
    :
 0: :
    ]
 0: ]
    p    
 0: p

/.*[op][xyz]/
    fooabcfoo
No match

/(?(?=.*b)b|)/
   adc
 0: 
   abc 
 0: b

/(?(?=.*b)b|)/
   adc
 0: 
   abc 
No match

/(?(?=.*b)b|)*/
   adc
 0: 
   abc 
 0: 

/(?(?=.*b)b|)+/
   adc
 0: 
   abc 
 0: b

/(?(?=b).*b|d)/
    abc
 0: b

/(?(?=.*b).*b|d)/
    abc
 0: ab

/%((?(?=[a])[%])|b)*%$/
    %ab%
 0: %ab%
 1: 

/(?i)a(?-i)b|c/
    XabX
 0: ab
    XAbX
 0: Ab
    CcC 
 0: c
    ** Failers
No match
    XABX   
No match

/[\x00-\xff\s]+/
    \x0a\x0b\x0c\x0d
 0: \x0a\x0b\x0c\x0d

/\c/
    ?
 0: ?

/(abc)\1/i
   abc
No match

/(abc)\1/
   abc
No match

/[a]*/i
    12abc
 0: 12
    12ABC
 0: 12

/[a]*+/i
    12abc
 0: 12
    12ABC
 0: 12

/[a]*?X/i
    ** Failers
No match
    12abc
No match
    12ABC
No match
    
/[a]+?X/i   
    ** Failers
No match
    12abc
No match
    12ABC
No match

/[a]?X/i
    12aXbcX
 0: X
    12AXBCX
 0: X
    BCX 
 0: CX

/[a]??X/i
    12aXbcX
 0: X
    12AXBCX
 0: X
    BCX
 0: CX
    
/[a]?+X/i
    12aXbcX
 0: cX
    12AXBCX
 0: CX
    BCX 
 0: CX

/[a]{2,3}/i
    abcdef
 0: bcd
    ABCDEF  
 0: BCD

/[a]{2,3}?/i
    abcdef
 0: bc
    ABCDEF  
 0: BC

/[a]{2,3}+/i
    abcdef
 0: bcd
    ABCDEF  
 0: BCD

/((a|)+)+Z/
    Z
 0: Z
 1: 
 2: 

/(a)b|(a)c/
    ac
 0: ac
 1: <unset>
 2: a

/(?>(a))b|(a)c/
    ac
 0: ac
 1: <unset>
 2: a

/(?=(a))ab|(a)c/
    ac
 0: ac
 1: <unset>
 2: a

/((?>(a))b|(a)c)/
    ac
 0: ac
 1: ac
 2: <unset>
 3: a

/((?>(a))b|(a)c)++/
    ac
 0: ac
 1: ac
 2: <unset>
 3: a

/(?:(?>(a))b|(a)c)++/
    ac
 0: ac
 1: <unset>
 2: a

/(?=(?>(a))b|(a)c)(..)/
    ac
 0: ac
 1: <unset>
 2: a
 3: ac

/(?>(?>(a))b|(a)c)/
    ac
 0: ac
 1: <unset>
 2: a

/(?:(?>([ab])))+a=/+
    =ba=
 0: ba=
 0+ 
 1: b

/(?>([ab]))+a=/+
    =ba=
 0: ba=
 0+ 
 1: b

/((?>(a+)b)+(aabab))/
    aaaabaaabaabab
 0: aaaabaaabaabab
 1: aaaabaaabaabab
 2: aaa
 3: aabab

/(?>a+|ab)+?c/
    aabc
No match

/(?>a+|ab)+c/
    aabc
No match

/(?:a+|ab)+c/
    aabc
 0: aabc

/(?(?=(a))a)/
    a
 0: a
 1: a

/(?(?=(a))a)(b)/
    ab
 0: ab
 1: a
 2: b

/(?:a|ab)++c/
    aaaabc
No match

/(?>a|ab)++c/
    aaaabc
No match

/(?:a|ab)+c/
    aaaabc
 0: aaaabc

/(?=abc){3}abc/+
    abcabcabc
 0: abc
 0+ abcabc
    ** Failers
No match
    xyz  
No match
    
/(?=abc)+abc/+
    abcabcabc
 0: abc
 0+ abcabc
    ** Failers
No match
    xyz  
No match
    
/(?=abc)++abc/+
    abcabcabc
 0: abc
 0+ abcabc
    ** Failers
No match
    xyz  
No match
    
/(?=abc){0}xyz/
    xyz 
 0: xyz

/(?=abc){1}xyz/
    ** Failers
No match
    xyz 
No match
    
/(?=(a))?./
    ab
 0: a
 1: a
    bc
 0: b
      
/(?=(a))??./
    ab
 0: a
    bc
 0: b

/(?=(a)){0}b(?1)/
    backgammon
 0: ba

/(?=(?1))?[az]([abc])d/
    abd 
 0: abd
 1: b
    zcdxx 
 0: zcd
 1: c

/(?!a){0}\w+/
    aaaaa
 0: aaaaa

/(?<=(abc))?xyz/
    abcxyz
 0: xyz
 1: abc
    pqrxyz 
 0: xyz

/[\g<a>]+/
    ggg<<<aaa>>>
 0: ggg<<<aaa>>>
    ** Failers
No match
    \\ga  
No match
    
/[\ga]+/
    gggagagaxyz 
 0: gggagaga
    
/[:a[:digit:]]+/
    aaaa444:::Z 
 0: aaaa444:::

/[:a[:digit:]:b]+/
    aaaa444:::bbbZ 
 0: aaaa444:::bbb

/[:a]xxx[b:]/
     :xxx:
 0: :xxx:
     
/(?<=a{2})b/i
    xaabc
 0: b
    ** Failers
No match
    xabc  
No match

/(?<!a{2})b/i
    xabc
 0: b
    ** Failers
No match
    xaabc  
No match

/(?<=a\h)c/
    xa c
 0: c
    
/(?<=[a]{2})b/
    axxbc
 0: b
    aAAbc 
 0: b
    ** Failers
No match
    xaabc    
No match

/(?<=[a]{2})b/i
    axxbc  
 0: b
    ** Failers
No match
    aAAbc 
No match
    xaabc    
No match

/(?<=a\H)c/
    abc
 0: c

/(?<=a\V)c/
    abc
 0: c
    
/(?<=a\v)c/
    a\nc
 0: c

/(?(?=c)c|d)++Y/
    XcccddYX
 0: cccddY

/(?(?=c)c|d)*+Y/
    XcccddYX
 0: cccddY

/(a{2,3}){2,}+a/
    aaaaaaa
 0: aaaaaaa
 1: aaa
    ** Failers
No match
    aaaaaa
No match
    aaaaaaaaa 
No match

/(a{2,3})++a/
    ** Failers
No match
    aaaaaa
No match

/(a{2,3})*+a/
    ** Failers
No match
    aaaaaa
No match

/ab\Cde/
    abXde
 0: abXde
    
/(?<=ab\Cde)X/
    abZdeX
 0: X

/a[\CD]b/
    aCb
 0: aCb
    aDb 
 0: aDb

/a[\C-X]b/
    aJb
 0: aJb

/\H\h\V\v/
    X X\x0a
 0: X X\x0a
    X\x09X\x0b
 0: X\x09X\x0b
    ** Failers
No match
    \xa0 X\x0a   
No match
    
/\H*\h+\V?\v{3,4}/ 
    \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
 0: \x09 \xa0X\x0a\x0b\x0c\x0d
    \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
 0: \x09 \xa0\x0a\x0b\x0c\x0d
    \x09\x20\xa0\x0a\x0b\x0c
 0: \x09 \xa0\x0a\x0b\x0c
    ** Failers 
No match
    \x09\x20\xa0\x0a\x0b
No match
     
/\H{3,4}/
    XY  ABCDE
 0: ABCD
    XY  PQR ST 
 0: PQR
    
/.\h{3,4}./
    XY  AB    PQRS
 0: B    P

/\h*X\h?\H+Y\H?Z/
    >XNNNYZ
 0: XNNNYZ
    >  X NYQZ
 0:   X NYQZ
    ** Failers
No match
    >XYZ   
No match
    >  X NY Z
No match

/\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
    >XY\x0aZ\x0aA\x0bNN\x0c
 0: XY\x0aZ\x0aA\x0bNN\x0c
    >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
 0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c

/(foo)\Kbar/
    foobar
 0: bar
 1: foo
   
/(foo)(\Kbar|baz)/
    foobar
 0: bar
 1: foo
 2: bar
    foobaz 
 0: foobaz
 1: foo
 2: baz

/(foo\Kbar)baz/
    foobarbaz
 0: barbaz
 1: foobar

/abc\K|def\K/g+
    Xabcdefghi
 0: 
 0+ defghi
 0: 
 0+ ghi

/ab\Kc|de\Kf/g+
    Xabcdefghi
 0: c
 0+ defghi
 0: f
 0+ ghi
    
/(?=C)/g+
    ABCDECBA
 0: 
 0+ CDECBA
 0: 
 0+ CBA
    
/abc\K/+
    abcdef
 0: 
 0+ def
    ** Failers
No match
    defabcxyz   
No match

/(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
    ababababbbabZXXXX
 0: ababababbbabZ
 1: ab
 2: b

/(?<A>tom|bon)-\g{A}/
    tom-tom
 0: tom-tom
 1: tom
    bon-bon 
 0: bon-bon
 1: bon
    
/((a|b\g{-1}))/
    bacxxx
No match

/(?|(abc)|(xyz))\1/
    abcabc
 0: abcabc
 1: abc
    xyzxyz 
 0: xyzxyz
 1: xyz
    ** Failers
No match
    abcxyz
No match
    xyzabc   
No match
    
/(?|(abc)|(xyz))(?1)/
    abcabc
 0: abcabc
 1: abc
    xyzabc 
 0: xyzabc
 1: xyz
    ** Failers 
No match
    xyzxyz 
No match
 
/X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
    XYabcdY
 0: XYabcdY
 1: a
 2: b
 3: c
 4: d
 5: Y

/X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
    XYabcdY
 0: XYabcdY
 1: a
 2: b
 3: <unset>
 4: <unset>
 5: c
 6: d
 7: Y

/X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
    XYabcdY
 0: XYabcdY
 1: a
 2: b
 3: <unset>
 4: <unset>
 5: c
 6: d
 7: Y

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

/(?'abc'\w+):\g{abc}{2}/
    a:aaxyz
 0: a:aa
 1: a
    ab:ababxyz
 0: ab:abab
 1: ab
    ** Failers
No match
    a:axyz
No match
    ab:abxyz
No match

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

/(a.)\g-1Z/
    aXaXZ
 0: aXaXZ
 1: aX

/(a.)\g{-1}Z/
    aXaXZ
 0: aXaXZ
 1: aX

/(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x
    abcd
 0: ab

/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
  (?(DEFINE)
  (?<NAME_PAT>[a-z]+)
  (?<ADDRESS_PAT>\d+)
  )/x
    metcalfe 33
 0: metcalfe 33
 1: metcalfe
 2: 33

/(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
    1.2.3.4
 0: 1.2.3.4
 1: <unset>
 2: .4
    131.111.10.206
 0: 131.111.10.206
 1: <unset>
 2: .206
    10.0.0.0
 0: 10.0.0.0
 1: <unset>
 2: .0
    ** Failers
No match
    10.6
No match
    455.3.4.5
No match

/\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
    1.2.3.4
 0: 1.2.3.4
 1: .4
    131.111.10.206
 0: 131.111.10.206
 1: .206
    10.0.0.0
 0: 10.0.0.0
 1: .0
    ** Failers
No match
    10.6
No match
    455.3.4.5
No match

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

/(\d++)(\w)/
    12345a
 0: 12345a
 1: 12345
 2: a
    *** Failers
No match
    12345+
No match

/a++b/
    aaab
 0: aaab

/(a++b)/
    aaab
 0: aaab
 1: aaab

/(a++)b/
    aaab
 0: aaab
 1: aaa

/([()]++|\([()]*\))+/
    ((abc(ade)ufh()()x
 0: abc(ade)ufh()()x
 1: x

/\(([()]++|\([()]+\))+\)/
    (abc)
 0: (abc)
 1: abc
    (abc(def)xyz)
 0: (abc(def)xyz)
 1: xyz
    *** Failers
No match
    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match

/([()]|\((?1)*\))*$/
    abc
 0: abc
 1: c
    a(b)c
 0: a(b)c
 1: c
    a(b(c))d
 0: a(b(c))d
 1: d
    *** Failers)
No match
    a(b(c)d
No match

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

/(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
    1221
 0: 1221
 1: 1221
 2: 1
    Satanoscillatemymetallicsonatas
 0: Satanoscillatemymetallicsonatas
 1: <unset>
 2: <unset>
 3: Satanoscillatemymetallicsonatas
 4: S
    AmanaplanacanalPanama
 0: AmanaplanacanalPanama
 1: <unset>
 2: <unset>
 3: AmanaplanacanalPanama
 4: A
    AblewasIereIsawElba
 0: AblewasIereIsawElba
 1: <unset>
 2: <unset>
 3: AblewasIereIsawElba
 4: A
    *** Failers
No match
    Thequickbrownfox
No match

/(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
    12
 0: 12
 1: 12
    (((2+2)*-3)-7)
 0: (((2+2)*-3)-7)
 1: (((2+2)*-3)-7)
 2: -
    -12
 0: -12
 1: -12
    *** Failers
No match
    ((2+2)*-3)-7)
No match

/(x(y|(?1){2})z)/
    xyz
 0: xyz
 1: xyz
 2: y
    xxyzxyzz
 0: xxyzxyzz
 1: xxyzxyzz
 2: xyzxyz
    *** Failers
No match
    xxyzz
No match
    xxyzxyzxyzz
No match

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

/a+(*FAIL)/
    aaaaaa
No match
    
/a+b?c+(*FAIL)/
    aaabccc
No match

/a+b?(*PRUNE)c+(*FAIL)/
    aaabccc
No match

/a+b?(*COMMIT)c+(*FAIL)/
    aaabccc
No match
    
/a+b?(*SKIP)c+(*FAIL)/
    aaabcccaaabccc
No match

/(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
    aaaxxxxxx
 0: aaaxxxxxx
    aaa++++++ 
 0: aaa
    bbbxxxxx
 0: bbbxxxxx
    bbb+++++ 
 0: bbb
    cccxxxx
 0: cccxxxx
    ccc++++ 
 0: ccc
    dddddddd   
 0: ddd

/(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
    aaaxxxxxx
 0: aaaxxxxxx
 1: aaaxxxxxx
    aaa++++++ 
 0: aaa
 1: aaa
    bbbxxxxx
 0: bbbxxxxx
 1: bbbxxxxx
    bbb+++++ 
 0: bbb
 1: bbb
    cccxxxx
 0: cccxxxx
 1: cccxxxx
    ccc++++ 
 0: ccc
 1: ccc
    dddddddd   
 0: ddd
 1: ddd

/a+b?(*THEN)c+(*FAIL)/
    aaabccc
No match

/(A (A|B(*ACCEPT)|C) D)(E)/x
    AB
 0: AB
 1: AB
 2: B
    ABX
 0: AB
 1: AB
 2: B
    AADE
 0: AADE
 1: AAD
 2: A
 3: E
    ACDE
 0: ACDE
 1: ACD
 2: C
 3: E
    ** Failers
No match
    AD 
No match
        
/\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
    1221
 0: 1221
 1: 1221
 2: 1
    Satan, oscillate my metallic sonatas!
 0: Satan, oscillate my metallic sonatas!
 1: <unset>
 2: <unset>
 3: Satan, oscillate my metallic sonatas
 4: S
    A man, a plan, a canal: Panama!
 0: A man, a plan, a canal: Panama!
 1: <unset>
 2: <unset>
 3: A man, a plan, a canal: Panama
 4: A
    Able was I ere I saw Elba.
 0: Able was I ere I saw Elba.
 1: <unset>
 2: <unset>
 3: Able was I ere I saw Elba
 4: A
    *** Failers
No match
    The quick brown fox
No match

/((.)(?1)\2|.)$/
    a
 0: a
 1: a
    aba
 0: aba
 1: aba
 2: a
    aabaa  
 0: aabaa
 1: aabaa
 2: a
    abcdcba 
 0: abcdcba
 1: abcdcba
 2: a
    pqaabaaqp  
 0: pqaabaaqp
 1: pqaabaaqp
 2: p
    ablewasiereisawelba
 0: ablewasiereisawelba
 1: ablewasiereisawelba
 2: a
    rhubarb
No match
    the quick brown fox  
No match

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

/(?|(abc)|(def))\1/
    abcabc
 0: abcabc
 1: abc
    defdef 
 0: defdef
 1: def
    ** Failers
No match
    abcdef
No match
    defabc   
No match
    
/(?|(abc)|(def))(?1)/
    abcabc
 0: abcabc
 1: abc
    defabc
 0: defabc
 1: def
    ** Failers
No match
    defdef
No match
    abcdef    
No match

/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
    a\"aaaaa
 0: a"aaaaa
 1: "
 2: <unset>
 3: "
    b\"aaaaa 
 0: b"aaaaa
 1: <unset>
 2: <unset>
 3: <unset>
 4: "
 5: <unset>
 6: "
    ** Failers 
No match
    b\"11111
No match

/(?:(?1)|B)(A(*F)|C)/
    ABCD
 0: BC
 1: C
    CCD
 0: CC
 1: C
    ** Failers
No match
    CAD   
No match

/(?:(?1)|B)(A(*F)|C)/
    CCD
 0: CC
 1: C
    BCD 
 0: BC
 1: C
    ** Failers
No match
    ABCD
No match
    CAD
No match
    BAD    
No match

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

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

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

/(?<pn> \( ( [()]++ | (?&pn) )* \) )/x
    (ab(cd)ef)
 0: (ab(cd)ef)
 1: (ab(cd)ef)
 2: ef

/(?!a(*SKIP)b)/
    ac
 0: 
    
/(?=a(*SKIP)b|ac)/
    ** Failers
No match
    ac
No match
    
/(?=a(*THEN)b|ac)/
    ac
 0: 
    
/(?=a(*PRUNE)b)/
    ab  
 0: 
    ** Failers 
No match
    ac
No match

/(?=a(*ACCEPT)b)/
    ac
 0: 

/(?(?!a(*SKIP)b))/
    ac
 0: 

/(?>a\Kb)/
    ab
 0: b

/((?>a\Kb))/
    ab
 0: b
 1: ab

/(a\Kb)/
    ab
 0: b
 1: ab
    
/a\Kcz|ac/
    ac
 0: ac
    
/(?>a\Kbz|ab)/
    ab 
 0: ab

/(?&t)(?(DEFINE)(?<t>a\Kb))$/
    ab
 0: b

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

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

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

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

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

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

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

/(*MARK:A)(*SKIP:B)(C|X)/KSS
    C
 0: C
 1: C
MK: A
    D
No match, mark = A
     
/(A(*THEN:A)B|C(*THEN:B)D)/K
    ** Failers
No match
    CB    
No match, mark = B

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

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

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

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

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

/(*:A)A+(*SKIP:A)(B|Z)/KSS
    AAAC
No match, mark = A

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

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

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

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

/(*COMMIT)(A|P)(B|P)(C|P)/
    ABCDEFG
 0: ABC
 1: A
 2: B
 3: C
    ** Failers
No match
    DEFGABC  
No match

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

/(\w+)(?>b(*COMMIT))\w{2}/
    abbb
 0: abbb
 1: a

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

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

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

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

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

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

/b?(*SKIP)c/
    bc
 0: bc
    abc
 0: bc
   
/(*SKIP)bc/
    a
No match

/(*SKIP)b/
    a 
No match

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

/(?i:([b]))(?1)/
    aa
 0: aa
 1: a
    aA     
 0: aA
 1: a
    ** Failers
 0: **
 1: *
    ab
No match
    aB
No match
    Ba
No match
    ba
No match

/(?&t)*+(?(DEFINE)(?<t>a))\w$/
    aaaaaaX
 0: aaaaaaX
    ** Failers 
No match
    aaaaaa 
No match

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

/(a)*+(\w)/
    aaaaX
 0: aaaaX
 1: a
 2: X
    YZ 
 0: Y
 1: <unset>
 2: Y
    ** Failers 
No match
    aaaa
No match

/(?:a)*+(\w)/
    aaaaX
 0: aaaaX
 1: X
    YZ 
 0: Y
 1: Y
    ** Failers 
No match
    aaaa
No match

/(a)++(\w)/
    aaaaX
 0: aaaaX
 1: a
 2: X
    ** Failers 
No match
    aaaa
No match
    YZ 
No match

/(?:a)++(\w)/
    aaaaX
 0: aaaaX
 1: X
    ** Failers 
No match
    aaaa
No match
    YZ 
No match

/(a)?+(\w)/
    aaaaX
 0: aa
 1: a
 2: a
    YZ 
 0: Y
 1: <unset>
 2: Y

/(?:a)?+(\w)/
    aaaaX
 0: aa
 1: a
    YZ 
 0: Y
 1: Y

/(a){2,}+(\w)/
    aaaaX
 0: aaaaX
 1: a
 2: X
    ** Failers
No match
    aaa
No match
    YZ 
No match

/(?:a){2,}+(\w)/
    aaaaX
 0: aaaaX
 1: X
    ** Failers
No match
    aaa
No match
    YZ 
No match

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

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

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

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

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

/(A (A|B(*ACCEPT)|C) D)(E)/x
    AB
 0: AB
 1: AB
 2: B

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

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

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

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

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

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

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

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

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

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

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

/(?(?=(a(*ACCEPT)z))a)/
    a
 0: a
 1: a

/(a)(?1)+ab/
    aaaab
 0: aaaab
 1: a
    
/(a)(?1)++ab/
    aaaab
No match

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

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

/(?(DEFINE)(a))?b(?1)/
    backgammon
 0: ba

/\N+/
    abc\ndef
 0: abc
    
/\N{1,}/
    abc\ndef 
 0: abc

/(?(R)a+|(?R)b)/
    aaaabcde
 0: aaaab

/(?(R)a+|((?R))b)/
    aaaabcde
 0: aaaab
 1: aaaa

/((?(R)a+|(?1)b))/
    aaaabcde
 0: aaaab
 1: aaaab

/((?(R1)a+|(?1)b))/
    aaaabcde
 0: aaaab
 1: aaaab

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

/--- Capture ---/

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

/.*? (a(*THEN)b|(*F)) c/x
    aabc
 0: aabc
 1: ab

/.*? ( (a(*THEN)b) | (*F) ) c/x
    aabc
 0: aabc
 1: ab
 2: ab

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

/--- Non-capture ---/

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

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

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

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

/--- Atomic ---/

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

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

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

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

/--- Possessive capture ---/

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

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

/.*? ( (a(*THEN)b)++ | (*F) )++ c/x
    aabc
 0: aabc
 1: ab
 2: ab

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

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

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

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

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

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

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

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

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

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

/--- Assertion ---/

/.*(?=a(*THEN)b)/ 
    aabc
 0: a

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

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

/(?>(a)(*:m))/imsxSK 
    a
 0: a
 1: a
MK: m

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

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

/(?<=(a(*COMMIT)b))c/
    xabcd
 0: c
 1: ab
    ** Failers 
No match
    xacd
No match
    
/(?<!a(*FAIL)b)c/
    xcd
 0: c
    acd 
 0: c

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

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

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

/(a)(?2){2}(.)/
    abcd
 0: abcd
 1: a
 2: d

/(*MARK:A)(*PRUNE:B)(C|X)/KS
    C
 0: C
 1: C
MK: B
    D 
No match, mark = B

/(*MARK:A)(*PRUNE:B)(C|X)/KSS
    C
 0: C
 1: C
MK: B
    D 
No match, mark = B

/(*MARK:A)(*THEN:B)(C|X)/KS
    C
 0: C
 1: C
MK: B
    D 
No match, mark = B

/(*MARK:A)(*THEN:B)(C|X)/KSY
    C
 0: C
 1: C
MK: B
    D 
No match, mark = B

/(*MARK:A)(*THEN:B)(C|X)/KSS
    C
 0: C
 1: C
MK: B
    D 
No match, mark = B

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

/A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
    AAAC
No match, mark = A

/--- Same --/

/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
    AAAC
No match, mark = B

/A(*:A)A+(*SKIP)(B|Z) | AC/xK
    AAAC
No match, mark = A

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

/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
    AAAC
No match, mark = A

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

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

/(A(*PRUNE:)B|C(*PRUNE:B)D)/K
    AB
 0: AB
 1: AB
    CD 
 0: CD
 1: CD
MK: B

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

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

/A(*:A)B|X(*:A)Y/K
    AABC
 0: AB
MK: A
    XXYZ 
 0: XY
MK: A
    
/b(*:m)f|a(*:n)w/K
    aw 
 0: aw
MK: n
    ** Failers 
No match, mark = n
    abc
No match, mark = m

/b(*:m)f|aw/K
    abaw
 0: aw
    ** Failers 
No match
    abc
No match, mark = m
    abax 
No match, mark = m

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

/a(*PRUNE:X)bc|qq/KY
    ** Failers
No match, mark = X
    axy
No match, mark = X

/a(*THEN:X)bc|qq/KY
    ** Failers
No match, mark = X
    axy
No match, mark = X

/(?=a(*MARK:A)b)..x/K
    abxy
 0: abx
MK: A
    ** Failers
No match
    abpq  
No match

/(?=a(*MARK:A)b)..(*:Y)x/K
    abxy
 0: abx
MK: Y
    ** Failers
No match
    abpq  
No match

/(?=a(*PRUNE:A)b)..x/K
    abxy
 0: abx
MK: A
    ** Failers
No match
    abpq  
No match

/(?=a(*PRUNE:A)b)..(*:Y)x/K
    abxy
 0: abx
MK: Y
    ** Failers
No match
    abpq  
No match

/(?=a(*THEN:A)b)..x/K
    abxy
 0: abx
MK: A
    ** Failers
No match
    abpq  
No match

/(?=a(*THEN:A)b)..(*:Y)x/K
    abxy
 0: abx
MK: Y
    ** Failers
No match
    abpq  
No match

/(another)?(\1?)test/
    hello world test
 0: test
 1: <unset>
 2: 

/(another)?(\1+)test/
    hello world test
No match

/(a(*COMMIT)b){0}a(?1)|aac/
    aac
 0: aac

/(?!a(*COMMIT)b)ac|cd/
    ac
 0: ac

/((?:a?)*)*c/
  aac   
 0: aac
 1: 

/((?>a?)*)*c/
  aac   
 0: aac
 1: 

/(?>.*?a)(?<=ba)/
    aba
 0: ba

/(?:.*?a)(?<=ba)/
    aba
 0: aba

/.*?a(*PRUNE)b/
    aab
 0: ab

/.*?a(*PRUNE)b/s
    aab
 0: ab

/a(*PRUNE)b/s
    aab
No match

/.*?a(*SKIP)b/
    aab
 0: ab

/(?>.*?a)b/s
    aab
 0: ab

/(?>.*?a)b/
    aab
 0: ab

/(?>a)b/s
    aab
No match

/(?>.*?)(?<=(abcd)|(wxyz))/
    alphabetabcd
 0: 
 1: abcd
    endingwxyz 
 0: 
 1: <unset>
 2: wxyz

/(?>.*)(?<=(abcd)|(wxyz))/
    alphabetabcd
 0: alphabetabcd
 1: abcd
    endingwxyz 
 0: endingwxyz
 1: <unset>
 2: wxyz

"(?>.*)foo"
    abcdfooxyz
No match
    
"(?>.*?)foo"
    abcdfooxyz
 0: foo

/-- End of testinput1 --/
./ ADD NAME=TSTOT118 
/-- These are a few representative patterns whose lengths and offsets are to be 
shown when the link size is 2. This is just a doublecheck test to ensure the 
sizes don't go horribly wrong when something is changed. The pattern contents 
are all themselves checked in other tests. Unicode, including property support, 
is required for these tests. --/

/((?i)b)/BM
Memory allocation (code space): 17
------------------------------------------------------------------
  0  13 Bra
  3   7 CBra 1
  8  /i b
 10   7 Ket
 13  13 Ket
 16     End
------------------------------------------------------------------

/(?s)(.*X|B)/BM
Memory allocation (code space): 25
------------------------------------------------------------------
  0  21 Bra
  3   9 CBra 1
  8     AllAny*
 10     X
 12   6 Alt
 15     
 16     B
 18  15 Ket
 21  21 Ket
 24     End
------------------------------------------------------------------

/(?s:.*X|B)/BM
Memory allocation (code space): 23
------------------------------------------------------------------
  0  19 Bra
  3   7 Bra
  6     AllAny*
  8     X
 10   6 Alt
 13     
 14     B
 16  13 Ket
 19  19 Ket
 22     End
------------------------------------------------------------------

/[[:alnum:]]/BM
Memory allocation (code space): 41
------------------------------------------------------------------
  0  37 Bra
  3     
  4     [0-9A-Za-z]
 37  37 Ket
 40     End
------------------------------------------------------------------

/#/IxMD
Memory allocation (code space): 7
------------------------------------------------------------------
  0   3 Bra
  3   3 Ket
  6     End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: extended
No first char
No need char

/a#/IxMD
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     a
  5   5 Ket
  8     End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: extended
First char = 'a'
No need char

/x?+/BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     x?+
  5   5 Ket
  8     End
------------------------------------------------------------------

/x++/BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     x++
  5   5 Ket
  8     End
------------------------------------------------------------------

/x{1,3}+/BM 
Memory allocation (code space): 19
------------------------------------------------------------------
  0  15 Bra
  3   9 Once
  6     x
  8     x{0,2}
 12   9 Ket
 15  15 Ket
 18     End
------------------------------------------------------------------

/(x)*+/BM
Memory allocation (code space): 18
------------------------------------------------------------------
  0  14 Bra
  3     Braposzero
  4   7 CBraPos 1
  9     x
 11   7 KetRpos
 14  14 Ket
 17     End
------------------------------------------------------------------

/((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/BM
Memory allocation (code space): 120
------------------------------------------------------------------
  0 116 Bra
  3     
  4 109 CBra 1
  9   7 CBra 2
 14     a+
 16   7 Ket
 19  39 CBra 3
 24     [ab]+?
 58  39 Ket
 61  39 CBra 4
 66     [bc]+
100  39 Ket
103   7 CBra 5
108     \w*
110   7 Ket
113 109 Ket
116 116 Ket
119     End
------------------------------------------------------------------

|8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|BM
Memory allocation (code space): 826
------------------------------------------------------------------
  0 822 Bra
  3     8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$MMss_U/]&LK9[5vQubw[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2KE:x9'c[%z-,64JQ5AeH_G#KijUKghQw\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L_z5E'Dw6X
821     \b
822 822 Ket
825     End
------------------------------------------------------------------

|\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|BM
Memory allocation (code space): 816
------------------------------------------------------------------
  0 812 Bra
  3     $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$MMss_U/]&LK9[5vQubw[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2KE:x9'c[%z-,64JQ5AeH_G#KijUKghQw\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L_z5E'Dw6X
811     \b
812 812 Ket
815     End
------------------------------------------------------------------

/(a(?1)b)/BM
Memory allocation (code space): 22
------------------------------------------------------------------
  0  18 Bra
  3  12 CBra 1
  8     a
 10   3 Recurse
 13     b
 15  12 Ket
 18  18 Ket
 21     End
------------------------------------------------------------------

/(a(?1)+b)/BM
Memory allocation (code space): 28
------------------------------------------------------------------
  0  24 Bra
  3  18 CBra 1
  8     a
 10   6 Once
 13   3 Recurse
 16   6 KetRmax
 19     b
 21  18 Ket
 24  24 Ket
 27     End
------------------------------------------------------------------

/a(?P<name1>b|c)d(?P<longername2>e)/BM
Memory allocation (code space): 36
------------------------------------------------------------------
  0  32 Bra
  3     a
  5   7 CBra 1
 10     b
 12   5 Alt
 15     c
 17  12 Ket
 20     d
 22   7 CBra 2
 27     e
 29   7 Ket
 32  32 Ket
 35     End
------------------------------------------------------------------

/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/BM
Memory allocation (code space): 45
------------------------------------------------------------------
  0  41 Bra
  3  25 Bra
  6     a
  8  17 CBra 1
 13     c
 15   7 CBra 2
 20     d
 22   7 Ket
 25  17 Ket
 28  25 Ket
 31   7 CBra 3
 36     a
 38   7 Ket
 41  41 Ket
 44     End
------------------------------------------------------------------

/(?P<a>a)...(?P=a)bbb(?P>a)d/BM
Memory allocation (code space): 34
------------------------------------------------------------------
  0  30 Bra
  3   7 CBra 1
  8     a
 10   7 Ket
 13     Any
 14     Any
 15     Any
 16     \1
 19     bbb
 25   3 Recurse
 28     d
 30  30 Ket
 33     End
------------------------------------------------------------------

/abc(?C255)de(?C)f/BM
Memory allocation (code space): 31
------------------------------------------------------------------
  0  27 Bra
  3     abc
  9     Callout 255 10 1
 15     de
 19     Callout 0 16 1
 25     f
 27  27 Ket
 30     End
------------------------------------------------------------------

/abcde/CBM
Memory allocation (code space): 53
------------------------------------------------------------------
  0  49 Bra
  3     Callout 255 0 1
  9     a
 11     Callout 255 1 1
 17     b
 19     Callout 255 2 1
 25     c
 27     Callout 255 3 1
 33     d
 35     Callout 255 4 1
 41     e
 43     Callout 255 5 0
 49  49 Ket
 52     End
------------------------------------------------------------------

/\x{100}/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     \x{100}
  6   6 Ket
  9     End
------------------------------------------------------------------

/\x{1000}/8BM
Memory allocation (code space): 11
------------------------------------------------------------------
  0   7 Bra
  3     \x{1000}
  7   7 Ket
 10     End
------------------------------------------------------------------

/\x{10000}/8BM
Memory allocation (code space): 12
------------------------------------------------------------------
  0   8 Bra
  3     \x{10000}
  8   8 Ket
 11     End
------------------------------------------------------------------

/\x{100000}/8BM
Memory allocation (code space): 12
------------------------------------------------------------------
  0   8 Bra
  3     \x{100000}
  8   8 Ket
 11     End
------------------------------------------------------------------

/\x{10ffff}/8BM
Memory allocation (code space): 12
------------------------------------------------------------------
  0   8 Bra
  3     \x{10ffff}
  8   8 Ket
 11     End
------------------------------------------------------------------

/\x{110000}/8BM
Failed: character value in \x{...} sequence is too large at offset 9

/[\x{ff}]/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     \x{ff}
  6   6 Ket
  9     End
------------------------------------------------------------------

/[\x{100}]/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     \x{100}
  6   6 Ket
  9     End
------------------------------------------------------------------

/\x80/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     \x{80}
  6   6 Ket
  9     End
------------------------------------------------------------------

/\xff/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     \x{ff}
  6   6 Ket
  9     End
------------------------------------------------------------------

/\x{0041}\x{2262}\x{0391}\x{002e}/D8M
Memory allocation (code space): 18
------------------------------------------------------------------
  0  14 Bra
  3     A\x{2262}\x{391}.
 14  14 Ket
 17     End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: utf
First char = 'A'
Need char = '.'
    
/\x{D55c}\x{ad6d}\x{C5B4}/D8M 
Memory allocation (code space): 19
------------------------------------------------------------------
  0  15 Bra
  3     \x{d55c}\x{ad6d}\x{c5b4}
 15  15 Ket
 18     End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: utf
First char = \x{ed}
Need char = \x{b4}

/\x{65e5}\x{672c}\x{8a9e}/D8M
Memory allocation (code space): 19
------------------------------------------------------------------
  0  15 Bra
  3     \x{65e5}\x{672c}\x{8a9e}
 15  15 Ket
 18     End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: utf
First char = \x{e6}
Need char = \x{9e}

/[\x{100}]/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     \x{100}
  6   6 Ket
  9     End
------------------------------------------------------------------

/[Z\x{100}]/8BM
Memory allocation (code space): 47
------------------------------------------------------------------
  0  43 Bra
  3     [Z\x{100}]
 43  43 Ket
 46     End
------------------------------------------------------------------

/[\x{100}\E-\Q\E\x{150}]/B8M
Memory allocation (code space): 18
------------------------------------------------------------------
  0  14 Bra
  3     
  4     [\x{100}-\x{150}]
 14  14 Ket
 17     End
------------------------------------------------------------------

/[\QĀ\E-\QŐ\E]/B8M
Memory allocation (code space): 18
------------------------------------------------------------------
  0  14 Bra
  3     
  4     [\x{100}-\x{150}]
 14  14 Ket
 17     End
------------------------------------------------------------------

/[\QĀ\E-\QŐ\E/B8M
Failed: missing terminating ] for character class at offset 15

/[\p{L}]/BM
Memory allocation (code space): 15
------------------------------------------------------------------
  0  11 Bra
  3     [\p{L}]
 11  11 Ket
 14     End
------------------------------------------------------------------

/[\p{L}]/BM
Memory allocation (code space): 15
------------------------------------------------------------------
  0  11 Bra
  3     [\P{L}]
 11  11 Ket
 14     End
------------------------------------------------------------------

/[\P{L}]/BM
Memory allocation (code space): 15
------------------------------------------------------------------
  0  11 Bra
  3     [\P{L}]
 11  11 Ket
 14     End
------------------------------------------------------------------

/[\P{L}]/BM
Memory allocation (code space): 15
------------------------------------------------------------------
  0  11 Bra
  3     [\p{L}]
 11  11 Ket
 14     End
------------------------------------------------------------------

/[abc\p{L}\x{0660}]/8BM
Memory allocation (code space): 50
------------------------------------------------------------------
  0  46 Bra
  3     [a-c\p{L}\x{660}]
 46  46 Ket
 49     End
------------------------------------------------------------------

/[\p{Nd}]/8BM
Memory allocation (code space): 15
------------------------------------------------------------------
  0  11 Bra
  3     [\p{Nd}]
 11  11 Ket
 14     End
------------------------------------------------------------------

/[\p{Nd}+-]+/8BM
Memory allocation (code space): 48
------------------------------------------------------------------
  0  44 Bra
  3     [+\-\p{Nd}]+
 44  44 Ket
 47     End
------------------------------------------------------------------

/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8iBM
Memory allocation (code space): 25
------------------------------------------------------------------
  0  21 Bra
  3  /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
 21  21 Ket
 24     End
------------------------------------------------------------------

/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8BM
Memory allocation (code space): 25
------------------------------------------------------------------
  0  21 Bra
  3     A\x{391}\x{10427}\x{ff3a}\x{1fb0}
 21  21 Ket
 24     End
------------------------------------------------------------------

/[\x{105}-\x{109}]/8iBM
Memory allocation (code space): 17
------------------------------------------------------------------
  0  13 Bra
  3     [\x{104}-\x{109}]
 13  13 Ket
 16     End
------------------------------------------------------------------

/( ( (?(1)0|) )*   )/xBM
Memory allocation (code space): 38
------------------------------------------------------------------
  0  34 Bra
  3  28 CBra 1
  8     Brazero
  9  19 SCBra 2
 14   8 Cond
 17   1 Cond ref
 20     0
 22   3 Alt
 25  11 Ket
 28  19 KetRmax
 31  28 Ket
 34  34 Ket
 37     End
------------------------------------------------------------------

/(  (?(1)0|)*   )/xBM
Memory allocation (code space): 30
------------------------------------------------------------------
  0  26 Bra
  3  20 CBra 1
  8     Brazero
  9   8 SCond
 12   1 Cond ref
 15     0
 17   3 Alt
 20  11 KetRmax
 23  20 Ket
 26  26 Ket
 29     End
------------------------------------------------------------------

/[a]/BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     a
  5   5 Ket
  8     End
------------------------------------------------------------------

/[a]/8BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     a
  5   5 Ket
  8     End
------------------------------------------------------------------

/[\xaa]/BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     \xaa
  5   5 Ket
  8     End
------------------------------------------------------------------

/[\xaa]/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     \x{aa}
  6   6 Ket
  9     End
------------------------------------------------------------------

/[a]/BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     [a]
  5   5 Ket
  8     End
------------------------------------------------------------------

/[a]/8BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     [a]
  5   5 Ket
  8     End
------------------------------------------------------------------

/[\xaa]/BM
Memory allocation (code space): 9
------------------------------------------------------------------
  0   5 Bra
  3     [\xaa]
  5   5 Ket
  8     End
------------------------------------------------------------------

/[\xaa]/8BM
Memory allocation (code space): 10
------------------------------------------------------------------
  0   6 Bra
  3     [\x{aa}]
  6   6 Ket
  9     End
------------------------------------------------------------------

/[\d]/8WB
------------------------------------------------------------------
  0  11 Bra
  3     [\p{Nd}]
 11  11 Ket
 14     End
------------------------------------------------------------------

/[[:alpha:][:cntrl:]]+/8WB
------------------------------------------------------------------
  0  44 Bra
  3     [ -~\x80-\xff\P{L}]+
 44  44 Ket
 47     End
------------------------------------------------------------------

/[[:cntrl:][:alpha:]]+/8WB
------------------------------------------------------------------
  0  44 Bra
  3     [ -~\x80-\xff\P{L}]+
 44  44 Ket
 47     End
------------------------------------------------------------------

/[[:alpha:]]+/8WB
------------------------------------------------------------------
  0  12 Bra
  3     [\p{L}]+
 12  12 Ket
 15     End
------------------------------------------------------------------

/[[:alpha:]\S]+/8WB
------------------------------------------------------------------
  0  15 Bra
  3     [\P{L}\P{Xsp}]+
 15  15 Ket
 18     End
------------------------------------------------------------------

/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/B
------------------------------------------------------------------
  0  73 Bra
  3     abc
  9   7 CBra 1
 14     d
 16   5 Alt
 19     e
 21  12 Ket
 24     *THEN
 25     x
 27  14 CBra 2
 32     123
 38     *THEN
 39     4
 41  29 Alt
 44     567
 50   7 CBra 3
 55     b
 57   5 Alt
 60     q
 62  12 Ket
 65     *THEN
 66     xx
 70  43 Ket
 73  73 Ket
 76     End
------------------------------------------------------------------

/-- End of testinput11 --/
./ ADD NAME=TSTOT14 
/-- This set of tests is run only with the 8-bit library. It starts with all
    the tests of the POSIX interface, because that is supported only with the
    8-bit library. --/

/abc/P
    abc
 0: abc
    *** Failers
No match: POSIX code 17: match failed

/abc|def/P
    abcdef
 0: abc
    abcdef\B
 0: def

/.*((abc)$|(def))/P
    defabc
 0: defabc
 1: abc
 2: abc
    \Zdefabc
 0: def
 1: def
 3: def

/the quick brown fox/P
    the quick brown fox
 0: the quick brown fox
    *** Failers
No match: POSIX code 17: match failed
    The Quick Brown Fox
No match: POSIX code 17: match failed

/the quick brown fox/Pi
    the quick brown fox
 0: the quick brown fox
    The Quick Brown Fox
 0: The Quick Brown Fox

/abc.def/P
    *** Failers
No match: POSIX code 17: match failed
    abc\ndef
No match: POSIX code 17: match failed

/abc$/P
    abc
 0: abc
    abc\n
 0: abc

/(abc)\2/P
Failed: POSIX code 15: bad back reference at offset 7     

/(abc\1)/P
    abc
No match: POSIX code 17: match failed

/a*(b+)(z)(z)/P
    aaaabbbbzzzz
 0: aaaabbbbzz
 1: bbbb
 2: z
 3: z
    aaaabbbbzzzz\O0
    aaaabbbbzzzz\O1
 0: aaaabbbbzz
    aaaabbbbzzzz\O2
 0: aaaabbbbzz
 1: bbbb
    aaaabbbbzzzz\O3
 0: aaaabbbbzz
 1: bbbb
 2: z
    aaaabbbbzzzz\O4
 0: aaaabbbbzz
 1: bbbb
 2: z
 3: z
    aaaabbbbzzzz\O5
 0: aaaabbbbzz
 1: bbbb
 2: z
 3: z

/ab.cd/P
    ab-cd
 0: ab-cd
    ab=cd
 0: ab=cd
    ** Failers
No match: POSIX code 17: match failed
    ab\ncd
No match: POSIX code 17: match failed

/ab.cd/Ps
    ab-cd
 0: ab-cd
    ab=cd
 0: ab=cd
    ab\ncd
 0: ab\x0acd

/a(b)c/PN
    abc
Matched with REG_NOSUB

/a(?P<name>b)c/PN
    abc
Matched with REG_NOSUB

/a?|b?/P
    abc
 0: a
    ** Failers
 0: 
    ddd\N   
No match: POSIX code 17: match failed

/\w+A/P
   CDAAAAB 
 0: CDAAAA

/\w+A/PU
   CDAAAAB 
 0: CDA
   
/\Biss\B/I+P
    Mississippi
 0: iss
 0+ issippi

/abc/\P
Failed: POSIX code 9: bad escape sequence at offset 4     

/-- End of POSIX tests --/ 

/a\Cb/
    aXb
 0: aXb
    a\nb
 0: a\x0ab
    ** Failers (too big char) 
No match
    A\x{123}B 
** Character \x{123} is greater than 255 and UTF-8 mode is not enabled.
** Truncation will probably give the wrong result.
No match
  
/\x{100}/I
Failed: character value in \x{...} sequence is too large at offset 6

/  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                          # optional leading comment
(?:    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
# address
|                     #  or
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)             # one word, optionally followed by....
(?:
[()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
\(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)       |  # comments, or...

" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
# quoted strings
)*
<  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                     # leading <
(?:  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*

(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  ,  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
)* # further okay, if led by comma
:                                # closing colon
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  )? #       optional route
(?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)                    # initial word
(?:  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|
" (?:                      # opening quote...
[\\\x80-\xff\n\015"]                #   Anything except backslash and quote
|                     #    or
\\ [\x80-\xff]           #   Escaped something (something != CR)
)* "  # closing quote
)  )* # further okay, if led by a period
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  @  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*    (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                           # initial subdomain
(?:                                  #
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  \.                        # if led by a period...
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*   (?:
[(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
(?![(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
|   \[                         # [
(?: [\\\x80-\xff\n\015\[\]] |  \\ [\x80-\xff]  )*    #    stuff
\]                        #           ]
)                     #   ...further okay
)*
#       address spec
(?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*  > #                  trailing >
# name and address
)  (?: [\040\t] |  \(
(?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  |  \( (?:  [\\\x80-\xff\n\015()]  |  \\ [\x80-\xff]  )* \)  )*
\)  )*                       # optional trailing comment
/xSI
Capturing subpattern count = 0
Contains explicit CR or LF match
Options: extended
No first char
No need char
Subject length lower bound = 3
Starting byte set: \x09 \x20 ! " # $ % & ' ( * + - / 0 1 2 3 4 5 6 7 8 
  9 = ? A B C D E F G H I J K L M N O P Q R S T U V W X Y Z  _ ` a b c d e 
  f g h i j k l m n o p q r s t u v w x y z { | } ~ \x7f 

/-- Although this saved pattern was compiled with link-size=2, it does no harm
to run this test with other link sizes because it is going to generated a
"compiled in wrong mode" error as soon as it is loaded, so the link size does 
not matter. --/

<!testsaved16
Compiled pattern loaded from testsaved16
No study data
Error -28 from pcre_fullinfo(0)
Running in 8-bit mode but pattern was compiled in 16-bit mode

/\h/SI
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: \x09 \x20 \xa0 

/\v/SI
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: \x0a \x0b \x0c \x0d \x85 

/\R/SI
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: \x0a \x0b \x0c \x0d \x85 

/[\h]/BZ
------------------------------------------------------------------
        Bra
        [\x09 \xa0]
        Ket
        End
------------------------------------------------------------------
    >\x09<
 0: \x09

/[\h]+/BZ
------------------------------------------------------------------
        Bra
        [\x09 \xa0]+
        Ket
        End
------------------------------------------------------------------
    >\x09\x20\xa0<
 0: \x09 \xa0

/[\v]/BZ
------------------------------------------------------------------
        Bra
        [\x0a-\x0d\x85]
        Ket
        End
------------------------------------------------------------------

/[\H]/BZ
------------------------------------------------------------------
        Bra
        [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff]
        Ket
        End
------------------------------------------------------------------

/[\h]/BZ
------------------------------------------------------------------
        Bra
        [\x00-\x08\x0a-\x1f!-\x9f\xa1-\xff] (neg)
        Ket
        End
------------------------------------------------------------------

/[\V]/BZ
------------------------------------------------------------------
        Bra
        [\x00-\x09\x0e-\x84\x86-\xff]
        Ket
        End
------------------------------------------------------------------

/[\x0a\V]/BZ
------------------------------------------------------------------
        Bra
        [\x00-\x0a\x0e-\x84\x86-\xff]
        Ket
        End
------------------------------------------------------------------

/\777/I
Failed: octal value is greater than \377 in 8-bit non-UTF-8 mode at offset 3

/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/K
Failed: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN) at offset 259

/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/K
    XX
 0: XX
MK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE

/\u0100/<JS>
Failed: character value in \u.... sequence is too large at offset 5

/[\u0100-\u0200]/<JS>
Failed: character value in \u.... sequence is too large at offset 6

/-- End of testinput14 --/
./ ADD NAME=TSTOT2 
/-- 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
Capturing subpattern count = 271
Max back reference = 270
No options
No first char
No need char
    \O900 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
 0: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 ABC ABC
 1: 1 
 2: 2 
 3: 3 
 4: 4 
 5: 5 
 6: 6 
 7: 7 
 8: 8 
 9: 9 
10: 10 
11: 11 
12: 12 
13: 13 
14: 14 
15: 15 
16: 16 
17: 17 
18: 18 
19: 19 
20: 20 
21: 21 
22: 22 
23: 23 
24: 24 
25: 25 
26: 26 
27: 27 
28: 28 
29: 29 
30: 30 
31: 31 
32: 32 
33: 33 
34: 34 
35: 35 
36: 36 
37: 37 
38: 38 
39: 39 
40: 40 
41: 41 
42: 42 
43: 43 
44: 44 
45: 45 
46: 46 
47: 47 
48: 48 
49: 49 
50: 50 
51: 51 
52: 52 
53: 53 
54: 54 
55: 55 
56: 56 
57: 57 
58: 58 
59: 59 
60: 60 
61: 61 
62: 62 
63: 63 
64: 64 
65: 65 
66: 66 
67: 67 
68: 68 
69: 69 
70: 70 
71: 71 
72: 72 
73: 73 
74: 74 
75: 75 
76: 76 
77: 77 
78: 78 
79: 79 
80: 80 
81: 81 
82: 82 
83: 83 
84: 84 
85: 85 
86: 86 
87: 87 
88: 88 
89: 89 
90: 90 
91: 91 
92: 92 
93: 93 
94: 94 
95: 95 
96: 96 
97: 97 
98: 98 
99: 99 
100: 100 
101: 101 
102: 102 
103: 103 
104: 104 
105: 105 
106: 106 
107: 107 
108: 108 
109: 109 
110: 110 
111: 111 
112: 112 
113: 113 
114: 114 
115: 115 
116: 116 
117: 117 
118: 118 
119: 119 
120: 120 
121: 121 
122: 122 
123: 123 
124: 124 
125: 125 
126: 126 
127: 127 
128: 128 
129: 129 
130: 130 
131: 131 
132: 132 
133: 133 
134: 134 
135: 135 
136: 136 
137: 137 
138: 138 
139: 139 
140: 140 
141: 141 
142: 142 
143: 143 
144: 144 
145: 145 
146: 146 
147: 147 
148: 148 
149: 149 
150: 150 
151: 151 
152: 152 
153: 153 
154: 154 
155: 155 
156: 156 
157: 157 
158: 158 
159: 159 
160: 160 
161: 161 
162: 162 
163: 163 
164: 164 
165: 165 
166: 166 
167: 167 
168: 168 
169: 169 
170: 170 
171: 171 
172: 172 
173: 173 
174: 174 
175: 175 
176: 176 
177: 177 
178: 178 
179: 179 
180: 180 
181: 181 
182: 182 
183: 183 
184: 184 
185: 185 
186: 186 
187: 187 
188: 188 
189: 189 
190: 190 
191: 191 
192: 192 
193: 193 
194: 194 
195: 195 
196: 196 
197: 197 
198: 198 
199: 199 
200: 200 
201: 201 
202: 202 
203: 203 
204: 204 
205: 205 
206: 206 
207: 207 
208: 208 
209: 209 
210: 210 
211: 211 
212: 212 
213: 213 
214: 214 
215: 215 
216: 216 
217: 217 
218: 218 
219: 219 
220: 220 
221: 221 
222: 222 
223: 223 
224: 224 
225: 225 
226: 226 
227: 227 
228: 228 
229: 229 
230: 230 
231: 231 
232: 232 
233: 233 
234: 234 
235: 235 
236: 236 
237: 237 
238: 238 
239: 239 
240: 240 
241: 241 
242: 242 
243: 243 
244: 244 
245: 245 
246: 246 
247: 247 
248: 248 
249: 249 
250: 250 
251: 251 
252: 252 
253: 253 
254: 254 
255: 255 
256: 256 
257: 257 
258: 258 
259: 259 
260: 260 
261: 261 
262: 262 
263: 263 
264: 264 
265: 265 
266: 266 
267: 267 
268: 268 
269: 269 
270: ABC
271: ABC

/This one's here because Perl does this differently and PCRE can't at present/I
Capturing subpattern count = 0
No options
First char = 'T'
Need char = 't'

/(main(O)?)+/I
Capturing subpattern count = 2
No options
First char = 'm'
Need char = 'n'
    mainmain
 0: mainmain
 1: main
    mainOmain
 0: mainOmain
 1: main
 2: O

/These are all cases where Perl does it differently (nested captures)/I
Capturing subpattern count = 1
No options
First char = 'T'
Need char = 's'

/(a(b)?)+$/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    aba
 0: aba
 1: a
 2: b

/(aa(bb)?)+$/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: aa
 2: bb

/(aa|aa(bb))+$/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: aa
 2: bb

/(aa(bb)??)+$/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: aa
 2: bb

/(?:aa(bb)?)+$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: bb

/(aa(b(b))?)+$/I
Capturing subpattern count = 3
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: aa
 2: bb
 3: b

/(?:aa(b(b))?)+$/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: bb
 2: b

/(?:aa(b(?:b))?)+$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: bb

/(?:aa(bb(?:b))?)+$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    aabbbaa
 0: aabbbaa
 1: bbb

/(?:aa(b(?:bb))?)+$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    aabbbaa
 0: aabbbaa
 1: bbb

/(?:aa(?:b(b))?)+$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    aabbaa
 0: aabbaa
 1: b

/(?:aa(?:b(bb))?)+$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    aabbbaa
 0: aabbbaa
 1: bb

/(aa(b(bb))?)+$/I
Capturing subpattern count = 3
Options: anchored
No first char
No need char
    aabbbaa
 0: aabbbaa
 1: aa
 2: bbb
 3: bb

/(aa(bb(bb))?)+$/I
Capturing subpattern count = 3
Options: anchored
No first char
No need char
    aabbbbaa
 0: aabbbbaa
 1: aa
 2: bbbb
 3: bb

/--------------------------------------------------------------------/I
Capturing subpattern count = 0
No options
First char = '-'
Need char = '-'

/#/IxDZ
------------------------------------------------------------------
        Bra
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: extended
No first char
No need char

/a#/IxDZ
------------------------------------------------------------------
        Bra
        a
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: extended
First char = 'a'
No need char

/[\s]/DZ
------------------------------------------------------------------
        Bra
        [\x09\x0a\x0c\x0d ]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/[\S]/DZ
------------------------------------------------------------------
        Bra
        [\x00-\x08\x0b\x0e-\x1f!-\xff] (neg)
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/a(?i)b/DZ
------------------------------------------------------------------
        Bra
        a
     /i b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b' (caseless)
    ab
 0: ab
    aB
 0: aB
    *** Failers
No match
    AB
No match

/(a(?i)b)/DZ
------------------------------------------------------------------
        Bra
        CBra 1
        a
     /i b
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'b' (caseless)
    ab
 0: ab
 1: ab
    aB
 0: aB
 1: aB
    *** Failers
No match
    AB
No match

/   (?i)abc/IxDZ
------------------------------------------------------------------
        Bra
     /i abc
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: caseless extended
First char = 'a' (caseless)
Need char = 'c' (caseless)

/#this is a comment
  (?i)abc/IxDZ
------------------------------------------------------------------
        Bra
     /i abc
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: caseless extended
First char = 'a' (caseless)
Need char = 'c' (caseless)

/123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/DZ
------------------------------------------------------------------
        Bra
        123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = '1'
Need char = '0'

/\Q123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890/DZ
------------------------------------------------------------------
        Bra
        123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = '1'
Need char = '0'

/\Q\E/DZ
------------------------------------------------------------------
        Bra
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char
    \
 0: 

/\Q\Ex/DZ
------------------------------------------------------------------
        Bra
        x
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'x'
No need char

/ \Q\E/DZ
------------------------------------------------------------------
        Bra
         
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = ' '
No need char

/a\Q\E/DZ
------------------------------------------------------------------
        Bra
        a
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'a'
No need char
  abc
 0: a
  bca
 0: a
  bac
 0: a

/a\Q\Eb/DZ
------------------------------------------------------------------
        Bra
        ab
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'
  abc
 0: ab

/\Q\Eabc/DZ
------------------------------------------------------------------
        Bra
        abc
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'

/x*+\w/DZ
------------------------------------------------------------------
        Bra
        x*+
        \w
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char
    *** Failers
 0: F
    xxxxx
No match

/x?+/DZ
------------------------------------------------------------------
        Bra
        x?+
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/x++/DZ
------------------------------------------------------------------
        Bra
        x++
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'x'
No need char

/x{1,3}+/DZ
------------------------------------------------------------------
        Bra
        Once
        x
        x{0,2}
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'x'
No need char

/(x)*+/DZ
------------------------------------------------------------------
        Bra
        Braposzero
        CBraPos 1
        x
        KetRpos
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
No first char
No need char

/(\w++|\s++)*$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    now is the time for all good men to come to the aid of the party
 0: now is the time for all good men to come to the aid of the party
 1: party
    *** Failers
No match
    this is not a line with only words and spaces!
No match

/(\d++)(\w)/I
Capturing subpattern count = 2
No options
No first char
No need char
    12345a
 0: 12345a
 1: 12345
 2: a
    *** Failers
No match
    12345+
No match

/a++b/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'
    aaab
 0: aaab

/(a++b)/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'b'
    aaab
 0: aaab
 1: aaab

/(a++)b/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'b'
    aaab
 0: aaab
 1: aaa

/([()]++|\([()]*\))+/I
Capturing subpattern count = 1
No options
No first char
No need char
    ((abc(ade)ufh()()x
 0: abc(ade)ufh()()x
 1: x

/\(([()]++|\([()]+\))+\)/I
Capturing subpattern count = 1
No options
First char = '('
Need char = ')'
    (abc)
 0: (abc)
 1: abc
    (abc(def)xyz)
 0: (abc(def)xyz)
 1: xyz
    *** Failers
No match
    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match

/(abc){1,3}+/DZ
------------------------------------------------------------------
        Bra
        Once
        CBra 1
        abc
        Ket
        Brazero
        Bra
        CBra 1
        abc
        Ket
        Brazero
        CBra 1
        abc
        Ket
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'c'

/a+?+/I
Failed: nothing to repeat at offset 3

/a{2,3}?+b/I
Failed: nothing to repeat at offset 7

/(?U)a+?+/I
Failed: nothing to repeat at offset 7

/a{2,3}?+b/IU
Failed: nothing to repeat at offset 7

/x(?U)a++b/DZ
------------------------------------------------------------------
        Bra
        x
        a++
        b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'x'
Need char = 'b'
    xaaaab
 0: xaaaab

/(?U)xa++b/DZ
------------------------------------------------------------------
        Bra
        x
        a++
        b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: ungreedy
First char = 'x'
Need char = 'b'
    xaaaab
 0: xaaaab

/((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/DZ
------------------------------------------------------------------
        Bra
        
        CBra 1
        CBra 2
        a+
        Ket
        CBra 3
        [ab]+?
        Ket
        CBra 4
        [bc]+
        Ket
        CBra 5
        \w*
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 5
Options: anchored
No first char
No need char

/x(?U)a+b/DZ
------------------------------------------------------------------
        Bra
        
        x
        a++
        b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'b'

/x(?U)(a+)b/DZ
------------------------------------------------------------------
        Bra
        
        x
        CBra 1
        a+?
        Ket
        b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options: anchored
No first char
Need char = 'b'

/[.x.]/I
Failed: POSIX collating elements are not supported at offset 0

/[=x=]/I
Failed: POSIX collating elements are not supported at offset 0

/[:x:]/I
Failed: POSIX named classes are supported only within a class at offset 0

/\l/I
Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1

/\L/I
Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1

/\N{name}/I
Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1

/\u/I
Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1

/\U/I
Failed: PCRE does not support \L, \l, \N{name}, \U, or \u at offset 1

/[/I
Failed: missing terminating ] for character class at offset 1

/[a-/I
Failed: missing terminating ] for character class at offset 3

/[[:space:]/I
Failed: missing terminating ] for character class at offset 10

/[\s]/IDZ
------------------------------------------------------------------
        Bra
        [\x09\x0a\x0c\x0d ]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/[[:space:]]/IDZ
------------------------------------------------------------------
        Bra
        [\x09-\x0d ]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/[[:space:]abcde]/IDZ
------------------------------------------------------------------
        Bra
        [\x09-\x0d a-e]
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/< (?: (?(R) \d++  | [<>]*+) | (?R)) * >/Ix
Capturing subpattern count = 0
Options: extended
First char = '<'
Need char = '>'
    <>
 0: <>
    <abcd>
 0: <abcd>
    <abc <123> hij>
 0: <abc <123> hij>
    <abc <def> hij>
 0: <def>
    <abc<>def>
 0: <abc<>def>
    <abc<>
 0: <>
    *** Failers
No match
    <abc
No match

|8J\$WE\<\.rX\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|IDZ
------------------------------------------------------------------
        Bra
        8J$WE<.rX+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$MMss_U/]&LK9[5vQubw[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2KE:x9'c[%z-,64JQ5AeH_G#KijUKghQw\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L_z5E'Dw6X
        \b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = '8'
Need char = 'X'
Max lookbehind = 1

|\$\<\.X\+ix\[d1b\!H\#\?vV0vrK\:ZH1\=2M\>iV\;\?aPhFB\<\*vW\@QW\@sO9\}cfZA\-i\'w\%hKd6gt1UJP\,15_\#QY\$M\Mss_U\/\]\&LK9\[5vQub\w\[KDD\<EjmhUZ\?\.akp2dF\>qmj\;2\}YWFdYx\.Ap\]hjCPTP\(n28k\+3\;o\&WXqs\/gOXdr\$\:r\'do0\;b4c\(f_Gr\=\"\\4\)\[01T7ajQJvL\$W\~mL_sS\/4h\:x\*\[ZN\=KLs\&L5zX\/\/\>it\,o\:aU\(\;Z\>pW\&T7oP\'2K\E\:x9\'c\[\%z\-\,64JQ5AeH_G\#KijUKghQw\\\vea3a\?kka_G\$8\#\`\*kynsxzBLru\'\]k_\[7FrVx\}\\=\$blx\>s\-N\%j\;D\*aZDnsw\:YKZ\%Q\.Kne9\#hP\?\+b3\(SOvL\,\\;\&u5\@\?5C5Bhb\=m\-vEh_L15Jl\]U\)0RP6\{q\%L\_z5E\'Dw6X\b|IDZ
------------------------------------------------------------------
        Bra
        $<.X+ix[d1b!H#?vV0vrK:ZH1=2M>iV;?aPhFB<*vW@QW@sO9}cfZA-i'w%hKd6gt1UJP,15_#QY$MMss_U/]&LK9[5vQubw[KDD<EjmhUZ?.akp2dF>qmj;2}YWFdYx.Ap]hjCPTP(n28k+3;o&WXqs/gOXdr$:r'do0;b4c(f_Gr="\4)[01T7ajQJvL$W~mL_sS/4h:x*[ZN=KLs&L5zX//>it,o:aU(;Z>pW&T7oP'2KE:x9'c[%z-,64JQ5AeH_G#KijUKghQw\vea3a?kka_G$8#`*kynsxzBLru']k_[7FrVx}=$blx>s-N%j;D*aZDnsw:YKZ%Q.Kne9#hP?+b3(SOvL,;&u5@?5C5Bhb=m-vEh_L15Jl]U)0RP6{q%L_z5E'Dw6X
        \b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = '$'
Need char = 'X'
Max lookbehind = 1

/(.*)\d+\1/I
Capturing subpattern count = 1
Max back reference = 1
No options
No first char
No need char

/(.*)\d+/I
Capturing subpattern count = 1
No options
First char at start or follows newline
No need char

/(.*)\d+\1/Is
Capturing subpattern count = 1
Max back reference = 1
Options: dotall
No first char
No need char

/(.*)\d+/Is
Capturing subpattern count = 1
Options: anchored dotall
No first char
No need char

/(.*(xyz))\d+\2/I
Capturing subpattern count = 2
Max back reference = 2
No options
First char at start or follows newline
Need char = 'z'

/((.*))\d+\1/I
Capturing subpattern count = 2
Max back reference = 1
No options
No first char
No need char
    abc123bc
 0: bc123bc
 1: bc
 2: bc

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

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

/(?=abc).xyz/IiI
Capturing subpattern count = 0
Options: caseless
First char = 'a' (caseless)
Need char = 'z' (caseless)

/(?=abc)(?i).xyz/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'z' (caseless)

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

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

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

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

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

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

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

/(?(1)abz)(.)/I
Capturing subpattern count = 1
No options
No first char
No need char

/(?(1)abz)(1)23/I
Capturing subpattern count = 1
No options
No first char
Need char = '3'

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

/(a){2,3}/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'a'

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

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

/[ab]/I
Capturing subpattern count = 0
No options
No first char
No need char

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

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

/\d456/I
Capturing subpattern count = 0
No options
No first char
Need char = '6'

/\d456/IS
Capturing subpattern count = 0
No options
No first char
Need char = '6'
Subject length lower bound = 4
Starting byte set: 0 1 2 3 4 5 6 7 8 9 

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

/a/Im
Capturing subpattern count = 0
Options: multiline
First char at start or follows newline
Need char = 'a'
  abcde
 0: a
  xy\nabc
 0: a
  *** Failers
No match
  xyabc
No match

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

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

/[ab](?i)cd/IS
Capturing subpattern count = 0
No options
No first char
Need char = 'd' (caseless)
Subject length lower bound = 3
Starting byte set: a b 

/abc(?C)def/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'f'
    abcdef
--->abcdef
  0          d
 0: abcdef
    1234abcdef
--->1234abcdef
  0              d
 0: abcdef
    *** Failers
No match
    abcxyz
No match
    abcxyzf
--->abcxyzf
  0           d
No match

/abc(?C)de(?C1)f/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'f'
    123abcdef
--->123abcdef
  0             d
  1             f
 0: abcdef

/(?C1)\dabc(?C2)def/IS
Capturing subpattern count = 0
No options
No first char
Need char = 'f'
Subject length lower bound = 7
Starting byte set: 0 1 2 3 4 5 6 7 8 9 
    1234abcdef
--->1234abcdef
  1               \d
  1               \d
  1               \d
  1               \d
  2              d
 0: 4abcdef
    *** Failers
No match
    abcdef
No match

/(?C1)\dabc(?C2)def/ISS
Capturing subpattern count = 0
No options
No first char
Need char = 'f'
    1234abcdef
--->1234abcdef
  1               \d
  1               \d
  1               \d
  1               \d
  2              d
 0: 4abcdef
    *** Failers
No match
    abcdef
--->abcdef
  1           \d
  1           \d
  1           \d
  1           \d
  1           \d
  1           \d
No match

/(?C255)ab/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'b'

/(?C256)ab/I
Failed: number after (?C is > 255 at offset 6

/(?Cab)xx/I
Failed: closing ) for (?C expected at offset 3

/(?C12vr)x/I
Failed: closing ) for (?C expected at offset 5

/abc(?C)def/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'f'
    *** Failers
No match
    \x83\x0\x61bcdef
--->\x83\x00abcdef
  0                  d
 0: abcdef

/(abc)(?C)de(?C1)f/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'f'
    123abcdef
--->123abcdef
  0             d
  1             f
 0: abcdef
 1: abc
    123abcdef\C+
Callout 0: last capture = 1
 0: <unset>
 1: abc
--->123abcdef
                d
Callout 1: last capture = 1
 0: <unset>
 1: abc
--->123abcdef
                f
 0: abcdef
 1: abc
    123abcdef\C-
 0: abcdef
 1: abc
    *** Failers
No match
    123abcdef\C!1
--->123abcdef
  0             d
  1             f
No match

/(?C0)(abc(?C1))*/I
Capturing subpattern count = 1
No options
No first char
No need char
    abcabcabc
--->abcabcabc
  0              (abc(?C1))*
  1             )
  1             )
  1             )
 0: abcabcabc
 1: abc
    abcabc\C!1!3
--->abcabc
  0           (abc(?C1))*
  1          )
  1          )
 0: abcabc
 1: abc
    *** Failers
--->*** Failers
  0                (abc(?C1))*
 0: 
    abcabcabc\C!1!3
--->abcabcabc
  0              (abc(?C1))*
  1             )
  1             )
  1             )
 0: abcabc
 1: abc

/(\d{3}(?C))*/I
Capturing subpattern count = 1
No options
No first char
No need char
    123\C+
Callout 0: last capture = -1
 0: <unset>
--->123
          )
 0: 123
 1: 123
    123456\C+
Callout 0: last capture = -1
 0: <unset>
--->123456
             )
Callout 0: last capture = 1
 0: <unset>
 1: 123
--->123456
             )
 0: 123456
 1: 456
    123456789\C+
Callout 0: last capture = -1
 0: <unset>
--->123456789
                )
Callout 0: last capture = 1
 0: <unset>
 1: 123
--->123456789
                )
Callout 0: last capture = 1
 0: <unset>
 1: 456
--->123456789
                )
 0: 123456789
 1: 789

/((xyz)(?C)p|(?C1)xyzabc)/I
Capturing subpattern count = 2
No options
First char = 'x'
No need char
    xyzabc\C+
Callout 0: last capture = 2
 0: <unset>
 1: <unset>
 2: xyz
--->xyzabc
             p
Callout 1: last capture = -1
 0: <unset>
--->xyzabc
              x
 0: xyzabc
 1: xyzabc

/(X)((xyz)(?C)p|(?C1)xyzabc)/I
Capturing subpattern count = 3
No options
First char = 'X'
Need char = 'x'
    Xxyzabc\C+
Callout 0: last capture = 3
 0: <unset>
 1: X
 2: <unset>
 3: xyz
--->Xxyzabc
              p
Callout 1: last capture = 1
 0: <unset>
 1: X
--->Xxyzabc
              x
 0: Xxyzabc
 1: X
 2: xyzabc

/(?=(abc))(?C)abcdef/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'f'
    abcdef\C+
Callout 0: last capture = 1
 0: <unset>
 1: abc
--->abcdef
              a
 0: abcdef
 1: abc

/(?!(abc)(?C1)d)(?C2)abcxyz/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'z'
    abcxyz\C+
Callout 1: last capture = 1
 0: <unset>
 1: abc
--->abcxyz
             d
Callout 2: last capture = -1
 0: <unset>
--->abcxyz
              a
 0: abcxyz

/(?<=(abc)(?C))xyz/I
Capturing subpattern count = 1
No options
First char = 'x'
Need char = 'z'
Max lookbehind = 3
   abcxyz\C+
Callout 0: last capture = 1
 0: <unset>
 1: abc
--->abcxyz
              )
 0: xyz
 1: abc

/a(b+)(c*)(?C1)/I
Capturing subpattern count = 2
No options
First char = 'a'
Need char = 'b'
    abbbbbccc\C*1
--->abbbbbccc
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
No match

/a(b+?)(c*?)(?C1)/I
Capturing subpattern count = 2
No options
First char = 'a'
Need char = 'b'
    abbbbbccc\C*1
--->abbbbbccc
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
  1             
Callout data = 1
No match

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

/(?C)abc/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char

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

/(?R)/I
Failed: recursive call could loop indefinitely at offset 3

/(a|(?R))/I
Failed: recursive call could loop indefinitely at offset 6

/(ab|(bc|(de|(?R))))/I
Failed: recursive call could loop indefinitely at offset 15

/x(ab|(bc|(de|(?R))))/I
Capturing subpattern count = 3
No options
First char = 'x'
No need char
    xab
 0: xab
 1: ab
    xbc
 0: xbc
 1: bc
 2: bc
    xde
 0: xde
 1: de
 2: de
 3: de
    xxab
 0: xxab
 1: xab
 2: xab
 3: xab
    xxxab
 0: xxxab
 1: xxab
 2: xxab
 3: xxab
    *** Failers
No match
    xyab
No match

/(ab|(bc|(de|(?1))))/I
Failed: recursive call could loop indefinitely at offset 15

/x(ab|(bc|(de|(?1)x)x)x)/I
Failed: recursive call could loop indefinitely at offset 16

/([()]|\((?1)*\))*$/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    abc
 0: abc
 1: c
    a(b)c
 0: a(b)c
 1: c
    a(b(c))d
 0: a(b(c))d
 1: d
    *** Failers)
No match
    a(b(c)d
No match

/>abc>([()]|\((?1)*\))*<xyz<$/I
Capturing subpattern count = 1
Options: anchored
No first char
Need char = '<'
   >abc>123<xyz<
 0: >abc>123<xyz<
 1: 3
   >abc>1(2)3<xyz<
 0: >abc>1(2)3<xyz<
 1: 3
   >abc>(1(2)3)<xyz<
 0: >abc>(1(2)3)<xyz<
 1: (1(2)3)

/(a(?1)b)/DZ
------------------------------------------------------------------
        Bra
        CBra 1
        a
        Recurse
        b
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'b'

/(a(?1)+b)/DZ
------------------------------------------------------------------
        Bra
        CBra 1
        a
        Once
        Recurse
        KetRmax
        b
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'b'

/(\d+|\((?1)([+*-])(?1)\)|-(?1))$/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    12
 0: 12
 1: 12
    (((2+2)*-3)-7)
 0: (((2+2)*-3)-7)
 1: (((2+2)*-3)-7)
 2: -
    -12
 0: -12
 1: -12
    *** Failers
No match
    ((2+2)*-3)-7)
No match

/(x(y|(?1){2})z)/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    xyz
 0: xyz
 1: xyz
 2: y
    xxyzxyzz
 0: xxyzxyzz
 1: xxyzxyzz
 2: xyzxyz
    *** Failers
No match
    xxyzz
No match
    xxyzxyzxyzz
No match

/((< (?: (?(R) \d++  | [<>]*+) | (?2)) * >))/Ix
Capturing subpattern count = 2
Options: extended
First char = '<'
Need char = '>'
    <>
 0: <>
 1: <>
 2: <>
    <abcd>
 0: <abcd>
 1: <abcd>
 2: <abcd>
    <abc <123> hij>
 0: <abc <123> hij>
 1: <abc <123> hij>
 2: <abc <123> hij>
    <abc <def> hij>
 0: <def>
 1: <def>
 2: <def>
    <abc<>def>
 0: <abc<>def>
 1: <abc<>def>
 2: <abc<>def>
    <abc<>
 0: <>
 1: <>
 2: <>
    *** Failers
No match
    <abc
No match

/(?1)/I
Failed: reference to non-existent subpattern at offset 3

/((?2)(abc)/I
Failed: missing ) at offset 10

/(abc)def(?1)/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    abcdefabc
 0: abcdefabc
 1: abc

/(a|b|c)=(?1)+/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char
    a=a
 0: a=a
 1: a
    a=b
 0: a=b
 1: a
    a=bc
 0: a=bc
 1: a

/(a|b|c)=((?1))+/I
Capturing subpattern count = 2
Options: anchored
No first char
No need char
    a=a
 0: a=a
 1: a
 2: a
    a=b
 0: a=b
 1: a
 2: b
    a=bc
 0: a=bc
 1: a
 2: c

/a(?P<name1>b|c)d(?P<longername2>e)/DZ
------------------------------------------------------------------
        Bra
        a
        CBra 1
        b
        Alt
        c
        Ket
        d
        CBra 2
        e
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 2
Named capturing subpatterns:
  longername2   2
  name1         1
No options
First char = 'a'
Need char = 'e'
    abde
 0: abde
 1: b
 2: e
    acde
 0: acde
 1: c
 2: e

/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/DZ
------------------------------------------------------------------
        Bra
        Bra
        a
        CBra 1
        c
        CBra 2
        d
        Ket
        Ket
        Ket
        CBra 3
        a
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 3
Named capturing subpatterns:
  a   3
  c   1
  d   2
No options
First char = 'a'
Need char = 'a'

/(?P<a>a)...(?P=a)bbb(?P>a)d/DZ
------------------------------------------------------------------
        Bra
        CBra 1
        a
        Ket
        Any
        Any
        Any
        \1
        bbb
        Recurse
        d
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Max back reference = 1
Named capturing subpatterns:
  a   1
No options
First char = 'a'
Need char = 'd'

/\W*(?:(?P<one>(?P<two>.)\W*(?P>one)\W*(?P=two)|)|(?P<three>(?P<four>.)\W*(?P>three)\W*(?P=four)|\W*.\W*))\W*$/Ii
Capturing subpattern count = 4
Max back reference = 4
Named capturing subpatterns:
  four    4
  one     1
  three   3
  two     2
Options: anchored caseless
No first char
No need char
    1221
 0: 1221
 1: 1221
 2: 1
    Satan, oscillate my metallic sonatas!
 0: Satan, oscillate my metallic sonatas!
 1: <unset>
 2: <unset>
 3: Satan, oscillate my metallic sonatas
 4: S
    A man, a plan, a canal: Panama!
 0: A man, a plan, a canal: Panama!
 1: <unset>
 2: <unset>
 3: A man, a plan, a canal: Panama
 4: A
    Able was I ere I saw Elba.
 0: Able was I ere I saw Elba.
 1: <unset>
 2: <unset>
 3: Able was I ere I saw Elba
 4: A
    *** Failers
No match
    The quick brown fox
No match

/((?(R)a|b))\1(?1)?/I
Capturing subpattern count = 1
Max back reference = 1
No options
No first char
No need char
  bb
 0: bb
 1: b
  bbaa
 0: bba
 1: b

/(.*)a/Is
Capturing subpattern count = 1
Options: anchored dotall
No first char
Need char = 'a'

/(.*)a\1/Is
Capturing subpattern count = 1
Max back reference = 1
Options: dotall
No first char
Need char = 'a'

/(.*)a(b)\2/Is
Capturing subpattern count = 2
Max back reference = 2
Options: anchored dotall
No first char
Need char = 'b'

/((.*)a|(.*)b)z/Is
Capturing subpattern count = 3
Options: anchored dotall
No first char
Need char = 'z'

/((.*)a|(.*)b)z\1/Is
Capturing subpattern count = 3
Max back reference = 1
Options: dotall
No first char
Need char = 'z'

/((.*)a|(.*)b)z\2/Is
Capturing subpattern count = 3
Max back reference = 2
Options: dotall
No first char
Need char = 'z'

/((.*)a|(.*)b)z\3/Is
Capturing subpattern count = 3
Max back reference = 3
Options: dotall
No first char
Need char = 'z'

/((.*)a|(.*)b)z\3/Is
Capturing subpattern count = 3
Max back reference = 3
Options: anchored dotall
No first char
Need char = 'z'

/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a/Is
Capturing subpattern count = 31
Options: anchored dotall
No first char
No need char

/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\31/Is
Capturing subpattern count = 31
Max back reference = 31
Options: dotall
No first char
No need char

/(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)|(.*)a\32/Is
Capturing subpattern count = 32
Max back reference = 32
Options: dotall
No first char
No need char

/(a)(bc)/INDZ
------------------------------------------------------------------
        Bra
        Bra
        a
        Ket
        Bra
        bc
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: no_auto_capture
First char = 'a'
Need char = 'c'
  abc
 0: abc

/(?P<one>a)(bc)/INDZ
------------------------------------------------------------------
        Bra
        CBra 1
        a
        Ket
        Bra
        bc
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Named capturing subpatterns:
  one   1
Options: no_auto_capture
First char = 'a'
Need char = 'c'
  abc
 0: abc
 1: a

/(a)(?P<named>bc)/INDZ
------------------------------------------------------------------
        Bra
        Bra
        a
        Ket
        CBra 1
        bc
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Named capturing subpatterns:
  named   1
Options: no_auto_capture
First char = 'a'
Need char = 'c'

/(a+)*zz/I
Capturing subpattern count = 1
No options
No first char
Need char = 'z'
  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\M
Minimum match() limit = 8
Minimum match() recursion limit = 6
 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz
 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  aaaaaaaaaaaaaz\M
Minimum match() limit = 32768
Minimum match() recursion limit = 42
No match

/(aaa(?C1)bbb|ab)/I
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'b'
   aaabbb
--->aaabbb
  1          b
 0: aaabbb
 1: aaabbb
   aaabbb\C*0
--->aaabbb
  1          b
 0: aaabbb
 1: aaabbb
   aaabbb\C*1
--->aaabbb
  1          b
Callout data = 1
 0: ab
 1: ab
   aaabbb\C*-1
--->aaabbb
  1          b
Callout data = -1
No match

/ab(?P<one>cd)ef(?P<two>gh)/I
Capturing subpattern count = 2
Named capturing subpatterns:
  one   1
  two   2
No options
First char = 'a'
Need char = 'h'
    abcdefgh
 0: abcdefgh
 1: cd
 2: gh
    abcdefgh\C1\Gtwo
 0: abcdefgh
 1: cd
 2: gh
 1C cd (2)
  G gh (2) two
    abcdefgh\Cone\Ctwo
 0: abcdefgh
 1: cd
 2: gh
  C cd (2) one
  C gh (2) two
    abcdefgh\Cthree
no parentheses with name "three"
 0: abcdefgh
 1: cd
 2: gh
copy substring three failed -7

/(?P<Tes>)(?P<Test>)/DZ
------------------------------------------------------------------
        Bra
        CBra 1
        Ket
        CBra 2
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 2
Named capturing subpatterns:
  Tes    1
  Test   2
No options
No first char
No need char

/(?P<Test>)(?P<Tes>)/DZ
------------------------------------------------------------------
        Bra
        CBra 1
        Ket
        CBra 2
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 2
Named capturing subpatterns:
  Tes    2
  Test   1
No options
No first char
No need char

/(?P<Z>zz)(?P<A>aa)/I
Capturing subpattern count = 2
Named capturing subpatterns:
  A   2
  Z   1
No options
First char = 'z'
Need char = 'a'
    zzaa\CZ
 0: zzaa
 1: zz
 2: aa
  C zz (2) Z
    zzaa\CA
 0: zzaa
 1: zz
 2: aa
  C aa (2) A

/(?P<x>eks)(?P<x>eccs)/I
Failed: two named subpatterns have the same name at offset 15

/(?P<abc>abc(?P<def>def)(?P<abc>xyz))/I
Failed: two named subpatterns have the same name at offset 30

"\[((?P<elem>\d+)(,(?P>elem))*)\]"I
Capturing subpattern count = 3
Named capturing subpatterns:
  elem   2
No options
First char = '['
Need char = ']'
    [10,20,30,5,5,4,4,2,43,23,4234]
 0: [10,20,30,5,5,4,4,2,43,23,4234]
 1: 10,20,30,5,5,4,4,2,43,23,4234
 2: 10
 3: ,4234
    *** Failers
No match
    []
No match

"\[((?P<elem>\d+)(,(?P>elem))*)?\]"I
Capturing subpattern count = 3
Named capturing subpatterns:
  elem   2
No options
First char = '['
Need char = ']'
    [10,20,30,5,5,4,4,2,43,23,4234]
 0: [10,20,30,5,5,4,4,2,43,23,4234]
 1: 10,20,30,5,5,4,4,2,43,23,4234
 2: 10
 3: ,4234
    []
 0: []

/(a(b(?2)c))?/DZ
------------------------------------------------------------------
        Bra
        Brazero
        CBra 1
        a
        CBra 2
        b
        Recurse
        c
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 2
No options
No first char
No need char

/(a(b(?2)c))*/DZ
------------------------------------------------------------------
        Bra
        Brazero
        CBra 1
        a
        CBra 2
        b
        Recurse
        c
        Ket
        KetRmax
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 2
No options
No first char
No need char

/(a(b(?2)c)){0,2}/DZ
------------------------------------------------------------------
        Bra
        Brazero
        Bra
        CBra 1
        a
        CBra 2
        b
        Recurse
        c
        Ket
        Ket
        Brazero
        CBra 1
        a
        CBra 2
        b
        Recurse
        c
        Ket
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 2
No options
No first char
No need char

/[ab]{1}+/DZ
------------------------------------------------------------------
        Bra
        Once
        [ab]{1,1}
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
No need char

/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/Ii
Capturing subpattern count = 3
Options: caseless
No first char
Need char = 'g' (caseless)
     Baby Bjorn Active Carrier - With free SHIPPING!!
 0: Baby Bjorn Active Carrier - With free SHIPPING!!
 1: Baby Bjorn Active Carrier - With free SHIPPING!!

/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/IiS
Capturing subpattern count = 3
Options: caseless
No first char
Need char = 'g' (caseless)
Subject length lower bound = 8
No set of starting bytes
     Baby Bjorn Active Carrier - With free SHIPPING!!
 0: Baby Bjorn Active Carrier - With free SHIPPING!!
 1: Baby Bjorn Active Carrier - With free SHIPPING!!

/a*.*b/ISDZ
------------------------------------------------------------------
        Bra
        a*
        Any*
        b
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
No first char
Need char = 'b'
Subject length lower bound = 1
No set of starting bytes

/(a|b)*.?c/ISDZ
------------------------------------------------------------------
        Bra
        Brazero
        CBra 1
        a
        Alt
        b
        KetRmax
        Any?
        c
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
No first char
Need char = 'c'
Subject length lower bound = 1
No set of starting bytes

/abc(?C255)de(?C)f/DZ
------------------------------------------------------------------
        Bra
        abc
        Callout 255 10 1
        de
        Callout 0 16 1
        f
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'f'

/abcde/ICDZ
------------------------------------------------------------------
        Bra
        Callout 255 0 1
        a
        Callout 255 1 1
        b
        Callout 255 2 1
        c
        Callout 255 3 1
        d
        Callout 255 4 1
        e
        Callout 255 5 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options:
First char = 'a'
Need char = 'e'
  abcde
--->abcde
 +0          a
 +1         b
 +2         c
 +3         d
 +4         e
 +5         
 0: abcde
  abcdfe
--->abcdfe
 +0           a
 +1          b
 +2          c
 +3          d
 +4          e
No match

/a*b/ICDZS
------------------------------------------------------------------
        Bra
        Callout 255 0 2
        a*+
        Callout 255 2 1
        b
        Callout 255 3 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options:
No first char
Need char = 'b'
Subject length lower bound = 1
Starting byte set: a b 
  ab
--->ab
 +0       a*
 +2      b
 +3      
 0: ab
  aaaab
--->aaaab
 +0          a*
 +2         b
 +3         
 0: aaaab
  aaaacb
--->aaaacb
 +0           a*
 +2          b
 +0           a*
 +2          b
 +0           a*
 +2          b
 +0           a*
 +2          b
 +0           a*
 +2           b
 +3          
 0: b

/a*b/ICDZSS
------------------------------------------------------------------
        Bra
        Callout 255 0 2
        a*+
        Callout 255 2 1
        b
        Callout 255 3 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options:
No first char
Need char = 'b'
  ab
--->ab
 +0       a*
 +2      b
 +3      
 0: ab
  aaaab
--->aaaab
 +0          a*
 +2         b
 +3         
 0: aaaab
  aaaacb
--->aaaacb
 +0           a*
 +2          b
 +0           a*
 +2          b
 +0           a*
 +2          b
 +0           a*
 +2          b
 +0           a*
 +2           b
 +0           a*
 +2           b
 +3          
 0: b

/a+b/ICDZ
------------------------------------------------------------------
        Bra
        Callout 255 0 2
        a++
        Callout 255 2 1
        b
        Callout 255 3 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options:
First char = 'a'
Need char = 'b'
  ab
--->ab
 +0       a+
 +2      b
 +3      
 0: ab
  aaaab
--->aaaab
 +0          a+
 +2         b
 +3         
 0: aaaab
  aaaacb
--->aaaacb
 +0           a+
 +2          b
 +0           a+
 +2          b
 +0           a+
 +2          b
 +0           a+
 +2          b
No match

/(abc|def)x/ICDZS
------------------------------------------------------------------
        Bra
        Callout 255 0 9
        CBra 1
        Callout 255 1 1
        a
        Callout 255 2 1
        b
        Callout 255 3 1
        c
        Callout 255 4 0
        Alt
        Callout 255 5 1
        d
        Callout 255 6 1
        e
        Callout 255 7 1
        f
        Callout 255 8 0
        Ket
        Callout 255 9 1
        x
        Callout 255 10 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options:
No first char
Need char = 'x'
Subject length lower bound = 4
Starting byte set: a d 
  abcx
--->abcx
 +0         (abc|def)
 +1         a
 +2        b
 +3        c
 +4        |
 +9        x
+10        
 0: abcx
 1: abc
  defx
--->defx
 +0         (abc|def)
 +1         a
 +5         d
 +6        e
 +7        f
 +8        )
 +9        x
+10        
 0: defx
 1: def
  ** Failers 
No match
  abcdefzx
--->abcdefzx
 +0             (abc|def)
 +1             a
 +2            b
 +3            c
 +4            |
 +9            x
 +5             d
 +0             (abc|def)
 +1             a
 +5             d
 +6            e
 +7            f
 +8            )
 +9            x
No match

/(abc|def)x/ICDZSS
------------------------------------------------------------------
        Bra
        Callout 255 0 9
        CBra 1
        Callout 255 1 1
        a
        Callout 255 2 1
        b
        Callout 255 3 1
        c
        Callout 255 4 0
        Alt
        Callout 255 5 1
        d
        Callout 255 6 1
        e
        Callout 255 7 1
        f
        Callout 255 8 0
        Ket
        Callout 255 9 1
        x
        Callout 255 10 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options:
No first char
Need char = 'x'
  abcx
--->abcx
 +0         (abc|def)
 +1         a
 +2        b
 +3        c
 +4        |
 +9        x
+10        
 0: abcx
 1: abc
  defx
--->defx
 +0         (abc|def)
 +1         a
 +5         d
 +6        e
 +7        f
 +8        )
 +9        x
+10        
 0: defx
 1: def
  ** Failers 
No match
  abcdefzx
--->abcdefzx
 +0             (abc|def)
 +1             a
 +2            b
 +3            c
 +4            |
 +9            x
 +5             d
 +0             (abc|def)
 +1             a
 +5             d
 +0             (abc|def)
 +1             a
 +5             d
 +0             (abc|def)
 +1             a
 +5             d
 +6            e
 +7            f
 +8            )
 +9            x
 +0             (abc|def)
 +1             a
 +5             d
 +0             (abc|def)
 +1             a
 +5             d
 +0             (abc|def)
 +1             a
 +5             d
 +0             (abc|def)
 +1             a
 +5             d
No match

/(ab|cd){3,4}/IC
Capturing subpattern count = 1
Options:
No first char
No need char
  ababab
--->ababab
 +0           (ab|cd){3,4}
 +1           a
 +2          b
 +3          |
 +1          a
 +2          b
 +3          |
 +1          a
 +2          b
 +3          |
 +1          a
 +4          c
+12          
 0: ababab
 1: ab
  abcdabcd
--->abcdabcd
 +0             (ab|cd){3,4}
 +1             a
 +2            b
 +3            |
 +1            a
 +4            c
 +5            d
 +6            )
 +1            a
 +2            b
 +3            |
 +1            a
 +4            c
 +5            d
 +6            )
+12            
 0: abcdabcd
 1: cd
  abcdcdcdcdcd
--->abcdcdcdcdcd
 +0                 (ab|cd){3,4}
 +1                 a
 +2                b
 +3                |
 +1                a
 +4                c
 +5                d
 +6                )
 +1                a
 +4                c
 +5                d
 +6                )
 +1                a
 +4                c
 +5                d
 +6                )
+12                
 0: abcdcdcd
 1: cd

/([ab]{,4}c|xy)/ICDZS
------------------------------------------------------------------
        Bra
        Callout 255 0 14
        CBra 1
        Callout 255 1 4
        [ab]
        Callout 255 5 1
        {
        Callout 255 6 1
        ,
        Callout 255 7 1
        4
        Callout 255 8 1
        }
        Callout 255 9 1
        c
        Callout 255 10 0
        Alt
        Callout 255 11 1
        x
        Callout 255 12 1
        y
        Callout 255 13 0
        Ket
        Callout 255 14 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options:
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b x 
    Note: that { does NOT introduce a quantifier
--->Note: that { does NOT introduce a quantifier
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
 +5                                                {
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
 +5                                                {
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
 +5                                                {
+11                                                 x
No match

/([ab]{,4}c|xy)/ICDZSS
------------------------------------------------------------------
        Bra
        Callout 255 0 14
        CBra 1
        Callout 255 1 4
        [ab]
        Callout 255 5 1
        {
        Callout 255 6 1
        ,
        Callout 255 7 1
        4
        Callout 255 8 1
        }
        Callout 255 9 1
        c
        Callout 255 10 0
        Alt
        Callout 255 11 1
        x
        Callout 255 12 1
        y
        Callout 255 13 0
        Ket
        Callout 255 14 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options:
No first char
No need char
    Note: that { does NOT introduce a quantifier
--->Note: that { does NOT introduce a quantifier
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
 +5                                                {
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
 +5                                                {
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
 +5                                                {
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
 +0                                                 ([ab]{,4}c|xy)
 +1                                                 [ab]
+11                                                 x
No match

/([ab]{1,4}c|xy){4,5}?123/ICDZ
------------------------------------------------------------------
        Bra
        Callout 255 0 21
        CBra 1
        Callout 255 1 9
        [ab]{1,4}
        Callout 255 10 1
        c
        Callout 255 11 0
        Alt
        Callout 255 12 1
        x
        Callout 255 13 1
        y
        Callout 255 14 0
        Ket
        CBra 1
        Callout 255 1 9
        [ab]{1,4}
        Callout 255 10 1
        c
        Callout 255 11 0
        Alt
        Callout 255 12 1
        x
        Callout 255 13 1
        y
        Callout 255 14 0
        Ket
        CBra 1
        Callout 255 1 9
        [ab]{1,4}
        Callout 255 10 1
        c
        Callout 255 11 0
        Alt
        Callout 255 12 1
        x
        Callout 255 13 1
        y
        Callout 255 14 0
        Ket
        CBra 1
        Callout 255 1 9
        [ab]{1,4}
        Callout 255 10 1
        c
        Callout 255 11 0
        Alt
        Callout 255 12 1
        x
        Callout 255 13 1
        y
        Callout 255 14 0
        Ket
        Braminzero
        CBra 1
        Callout 255 1 9
        [ab]{1,4}
        Callout 255 10 1
        c
        Callout 255 11 0
        Alt
        Callout 255 12 1
        x
        Callout 255 13 1
        y
        Callout 255 14 0
        Ket
        Callout 255 21 1
        1
        Callout 255 22 1
        2
        Callout 255 23 1
        3
        Callout 255 24 0
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
Options:
No first char
Need char = '3'
    aacaacaacaacaac123
--->aacaacaacaacaac123
 +0                       ([ab]{1,4}c|xy){4,5}?
 +1                       [ab]{1,4}
+10                      c
+11                      |
 +1                      [ab]{1,4}
+10                      c
+11                      |
 +1                      [ab]{1,4}
+10                      c
+11                      |
 +1                      [ab]{1,4}
+10                      c
+11                      |
+21                      1
 +1                      [ab]{1,4}
+10                      c
+11                      |
+21                      1
+22                      2
+23                      3
+24                      
 0: aacaacaacaacaac123
 1: aac

/\b.*/I
Capturing subpattern count = 0
No options
No first char
No need char
Max lookbehind = 1
  ab cd\>1
 0:  cd

/\b.*/Is
Capturing subpattern count = 0
Options: dotall
No first char
No need char
Max lookbehind = 1
  ab cd\>1
 0:  cd

/(?!.bcd).*/I
Capturing subpattern count = 0
No options
No first char
No need char
  Xbcd12345
 0: bcd12345

/abcde/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'e'
    ab\P
Partial match: ab
    abc\P
Partial match: abc
    abcd\P
Partial match: abcd
    abcde\P
 0: abcde
    the quick brown abc\P
Partial match: abc
    ** Failers\P
No match
    the quick brown abxyz fox\P
No match

"(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\d\d$"I
Capturing subpattern count = 3
Options: anchored
No first char
Need char = '/'
    13/05/04\P
 0: 13/05/04
 1: 13
 2: 05
    13/5/2004\P
 0: 13/5/2004
 1: 13
 2: 5
 3: 20
    02/05/09\P
 0: 02/05/09
 1: 02
 2: 05
    1\P
Partial match: 1
    1/2\P
Partial match: 1/2
    1/2/0\P
Partial match: 1/2/0
    1/2/04\P
 0: 1/2/04
 1: 1
 2: 2
    0\P
Partial match: 0
    02/\P
Partial match: 02/
    02/0\P
Partial match: 02/0
    02/1\P
Partial match: 02/1
    ** Failers\P
No match
    \P
No match
    123\P
No match
    33/4/04\P
No match
    3/13/04\P
No match
    0/1/2003\P
No match
    0/\P
No match
    02/0/\P
No match
    02/13\P
No match

/0{0,2}ABC/I
Capturing subpattern count = 0
No options
No first char
Need char = 'C'

/\d{3,}ABC/I
Capturing subpattern count = 0
No options
No first char
Need char = 'C'

/\d*ABC/I
Capturing subpattern count = 0
No options
No first char
Need char = 'C'

/[abc]+DE/I
Capturing subpattern count = 0
No options
No first char
Need char = 'E'

/[abc]?123/I
Capturing subpattern count = 0
No options
No first char
Need char = '3'
    123\P
 0: 123
    a\P
Partial match: a
    b\P
Partial match: b
    c\P
Partial match: c
    c12\P
Partial match: c12
    c123\P
 0: c123

/(?:\d){3,5}X/I
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'X'
    1\P
Partial match: 1
    123\P
Partial match: 123
    123X
 0: 123X
    1234\P
Partial match: 1234
    1234X
 0: 1234X
    12345\P
Partial match: 12345
    12345X
 0: 12345X
    *** Failers
No match
    1X
No match
    123456\P
No match

/abc/IS>testsavedregex
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
Subject length lower bound = 3
No set of starting bytes
Compiled pattern written to testsavedregex
Study data written to testsavedregex
<testsavedregex
Compiled pattern loaded from testsavedregex
Study data loaded from testsavedregex
    abc
 0: abc
    ** Failers
No match
    bca
No match

/abc/ISS>testsavedregex
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
Compiled pattern written to testsavedregex
<testsavedregex
Compiled pattern loaded from testsavedregex
No study data
    abc
 0: abc
    ** Failers
No match
    bca
No match

/abc/IFS>testsavedregex
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
Subject length lower bound = 3
No set of starting bytes
Compiled pattern written to testsavedregex
Study data written to testsavedregex
<testsavedregex
Compiled pattern (byte-inverted) loaded from testsavedregex
Study data loaded from testsavedregex
    abc
 0: abc
    ** Failers
No match
    bca
No match

/abc/IFSS>testsavedregex
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
Compiled pattern written to testsavedregex
<testsavedregex
Compiled pattern (byte-inverted) loaded from testsavedregex
No study data
    abc
 0: abc
    ** Failers
No match
    bca
No match

/(a|b)/IS>testsavedregex
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: a b 
Compiled pattern written to testsavedregex
Study data written to testsavedregex
<testsavedregex
Compiled pattern loaded from testsavedregex
Study data loaded from testsavedregex
    abc
 0: a
 1: a
    ** Failers
 0: a
 1: a
    def
No match

/(a|b)/ISS>testsavedregex
Capturing subpattern count = 1
No options
No first char
No need char
Compiled pattern written to testsavedregex
<testsavedregex
Compiled pattern loaded from testsavedregex
No study data
    abc
 0: a
 1: a
    ** Failers
 0: a
 1: a
    def
No match

/(a|b)/ISF>testsavedregex
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: a b 
Compiled pattern written to testsavedregex
Study data written to testsavedregex
<testsavedregex
Compiled pattern (byte-inverted) loaded from testsavedregex
Study data loaded from testsavedregex
    abc
 0: a
 1: a
    ** Failers
 0: a
 1: a
    def
No match

/(a|b)/ISSF>testsavedregex
Capturing subpattern count = 1
No options
No first char
No need char
Compiled pattern written to testsavedregex
<testsavedregex
Compiled pattern (byte-inverted) loaded from testsavedregex
No study data
    abc
 0: a
 1: a
    ** Failers
 0: a
 1: a
    def
No match

~<(\w+)/?>(.)*</(\1)>~smgI
Capturing subpattern count = 3
Max back reference = 1
Options: multiline dotall
First char = '<'
Need char = '>'
    \J1024<!DOCTYPE seite SYSTEM "http://www.lco.lineas.de/xmlCms.dtd">\n<seite>\n<dokumenteninformation>\n<seitentitel>Partner der LCO</seitentitel>\n<sprache>de</sprache>\n<seitenbeschreibung>Partner der LINEAS Consulting\nGmbH</seitenbeschreibung>\n<schluesselworte>LINEAS Consulting GmbH Hamburg\nPartnerfirmen</schluesselworte>\n<revisit>30 days</revisit>\n<robots>index,follow</robots>\n<menueinformation>\n<aktiv>ja</aktiv>\n<menueposition>3</menueposition>\n<menuetext>Partner</menuetext>\n</menueinformation>\n<lastedited>\n<autor>LCO</autor>\n<firma>LINEAS Consulting</firma>\n<datum>15.10.2003</datum>\n</lastedited>\n</dokumenteninformation>\n<inhalt>\n\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\nGmbH</absatzueberschrift>\n\n<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\n<bild name="logo_ca.gif" rahmen="no"/></link> <link\nziel="http://www.ey.com/" zielfenster="_blank"><bild\nname="logo_euy.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\n<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\n\n<absatz><link ziel="http://www.atelion.de/"\nzielfenster="_blank"><bild\nname="logo_atelion.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.line-information.de/"\nzielfenster="_blank">\n<bild name="logo_line_information.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\n\n<absatz><link ziel="http://www.incognis.de/"\nzielfenster="_blank"><bild\nname="logo_incognis.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.addcraft.com/"\nzielfenster="_blank"><bild\nname="logo_addcraft.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.comendo.com/"\nzielfenster="_blank"><bild\nname="logo_comendo.gif" rahmen="no"/></link></absatz>\n\n</inhalt>\n</seite>
 0: <seite>\x0a<dokumenteninformation>\x0a<seitentitel>Partner der LCO</seitentitel>\x0a<sprache>de</sprache>\x0a<seitenbeschreibung>Partner der LINEAS Consulting\x0aGmbH</seitenbeschreibung>\x0a<schluesselworte>LINEAS Consulting GmbH Hamburg\x0aPartnerfirmen</schluesselworte>\x0a<revisit>30 days</revisit>\x0a<robots>index,follow</robots>\x0a<menueinformation>\x0a<aktiv>ja</aktiv>\x0a<menueposition>3</menueposition>\x0a<menuetext>Partner</menuetext>\x0a</menueinformation>\x0a<lastedited>\x0a<autor>LCO</autor>\x0a<firma>LINEAS Consulting</firma>\x0a<datum>15.10.2003</datum>\x0a</lastedited>\x0a</dokumenteninformation>\x0a<inhalt>\x0a\x0a<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\x0aGmbH</absatzueberschrift>\x0a\x0a<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\x0a<bild name="logo_ca.gif" rahmen="no"/></link> <link\x0aziel="http://www.ey.com/" zielfenster="_blank"><bild\x0aname="logo_euy.gif" rahmen="no"/></link>\x0a</absatz>\x0a\x0a<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\x0a<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\x0a\x0a<absatz><link ziel="http://www.atelion.de/"\x0azielfenster="_blank"><bild\x0aname="logo_atelion.gif" rahmen="no"/></link>\x0a</absatz>\x0a\x0a<absatz><link ziel="http://www.line-information.de/"\x0azielfenster="_blank">\x0a<bild name="logo_line_information.gif" rahmen="no"/></link>\x0a</absatz>\x0a\x0a<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\x0a\x0a<absatz><link ziel="http://www.incognis.de/"\x0azielfenster="_blank"><bild\x0aname="logo_incognis.gif" rahmen="no"/></link></absatz>\x0a\x0a<absatz><link ziel="http://www.addcraft.com/"\x0azielfenster="_blank"><bild\x0aname="logo_addcraft.gif" rahmen="no"/></link></absatz>\x0a\x0a<absatz><link ziel="http://www.comendo.com/"\x0azielfenster="_blank"><bild\x0aname="logo_comendo.gif" rahmen="no"/></link></absatz>\x0a\x0a</inhalt>\x0a</seite>
 1: seite
 2: \x0a
 3: seite

/a/IF
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/line\nbreak/I
Capturing subpattern count = 0
Contains explicit CR or LF match
No options
First char = 'l'
Need char = 'k'
    this is a line\nbreak
 0: line\x0abreak
    line one\nthis is a line\nbreak in the second line
 0: line\x0abreak

/line\nbreak/If
Capturing subpattern count = 0
Contains explicit CR or LF match
Options: firstline
First char = 'l'
Need char = 'k'
    this is a line\nbreak
 0: line\x0abreak
    ** Failers
No match
    line one\nthis is a line\nbreak in the second line
No match

/line\nbreak/Imf
Capturing subpattern count = 0
Contains explicit CR or LF match
Options: multiline firstline
First char = 'l'
Need char = 'k'
    this is a line\nbreak
 0: line\x0abreak
    ** Failers
No match
    line one\nthis is a line\nbreak in the second line
No match

/(?i)(?-i)AbCd/I
Capturing subpattern count = 0
No options
First char = 'A'
Need char = 'd'
    AbCd
 0: AbCd
    ** Failers
No match
    abcd
No match

/a{11111111111111111111}/I
Failed: number too big in {} quantifier at offset 22

/(){64294967295}/I
Failed: number too big in {} quantifier at offset 14

/(){2,4294967295}/I
Failed: number too big in {} quantifier at offset 15

"(?i:a)(?i:b)(?i:c)(?i:d)(?i:e)(?i:f)(?i:g)(?i:h)(?i:i)(?i:j)(k)(?i:l)A\1B"I
Capturing subpattern count = 1
Max back reference = 1
No options
First char = 'a' (caseless)
Need char = 'B'
    abcdefghijklAkB
 0: abcdefghijklAkB
 1: k

"(?P<n0>a)(?P<n1>b)(?P<n2>c)(?P<n3>d)(?P<n4>e)(?P<n5>f)(?P<n6>g)(?P<n7>h)(?P<n8>i)(?P<n9>j)(?P<n10>k)(?P<n11>l)A\11B"I
Capturing subpattern count = 12
Max back reference = 11
Named capturing subpatterns:
  n0    1
  n1    2
  n10  11
  n11  12
  n2    3
  n3    4
  n4    5
  n5    6
  n6    7
  n7    8
  n8    9
  n9   10
No options
First char = 'a'
Need char = 'B'
    abcdefghijklAkB
 0: abcdefghijklAkB
 1: a
 2: b
 3: c
 4: d
 5: e
 6: f
 7: g
 8: h
 9: i
10: j
11: k
12: l

"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)A\11B"I
Capturing subpattern count = 12
Max back reference = 11
No options
First char = 'a'
Need char = 'B'
    abcdefghijklAkB
 0: abcdefghijklAkB
 1: a
 2: b
 3: c
 4: d
 5: e
 6: f
 7: g
 8: h
 9: i
10: j
11: k
12: l

"(?P<name0>a)(?P<name1>a)(?P<name2>a)(?P<name3>a)(?P<name4>a)(?P<name5>a)(?P<name6>a)(?P<name7>a)(?P<name8>a)(?P<name9>a)(?P<name10>a)(?P<name11>a)(?P<name12>a)(?P<name13>a)(?P<name14>a)(?P<name15>a)(?P<name16>a)(?P<name17>a)(?P<name18>a)(?P<name19>a)(?P<name20>a)(?P<name21>a)(?P<name22>a)(?P<name23>a)(?P<name24>a)(?P<name25>a)(?P<name26>a)(?P<name27>a)(?P<name28>a)(?P<name29>a)(?P<name30>a)(?P<name31>a)(?P<name32>a)(?P<name33>a)(?P<name34>a)(?P<name35>a)(?P<name36>a)(?P<name37>a)(?P<name38>a)(?P<name39>a)(?P<name40>a)(?P<name41>a)(?P<name42>a)(?P<name43>a)(?P<name44>a)(?P<name45>a)(?P<name46>a)(?P<name47>a)(?P<name48>a)(?P<name49>a)(?P<name50>a)(?P<name51>a)(?P<name52>a)(?P<name53>a)(?P<name54>a)(?P<name55>a)(?P<name56>a)(?P<name57>a)(?P<name58>a)(?P<name59>a)(?P<name60>a)(?P<name61>a)(?P<name62>a)(?P<name63>a)(?P<name64>a)(?P<name65>a)(?P<name66>a)(?P<name67>a)(?P<name68>a)(?P<name69>a)(?P<name70>a)(?P<name71>a)(?P<name72>a)(?P<name73>a)(?P<name74>a)(?P<name75>a)(?P<name76>a)(?P<name77>a)(?P<name78>a)(?P<name79>a)(?P<name80>a)(?P<name81>a)(?P<name82>a)(?P<name83>a)(?P<name84>a)(?P<name85>a)(?P<name86>a)(?P<name87>a)(?P<name88>a)(?P<name89>a)(?P<name90>a)(?P<name91>a)(?P<name92>a)(?P<name93>a)(?P<name94>a)(?P<name95>a)(?P<name96>a)(?P<name97>a)(?P<name98>a)(?P<name99>a)(?P<name100>a)"I
Capturing subpattern count = 101
Named capturing subpatterns:
  name0     1
  name1     2
  name10   11
  name100 101
  name11   12
  name12   13
  name13   14
  name14   15
  name15   16
  name16   17
  name17   18
  name18   19
  name19   20
  name2     3
  name20   21
  name21   22
  name22   23
  name23   24
  name24   25
  name25   26
  name26   27
  name27   28
  name28   29
  name29   30
  name3     4
  name30   31
  name31   32
  name32   33
  name33   34
  name34   35
  name35   36
  name36   37
  name37   38
  name38   39
  name39   40
  name4     5
  name40   41
  name41   42
  name42   43
  name43   44
  name44   45
  name45   46
  name46   47
  name47   48
  name48   49
  name49   50
  name5     6
  name50   51
  name51   52
  name52   53
  name53   54
  name54   55
  name55   56
  name56   57
  name57   58
  name58   59
  name59   60
  name6     7
  name60   61
  name61   62
  name62   63
  name63   64
  name64   65
  name65   66
  name66   67
  name67   68
  name68   69
  name69   70
  name7     8
  name70   71
  name71   72
  name72   73
  name73   74
  name74   75
  name75   76
  name76   77
  name77   78
  name78   79
  name79   80
  name8     9
  name80   81
  name81   82
  name82   83
  name83   84
  name84   85
  name85   86
  name86   87
  name87   88
  name88   89
  name89   90
  name9    10
  name90   91
  name91   92
  name92   93
  name93   94
  name94   95
  name95   96
  name96   97
  name97   98
  name98   99
  name99  100
No options
First char = 'a'
Need char = 'a'
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Matched, but too many substrings
 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 1: a
 2: a
 3: a
 4: a
 5: a
 6: a
 7: a
 8: a
 9: a
10: a
11: a
12: a
13: a
14: a

"(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)(a)"I
Capturing subpattern count = 101
No options
First char = 'a'
Need char = 'a'
    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Matched, but too many substrings
 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 1: a
 2: a
 3: a
 4: a
 5: a
 6: a
 7: a
 8: a
 9: a
10: a
11: a
12: a
13: a
14: a

/[()]*(?:\((?R)\)[()]*)*/I
Capturing subpattern count = 0
No options
No first char
No need char
    (this(and)that
 0: 
    (this(and)that)
 0: (this(and)that)
    (this(and)that)stuff
 0: (this(and)that)stuff

/[()]*(?:\((?>(?R))\)[()]*)*/I
Capturing subpattern count = 0
No options
No first char
No need char
    (this(and)that
 0: 
    (this(and)that)
 0: (this(and)that)

/[()]*(?:\((?R)\))*[()]*/I
Capturing subpattern count = 0
No options
No first char
No need char
    (this(and)that
 0: 
    (this(and)that)
 0: (this(and)that)

/(?:\((?R)\))*[()]*/I
Capturing subpattern count = 0
No options
No first char
No need char
    (this(and)that
 0: 
    (this(and)that)
 0: 
    ((this))
 0: ((this))

/(?:\((?R)\))|[()]*/I
Capturing subpattern count = 0
No options
No first char
No need char
    (this(and)that
 0: 
    (this(and)that)
 0: 
    (this)
 0: (this)
    ((this))
 0: ((this))

/\x{0000ff}/I
Capturing subpattern count = 0
No options
First char = \xff
No need char

/((?P<A>a1)|(?P<A>a2)b)/I
Failed: two named subpatterns have the same name at offset 17

/((?P<A>a1)|(?P<A>a2)b)/IJ
Capturing subpattern count = 3
Named capturing subpatterns:
  A   2
  A   3
Options: anchored dupnames
No first char
No need char
    a1b\CA
 0: a1
 1: a1
 2: a1
  C a1 (2) A
    a2b\CA
 0: a2b
 1: a2b
 2: <unset>
 3: a2
  C a2 (2) A
    ** Failers
No match
    a1b\CZ\CA
no parentheses with name "Z"
 0: a1
 1: a1
 2: a1
copy substring Z failed -7
  C a1 (2) A

/(?P<A>a)(?P<A>b)/IJ
Capturing subpattern count = 2
Named capturing subpatterns:
  A   1
  A   2
Options: anchored dupnames
No first char
No need char
    ab\CA
 0: ab
 1: a
 2: b
  C a (1) A

/(?P<A>a)(?P<A>b)|cd/IJ
Capturing subpattern count = 2
Named capturing subpatterns:
  A   1
  A   2
Options: dupnames
No first char
No need char
    ab\CA
 0: ab
 1: a
 2: b
  C a (1) A
    cd\CA
 0: cd
copy substring A failed -7

/(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/IJ
Capturing subpattern count = 4
Named capturing subpatterns:
  A   1
  A   2
  A   3
  A   4
Options: dupnames
No first char
No need char
    cdefgh\CA
 0: cdefgh
 1: <unset>
 2: <unset>
 3: ef
 4: gh
  C ef (2) A

/((?P<A>a1)|(?P<A>a2)b)/IJ
Capturing subpattern count = 3
Named capturing subpatterns:
  A   2
  A   3
Options: anchored dupnames
No first char
No need char
    a1b\GA
 0: a1
 1: a1
 2: a1
  G a1 (2) A
    a2b\GA
 0: a2b
 1: a2b
 2: <unset>
 3: a2
  G a2 (2) A
    ** Failers
No match
    a1b\GZ\GA
no parentheses with name "Z"
 0: a1
 1: a1
 2: a1
get substring Z failed -7
  G a1 (2) A

/(?P<A>a)(?P<A>b)/IJ
Capturing subpattern count = 2
Named capturing subpatterns:
  A   1
  A   2
Options: anchored dupnames
No first char
No need char
    ab\GA
 0: ab
 1: a
 2: b
  G a (1) A

/(?P<A>a)(?P<A>b)|cd/IJ
Capturing subpattern count = 2
Named capturing subpatterns:
  A   1
  A   2
Options: dupnames
No first char
No need char
    ab\GA
 0: ab
 1: a
 2: b
  G a (1) A
    cd\GA
 0: cd
get substring A failed -7

/(?P<A>a)(?P<A>b)|cd(?P<A>ef)(?P<A>gh)/IJ
Capturing subpattern count = 4
Named capturing subpatterns:
  A   1
  A   2
  A   3
  A   4
Options: dupnames
No first char
No need char
    cdefgh\GA
 0: cdefgh
 1: <unset>
 2: <unset>
 3: ef
 4: gh
  G ef (2) A

/(?J)((?P<A>a1)|(?P<A>a2)b)/I
Capturing subpattern count = 3
Named capturing subpatterns:
  A   2
  A   3
Options: anchored dupnames
Duplicate name status changes
No first char
No need char
    a1b\CA
 0: a1
 1: a1
 2: a1
  C a1 (2) A
    a2b\CA
 0: a2b
 1: a2b
 2: <unset>
 3: a2
  C a2 (2) A

/(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<A>d)/I
Failed: two named subpatterns have the same name at offset 37

/ In this next test, J is not set at the outer level; consequently it isn't
set in the pattern's options; consequently pcre_get_named_substring() produces
a random value. /Ix
Capturing subpattern count = 1
Options: extended
First char = 'I'
Need char = 'e'

/(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<C>d)/I
Capturing subpattern count = 4
Named capturing subpatterns:
  A   1
  B   2
  B   3
  C   4
Options: anchored
Duplicate name status changes
No first char
No need char
    a bc d\CA\CB\CC
 0: a bc d
 1: a
 2: b
 3: c
 4: d
  C a (1) A
  C b (1) B
  C d (1) C

/(?P<A>a)?(?(A)a|b)/I
Capturing subpattern count = 1
Named capturing subpatterns:
  A   1
Options: anchored
No first char
No need char
    aabc
 0: aa
 1: a
    bc
 0: b
    ** Failers
No match
    abc
No match

/(?:(?(ZZ)a|b)(?P<ZZ>X))+/I
Capturing subpattern count = 1
Named capturing subpatterns:
  ZZ   1
No options
No first char
Need char = 'X'
    bXaX
 0: bXaX
 1: X

/(?:(?(2y)a|b)(X))+/I
Failed: reference to non-existent subpattern at offset 9

/(?:(?(ZA)a|b)(?P<ZZ>X))+/I
Failed: reference to non-existent subpattern at offset 9

/(?:(?(ZZ)a|b)(?(ZZ)a|b)(?P<ZZ>X))+/I
Capturing subpattern count = 1
Named capturing subpatterns:
  ZZ   1
No options
No first char
Need char = 'X'
    bbXaaX
 0: bbXaaX
 1: X

/(?:(?(ZZ)a|\(b\))\\(?P<ZZ>X))+/I
Capturing subpattern count = 1
Named capturing subpatterns:
  ZZ   1
No options
No first char
Need char = 'X'
    (b)\\Xa\\X
 0: (b)\Xa\X
 1: X

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

/(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I
Capturing subpattern count = 1
Max back reference = 1
Named capturing subpatterns:
  A   1
No options
No first char
No need char
    bXXaYYaY
 0: bXXaYYaY
 1: Y
    bXYaXXaX
 0: bX
 1: X

/()()()()()()()()()(?:(?(A)(?P=A)a|b)(?P<A>X|Y))+/I
Capturing subpattern count = 10
Max back reference = 10
Named capturing subpatterns:
  A  10
No options
No first char
No need char
    bXXaYYaY
 0: bXXaYYaY
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: Y

/\s*,\s*/IS
Capturing subpattern count = 0
No options
No first char
Need char = ','
Subject length lower bound = 1
Starting byte set: \x09 \x0a \x0c \x0d \x20 , 
    \x0b,\x0b
 0: ,
    \x0c,\x0d
 0: \x0c,\x0d

/abc/Im
Capturing subpattern count = 0
Options: multiline
First char at start or follows newline
Need char = 'c'
    xyz\nabc
 0: abc
    xyz\nabc\<lf>
 0: abc
    xyz\r\nabc\<lf>
 0: abc
    xyz\rabc\<cr>
 0: abc
    xyz\r\nabc\<crlf>
 0: abc
    ** Failers
No match
    xyz\nabc\<cr>
No match
    xyz\r\nabc\<cr>
No match
    xyz\nabc\<crlf>
No match
    xyz\rabc\<crlf>
No match
    xyz\rabc\<lf>
No match

/abc$/Im<lf>
Capturing subpattern count = 0
Options: multiline
Forced newline sequence: LF
First char = 'a'
Need char = 'c'
    xyzabc
 0: abc
    xyzabc\n
 0: abc
    xyzabc\npqr
 0: abc
    xyzabc\r\<cr>
 0: abc
    xyzabc\rpqr\<cr>
 0: abc
    xyzabc\r\n\<crlf>
 0: abc
    xyzabc\r\npqr\<crlf>
 0: abc
    ** Failers
No match
    xyzabc\r
No match
    xyzabc\rpqr
No match
    xyzabc\r\n
No match
    xyzabc\r\npqr
No match

/abc/Im<cr>
Capturing subpattern count = 0
Options: multiline
Forced newline sequence: CR
First char at start or follows newline
Need char = 'c'
    xyz\rabcdef
 0: abc
    xyz\nabcdef\<lf>
 0: abc
    ** Failers
No match
    xyz\nabcdef
No match

/abc/Im<lf>
Capturing subpattern count = 0
Options: multiline
Forced newline sequence: LF
First char at start or follows newline
Need char = 'c'
    xyz\nabcdef
 0: abc
    xyz\rabcdef\<cr>
 0: abc
    ** Failers
No match
    xyz\rabcdef
No match

/abc/Im<crlf>
Capturing subpattern count = 0
Options: multiline
Forced newline sequence: CRLF
First char at start or follows newline
Need char = 'c'
    xyz\r\nabcdef
 0: abc
    xyz\rabcdef\<cr>
 0: abc
    ** Failers
No match
    xyz\rabcdef
No match

/abc/Im<bad>
Unknown newline type at: <bad>


/abc/I
Capturing subpattern count = 0
No options
First char = 'a'
Need char = 'c'
    xyz\rabc\<bad>
Unknown newline type at: <bad>
    abc
 0: abc

/.*/I<lf>
Capturing subpattern count = 0
Options:
Forced newline sequence: LF
First char at start or follows newline
No need char
    abc\ndef
 0: abc
    abc\rdef
 0: abc\x0ddef
    abc\r\ndef
 0: abc\x0d
    \<cr>abc\ndef
 0: abc\x0adef
    \<cr>abc\rdef
 0: abc
    \<cr>abc\r\ndef
 0: abc
    \<crlf>abc\ndef
 0: abc\x0adef
    \<crlf>abc\rdef
 0: abc\x0ddef
    \<crlf>abc\r\ndef
 0: abc

/\w+(.)(.)?def/Is
Capturing subpattern count = 2
Options: dotall
No first char
Need char = 'f'
    abc\ndef
 0: abc\x0adef
 1: \x0a
    abc\rdef
 0: abc\x0ddef
 1: \x0d
    abc\r\ndef
 0: abc\x0d\x0adef
 1: \x0d
 2: \x0a

+((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)+I
Capturing subpattern count = 1
No options
No first char
No need char
   /* this is a C style comment */\M
Minimum match() limit = 120
Minimum match() recursion limit = 6
 0: /* this is a C style comment */
 1: /* this is a C style comment */

/(?P<B>25[0-5]|2[0-4]\d|[01]?\d?\d)(?:\.(?P>B)){3}/I
Capturing subpattern count = 1
Named capturing subpatterns:
  B   1
No options
No first char
Need char = '.'

/()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 ()()()()()()()()()()()()()()()()()()()()
 (.(.))/Ix
Capturing subpattern count = 102
Options: extended
No first char
No need char
    XY\O400
 0: XY
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
32: 
33: 
34: 
35: 
36: 
37: 
38: 
39: 
40: 
41: 
42: 
43: 
44: 
45: 
46: 
47: 
48: 
49: 
50: 
51: 
52: 
53: 
54: 
55: 
56: 
57: 
58: 
59: 
60: 
61: 
62: 
63: 
64: 
65: 
66: 
67: 
68: 
69: 
70: 
71: 
72: 
73: 
74: 
75: 
76: 
77: 
78: 
79: 
80: 
81: 
82: 
83: 
84: 
85: 
86: 
87: 
88: 
89: 
90: 
91: 
92: 
93: 
94: 
95: 
96: 
97: 
98: 
99: 
100: 
101: XY
102: Y

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

/()[ab]xyz/IS
Capturing subpattern count = 1
No options
No first char
Need char = 'z'
Subject length lower bound = 4
Starting byte set: a b 

/(|)[ab]xyz/IS
Capturing subpattern count = 1
No options
No first char
Need char = 'z'
Subject length lower bound = 4
Starting byte set: a b 

/(|c)[ab]xyz/IS
Capturing subpattern count = 1
No options
No first char
Need char = 'z'
Subject length lower bound = 4
Starting byte set: a b c 

/(|c?)[ab]xyz/IS
Capturing subpattern count = 1
No options
No first char
Need char = 'z'
Subject length lower bound = 4
Starting byte set: a b c 

/(d?|c?)[ab]xyz/IS
Capturing subpattern count = 1
No options
No first char
Need char = 'z'
Subject length lower bound = 4
Starting byte set: a b c d 

/(d?|c)[ab]xyz/IS
Capturing subpattern count = 1
No options
No first char
Need char = 'z'
Subject length lower bound = 4
Starting byte set: a b c d 

/a*b\d/DZ
------------------------------------------------------------------
        Bra
        
        a*+
        b
        \d
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'b'

/a*+b\d/DZ
------------------------------------------------------------------
        Bra
        
        a*+
        b
        \d
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'b'

/a*?b\d/DZ
------------------------------------------------------------------
        Bra
        
        a*+
        b
        \d
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'b'

/a+A\d/DZ
------------------------------------------------------------------
        Bra
        
        a++
        A
        \d
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored
No first char
Need char = 'A'
    aaaA5
 0: aaaA5
    ** Failers
No match
    aaaa5
No match

/a*A\d/IiDZ
------------------------------------------------------------------
        Bra
        
     /i a*
     /i A
        \d
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 0
Options: anchored caseless
No first char
Need char = 'A' (caseless)
    aaaA5
 0: aaaA5
    aaaa5
 0: aaaa5

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

/(a+|b*)[cd]/IS
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: a b c d 

/(a*|b+)[cd]/IS
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: a b c d 

/(a+|b+)[cd]/IS
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b 

/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
 ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((
 (((
 a
 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
 ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
 )))
/Ix
Capturing subpattern count = 203
Options: extended
First char = 'a'
No need char
  large nest
Matched, but too many substrings
 0: a
 1: a
 2: a
 3: a
 4: a
 5: a
 6: a
 7: a
 8: a
 9: a
10: a
11: a
12: a
13: a
14: a

/a*\d/BZ
------------------------------------------------------------------
        Bra
        a*+
        \d
        Ket
        End
------------------------------------------------------------------

/a*\D/BZ
------------------------------------------------------------------
        Bra
        a*
        \D
        Ket
        End
------------------------------------------------------------------

/0*\d/BZ
------------------------------------------------------------------
        Bra
        0*
        \d
        Ket
        End
------------------------------------------------------------------

/0*\D/BZ
------------------------------------------------------------------
        Bra
        0*+
        \D
        Ket
        End
------------------------------------------------------------------

/a*\s/BZ
------------------------------------------------------------------
        Bra
        a*+
        \s
        Ket
        End
------------------------------------------------------------------

/a*\S/BZ
------------------------------------------------------------------
        Bra
        a*
        \S
        Ket
        End
------------------------------------------------------------------

/ *\s/BZ
------------------------------------------------------------------
        Bra
         *
        \s
        Ket
        End
------------------------------------------------------------------

/ *\S/BZ
------------------------------------------------------------------
        Bra
         *+
        \S
        Ket
        End
------------------------------------------------------------------

/a*\w/BZ
------------------------------------------------------------------
        Bra
        a*
        \w
        Ket
        End
------------------------------------------------------------------

/a*\W/BZ
------------------------------------------------------------------
        Bra
        a*+
        \W
        Ket
        End
------------------------------------------------------------------

/=*\w/BZ
------------------------------------------------------------------
        Bra
        =*+
        \w
        Ket
        End
------------------------------------------------------------------

/=*\W/BZ
------------------------------------------------------------------
        Bra
        =*
        \W
        Ket
        End
------------------------------------------------------------------

/\d*a/BZ
------------------------------------------------------------------
        Bra
        \d*+
        a
        Ket
        End
------------------------------------------------------------------

/\d*2/BZ
------------------------------------------------------------------
        Bra
        \d*
        2
        Ket
        End
------------------------------------------------------------------

/\d*\d/BZ
------------------------------------------------------------------
        Bra
        \d*
        \d
        Ket
        End
------------------------------------------------------------------

/\d*\D/BZ
------------------------------------------------------------------
        Bra
        \d*+
        \D
        Ket
        End
------------------------------------------------------------------

/\d*\s/BZ
------------------------------------------------------------------
        Bra
        \d*+
        \s
        Ket
        End
------------------------------------------------------------------

/\d*\S/BZ
------------------------------------------------------------------
        Bra
        \d*
        \S
        Ket
        End
------------------------------------------------------------------

/\d*\w/BZ
------------------------------------------------------------------
        Bra
        \d*
        \w
        Ket
        End
------------------------------------------------------------------

/\d*\W/BZ
------------------------------------------------------------------
        Bra
        \d*+
        \W
        Ket
        End
------------------------------------------------------------------

/\D*a/BZ
------------------------------------------------------------------
        Bra
        \D*
        a
        Ket
        End
------------------------------------------------------------------

/\D*2/BZ
------------------------------------------------------------------
        Bra
        \D*+
        2
        Ket
        End
------------------------------------------------------------------

/\D*\d/BZ
------------------------------------------------------------------
        Bra
        \D*+
        \d
        Ket
        End
------------------------------------------------------------------

/\D*\D/BZ
------------------------------------------------------------------
        Bra
        \D*
        \D
        Ket
        End
------------------------------------------------------------------

/\D*\s/BZ
------------------------------------------------------------------
        Bra
        \D*
        \s
        Ket
        End
------------------------------------------------------------------

/\D*\S/BZ
------------------------------------------------------------------
        Bra
        \D*
        \S
        Ket
        End
------------------------------------------------------------------

/\D*\w/BZ
------------------------------------------------------------------
        Bra
        \D*
        \w
        Ket
        End
------------------------------------------------------------------

/\D*\W/BZ
------------------------------------------------------------------
        Bra
        \D*
        \W
        Ket
        End
------------------------------------------------------------------

/\s*a/BZ
------------------------------------------------------------------
        Bra
        \s*+
        a
        Ket
        End
------------------------------------------------------------------

/\s*2/BZ
------------------------------------------------------------------
        Bra
        \s*+
        2
        Ket
        End
------------------------------------------------------------------

/\s*\d/BZ
------------------------------------------------------------------
        Bra
        \s*+
        \d
        Ket
        End
------------------------------------------------------------------

/\s*\D/BZ
------------------------------------------------------------------
        Bra
        \s*
        \D
        Ket
        End
------------------------------------------------------------------

/\s*\s/BZ
------------------------------------------------------------------
        Bra
        \s*
        \s
        Ket
        End
------------------------------------------------------------------

/\s*\S/BZ
------------------------------------------------------------------
        Bra
        \s*+
        \S
        Ket
        End
------------------------------------------------------------------

/\s*\w/BZ
------------------------------------------------------------------
        Bra
        \s*+
        \w
        Ket
        End
------------------------------------------------------------------

/\s*\W/BZ
------------------------------------------------------------------
        Bra
        \s*
        \W
        Ket
        End
------------------------------------------------------------------

/\S*a/BZ
------------------------------------------------------------------
        Bra
        \S*
        a
        Ket
        End
------------------------------------------------------------------

/\S*2/BZ
------------------------------------------------------------------
        Bra
        \S*
        2
        Ket
        End
------------------------------------------------------------------

/\S*\d/BZ
------------------------------------------------------------------
        Bra
        \S*
        \d
        Ket
        End
------------------------------------------------------------------

/\S*\D/BZ
------------------------------------------------------------------
        Bra
        \S*
        \D
        Ket
        End
------------------------------------------------------------------

/\S*\s/BZ
------------------------------------------------------------------
        Bra
        \S*+
        \s
        Ket
        End
------------------------------------------------------------------

/\S*\S/BZ
------------------------------------------------------------------
        Bra
        \S*
        \S
        Ket
        End
------------------------------------------------------------------

/\S*\w/BZ
------------------------------------------------------------------
        Bra
        \S*
        \w
        Ket
        End
------------------------------------------------------------------

/\S*\W/BZ
------------------------------------------------------------------
        Bra
        \S*
        \W
        Ket
        End
------------------------------------------------------------------

/\w*a/BZ
------------------------------------------------------------------
        Bra
        \w*
        a
        Ket
        End
------------------------------------------------------------------

/\w*2/BZ
------------------------------------------------------------------
        Bra
        \w*
        2
        Ket
        End
------------------------------------------------------------------

/\w*\d/BZ
------------------------------------------------------------------
        Bra
        \w*
        \d
        Ket
        End
------------------------------------------------------------------

/\w*\D/BZ
------------------------------------------------------------------
        Bra
        \w*
        \D
        Ket
        End
------------------------------------------------------------------

/\w*\s/BZ
------------------------------------------------------------------
        Bra
        \w*+
        \s
        Ket
        End
------------------------------------------------------------------

/\w*\S/BZ
------------------------------------------------------------------
        Bra
        \w*
        \S
        Ket
        End
------------------------------------------------------------------

/\w*\w/BZ
------------------------------------------------------------------
        Bra
        \w*
        \w
        Ket
        End
------------------------------------------------------------------

/\w*\W/BZ
------------------------------------------------------------------
        Bra
        \w*+
        \W
        Ket
        End
------------------------------------------------------------------

/\W*a/BZ
------------------------------------------------------------------
        Bra
        \W*+
        a
        Ket
        End
------------------------------------------------------------------

/\W*2/BZ
------------------------------------------------------------------
        Bra
        \W*+
        2
        Ket
        End
------------------------------------------------------------------

/\W*\d/BZ
------------------------------------------------------------------
        Bra
        \W*+
        \d
        Ket
        End
------------------------------------------------------------------

/\W*\D/BZ
------------------------------------------------------------------
        Bra
        \W*
        \D
        Ket
        End
------------------------------------------------------------------

/\W*\s/BZ
------------------------------------------------------------------
        Bra
        \W*
        \s
        Ket
        End
------------------------------------------------------------------

/\W*\S/BZ
------------------------------------------------------------------
        Bra
        \W*
        \S
        Ket
        End
------------------------------------------------------------------

/\W*\w/BZ
------------------------------------------------------------------
        Bra
        \W*+
        \w
        Ket
        End
------------------------------------------------------------------

/\W*\W/BZ
------------------------------------------------------------------
        Bra
        \W*
        \W
        Ket
        End
------------------------------------------------------------------

/[a]+a/BZ
------------------------------------------------------------------
        Bra
        [a]++
        a
        Ket
        End
------------------------------------------------------------------

/[a]+a/BZi
------------------------------------------------------------------
        Bra
     /i [a]++
     /i a
        Ket
        End
------------------------------------------------------------------

/[a]+A/BZi
------------------------------------------------------------------
        Bra
     /i [a]++
     /i A
        Ket
        End
------------------------------------------------------------------

/[a]+b/BZ
------------------------------------------------------------------
        Bra
        [a]+
        b
        Ket
        End
------------------------------------------------------------------

/[a]+\d/BZ
------------------------------------------------------------------
        Bra
        [a]+
        \d
        Ket
        End
------------------------------------------------------------------

/a*[a]/BZ
------------------------------------------------------------------
        Bra
        a*
        [a]
        Ket
        End
------------------------------------------------------------------

/(?P<abc>x)(?P<xyz>y)/I
Capturing subpattern count = 2
Named capturing subpatterns:
  abc   1
  xyz   2
No options
First char = 'x'
Need char = 'y'
    xy\Cabc\Cxyz
 0: xy
 1: x
 2: y
  C x (1) abc
  C y (1) xyz

/(?<abc>x)(?'xyz'y)/I
Capturing subpattern count = 2
Named capturing subpatterns:
  abc   1
  xyz   2
No options
First char = 'x'
Need char = 'y'
    xy\Cabc\Cxyz
 0: xy
 1: x
 2: y
  C x (1) abc
  C y (1) xyz

/(?<abc'x)(?'xyz'y)/I
Failed: syntax error in subpattern name (missing terminator) at offset 6

/(?<abc>x)(?'xyz>y)/I
Failed: syntax error in subpattern name (missing terminator) at offset 15

/(?P'abc'x)(?P<xyz>y)/I
Failed: unrecognized character after (?P at offset 3

/(?:(?(ZZ)a|b)(?<ZZ>X))+/
    bXaX
 0: bXaX
 1: X
    bXbX
 0: bX
 1: X
    ** Failers
No match
    aXaX
No match
    aXbX
No match

/(?P>abc)(?<abcd>xxx)/
Failed: reference to non-existent subpattern at offset 8

/(?P>abc)(?<abc>x|y)/
    xx
 0: xx
 1: x
    xy
 0: xy
 1: y
    yy
 0: yy
 1: y
    yx
 0: yx
 1: x

/(?P>abc)(?P<abc>x|y)/
    xx
 0: xx
 1: x
    xy
 0: xy
 1: y
    yy
 0: yy
 1: y
    yx
 0: yx
 1: x

/((?(abc)a|b)(?<abc>x|y))+/
    bxay
 0: bxay
 1: ay
 2: y
    bxby
 0: bx
 1: bx
 2: x
    ** Failers
No match
    axby
No match

/(((?P=abc)|X)(?<abc>x|y))+/
    XxXxxx
 0: XxXxxx
 1: xx
 2: x
 3: x
    XxXyyx
 0: XxXyyx
 1: yx
 2: y
 3: x
    XxXyxx
 0: XxXy
 1: Xy
 2: X
 3: y
    ** Failers
No match
    x
No match

/(?1)(abc)/
    abcabc
 0: abcabc
 1: abc

/(?:(?:\1|X)(a|b))+/
    Xaaa
 0: Xaaa
 1: a
    Xaba
 0: Xa
 1: a

/[\E\Qa\E-\Qz\E]+/BZ
------------------------------------------------------------------
        Bra
        
        [a-z]+
        Ket
        End
------------------------------------------------------------------

/[a\Q]bc\E]/BZ
------------------------------------------------------------------
        Bra
        
        [\]a-c]
        Ket
        End
------------------------------------------------------------------

/[a-\Q\E]/BZ
------------------------------------------------------------------
        Bra
        
        [\-a]
        Ket
        End
------------------------------------------------------------------

/(?P>abc)[()](?<abc>)/BZ
------------------------------------------------------------------
        Bra
        
        Recurse
        [()]
        CBra 1
        Ket
        Ket
        End
------------------------------------------------------------------

/((?(abc)y)[()](?P<abc>x))+/BZ
------------------------------------------------------------------
        Bra
        
        CBra 1
        Cond
      2 Cond nref
        y
        Ket
        [()]
        CBra 2
        x
        Ket
        KetRmax
        Ket
        End
------------------------------------------------------------------
    (xy)x
 0: (xy)x
 1: y)x
 2: x

/(?P>abc)\Q()\E(?<abc>)/BZ
------------------------------------------------------------------
        Bra
        
        Recurse
        ()
        CBra 1
        Ket
        Ket
        End
------------------------------------------------------------------

/(?P>abc)[a\Q(]\E(](?<abc>)/BZ
------------------------------------------------------------------
        Bra
        
        Recurse
        [(\]a]
        CBra 1
        Ket
        Ket
        End
------------------------------------------------------------------

/(?P>abc) # this is (a comment)
  (?<abc>)/BZx
------------------------------------------------------------------
        Bra
        
        Recurse
        CBra 1
        Ket
        Ket
        End
------------------------------------------------------------------

/\W*(?:(?<one>(?<two>.)\W*(?&one)\W*\k<two>|)|(?<three>(?<four>.)\W*(?&three)\W*\k'four'|\W*.\W*))\W*$/Ii
Capturing subpattern count = 4
Max back reference = 4
Named capturing subpatterns:
  four    4
  one     1
  three   3
  two     2
Options: anchored caseless
No first char
No need char
    1221
 0: 1221
 1: 1221
 2: 1
    Satan, oscillate my metallic sonatas!
 0: Satan, oscillate my metallic sonatas!
 1: <unset>
 2: <unset>
 3: Satan, oscillate my metallic sonatas
 4: S
    A man, a plan, a canal: Panama!
 0: A man, a plan, a canal: Panama!
 1: <unset>
 2: <unset>
 3: A man, a plan, a canal: Panama
 4: A
    Able was I ere I saw Elba.
 0: Able was I ere I saw Elba.
 1: <unset>
 2: <unset>
 3: Able was I ere I saw Elba
 4: A
    *** Failers
No match
    The quick brown fox
No match

/(?=(\w+))\1:/I
Capturing subpattern count = 1
Max back reference = 1
No options
No first char
Need char = ':'
    abcd:
 0: abcd:
 1: abcd

/(?=(?'abc'\w+))\k<abc>:/I
Capturing subpattern count = 1
Max back reference = 1
Named capturing subpatterns:
  abc   1
No options
No first char
Need char = ':'
    abcd:
 0: abcd:
 1: abcd

/(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/J
    adaa
 0: adaa
 1: a
 2: d
    ** Failers
No match
    addd
No match
    adbb
No match

/(?'abc'a|b)(?<abc>d|e)(?&abc){2}/J
    bdaa
 0: bdaa
 1: b
 2: d
    bdab
 0: bdab
 1: b
 2: d
    ** Failers
No match
    bddd
No match

/(?(<bc))/
Failed: malformed number or name after (?( at offset 6

/(?(''))/
Failed: assertion expected after (?( at offset 4

/(?('R')stuff)/
Failed: reference to non-existent subpattern at offset 7

/((abc (?(R) (?(R1)1) (?(R2)2) X  |  (?1)  (?2)   (?R) ))) /x
    abcabc1Xabc2XabcXabcabc
 0: abcabc1Xabc2XabcX
 1: abcabc1Xabc2XabcX
 2: abcabc1Xabc2XabcX

/(?<A> (?'B' abc (?(R) (?(R&A)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x
    abcabc1Xabc2XabcXabcabc
 0: abcabc1Xabc2XabcX
 1: abcabc1Xabc2XabcX
 2: abcabc1Xabc2XabcX

/(?<A> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x
Failed: reference to non-existent subpattern at offset 29

/(?<1> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X  |  (?1)  (?2)   (?R) ))) /x
    abcabc1Xabc2XabcXabcabc
 0: abcabc1Xabc2XabcX
 1: abcabc1Xabc2XabcX
 2: abcabc1Xabc2XabcX

/(?(DEFINE) abc | xyz ) /x
Failed: DEFINE group contains more than one branch at offset 22

/(?(DEFINE) abc) xyz/xI
Capturing subpattern count = 0
Options: extended
First char = 'x'
Need char = 'z'

/(a|)*\d/
  \O0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
  \O0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
Matched, but too many substrings

/a.b/<lf>
    a\rb
 0: a\x0db
    a\nb\<cr>
 0: a\x0ab
    a\x85b\<anycrlf> 
 0: a\x85b
    ** Failers
No match
    a\nb
No match
    a\nb\<any>
No match
    a\rb\<cr>
No match
    a\rb\<any>
No match
    a\x85b\<any> 
No match
    a\rb\<anycrlf>
No match

/abc./mgx<any>
    abc1 \x0aabc2 \x0babc3xx \x0cabc4 \x0dabc5xx \x0d\x0aabc6 \x85abc7 JUNK
 0: abc1
 0: abc2
 0: abc3
 0: abc4
 0: abc5
 0: abc6
 0: abc7

/abc.$/mgx<any>
    abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc7 abc9
 0: abc1
 0: abc2
 0: abc3
 0: abc4
 0: abc5
 0: abc6
 0: abc9

/a/<cr><any>

/a/<any><crlf>
Failed: inconsistent NEWLINE options at offset 0

/a\Rb/<bsr_unicode>
    a\nb
 0: a\x0ab
    a\rb
 0: a\x0db
    a\r\nb
 0: a\x0d\x0ab
    a\x0bb
 0: a\x0bb
    a\x0cb
 0: a\x0cb
    a\x85b
 0: a\x85b
    ** Failers
No match
    a\n\rb
No match

/a\R*b/<bsr_unicode>
    ab
 0: ab
    a\nb
 0: a\x0ab
    a\rb
 0: a\x0db
    a\r\nb
 0: a\x0d\x0ab
    a\x0bb
 0: a\x0bb
    a\x0cb
 0: a\x0cb
    a\x85b
 0: a\x85b
    a\n\rb
 0: a\x0a\x0db
    a\n\r\x85\x0cb
 0: a\x0a\x0d\x85\x0cb

/a\R+b/<bsr_unicode>
    a\nb
 0: a\x0ab
    a\rb
 0: a\x0db
    a\r\nb
 0: a\x0d\x0ab
    a\x0bb
 0: a\x0bb
    a\x0cb
 0: a\x0cb
    a\x85b
 0: a\x85b
    a\n\rb
 0: a\x0a\x0db
    a\n\r\x85\x0cb
 0: a\x0a\x0d\x85\x0cb
    ** Failers
No match
    ab
No match

/a\R{1,3}b/<bsr_unicode>
    a\nb
 0: a\x0ab
    a\n\rb
 0: a\x0a\x0db
    a\n\r\x85b
 0: a\x0a\x0d\x85b
    a\r\n\r\nb
 0: a\x0d\x0a\x0d\x0ab
    a\r\n\r\n\r\nb
 0: a\x0d\x0a\x0d\x0a\x0d\x0ab
    a\n\r\n\rb
 0: a\x0a\x0d\x0a\x0db
    a\n\n\r\nb
 0: a\x0a\x0a\x0d\x0ab
    ** Failers
No match
    a\n\n\n\rb
No match
    a\r
No match

/a[\R]b/<bsr_unicode>
    aRb
 0: aRb
    ** Failers
No match
    a\nb
No match

/(?&abc)X(?<abc>P)/I
Capturing subpattern count = 1
Named capturing subpatterns:
  abc   1
No options
No first char
Need char = 'P'
    abcPXP123
 0: PXP
 1: P

/(?1)X(?<abc>P)/I
Capturing subpattern count = 1
Named capturing subpatterns:
  abc   1
No options
No first char
Need char = 'P'
    abcPXP123
 0: PXP
 1: P

/(?:a(?&abc)b)*(?<abc>x)/
    123axbaxbaxbx456
 0: axbaxbaxbx
 1: x
    123axbaxbaxb456
 0: x
 1: x

/(?:a(?&abc)b){1,5}(?<abc>x)/
    123axbaxbaxbx456
 0: axbaxbaxbx
 1: x

/(?:a(?&abc)b){2,5}(?<abc>x)/
    123axbaxbaxbx456
 0: axbaxbaxbx
 1: x

/(?:a(?&abc)b){2,}(?<abc>x)/
    123axbaxbaxbx456
 0: axbaxbaxbx
 1: x

/(abc)(?i:(?1))/
   defabcabcxyz
 0: abcabc
 1: abc
   DEFabcABCXYZ
No match

/(abc)(?:(?i)(?1))/
   defabcabcxyz
 0: abcabc
 1: abc
   DEFabcABCXYZ
No match

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

/(a)\g/
Failed: a numbered reference must not be zero at offset 5

/(a)\g{0}/
Failed: a numbered reference must not be zero at offset 8

/(a)\g{3/
Failed: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number at offset 8

/(a)\g{4a}/
Failed: reference to non-existent subpattern at offset 9

/a.b/<lf>
    a\rb
 0: a\x0db
    *** Failers
No match
    a\nb
No match

/.+foo/
    afoo
 0: afoo
    ** Failers
No match
    \r\nfoo
No match
    \nfoo
No match

/.+foo/<crlf>
    afoo
 0: afoo
    \nfoo
 0: \x0afoo
    ** Failers
No match
    \r\nfoo
No match

/.+foo/<any>
    afoo
 0: afoo
    ** Failers
No match
    \nfoo
No match
    \r\nfoo
No match

/.+foo/s
    afoo
 0: afoo
    \r\nfoo
 0: \x0d\x0afoo
    \nfoo
 0: \x0afoo
    
/$/mg<any>
    abc\r\rxyz
 0: 
    abc\n\rxyz  
 0: 
    ** Failers 
No match
    abc\r\nxyz
No match

/(?m)$/<any>g+
    abc\r\n\r\n
 0: 
 0+ \x0d\x0a

/(?m)$|\r\n/<any>g+ 
    abc\r\n\r\n
 0: 
 0+ \x0d\x0a
 0: \x0d\x0a
 0+ 
    
/(?m)$/<any>g+ 
    abc\r\n\r\n
 0: 
 0+ \x0d\x0a\x0d\x0a
 0: 
 0+ \x0d\x0a
 0: 
 0+ 

/abc.$/mgx<anycrlf>
    abc1\x0a abc2\x0b abc3\x0c abc4\x0d abc5\x0d\x0a abc6\x85 abc9
 0: abc1
 0: abc4
 0: abc5
 0: abc9

/X/m
    XABC
 0: X
    ** Failers 
No match
    XABC\B
No match

/(ab|c)(?-1)/BZ
------------------------------------------------------------------
        Bra
        CBra 1
        ab
        Alt
        c
        Ket
        Recurse
        Ket
        End
------------------------------------------------------------------
    abc
 0: abc
 1: ab

/xy(?+1)(abc)/BZ
------------------------------------------------------------------
        Bra
        xy
        Recurse
        CBra 1
        abc
        Ket
        Ket
        End
------------------------------------------------------------------
    xyabcabc
 0: xyabcabc
 1: abc
    ** Failers
No match
    xyabc  
No match
    
/x(?-0)y/
Failed: a numbered reference must not be zero at offset 5

/x(?-1)y/
Failed: reference to non-existent subpattern at offset 5

/x(?+0)y/ 
Failed: a numbered reference must not be zero at offset 5

/x(?+1)y/
Failed: reference to non-existent subpattern at offset 5

/(abc)?(?(-1)X|Y)/BZ
------------------------------------------------------------------
        Bra
        
        Brazero
        CBra 1
        abc
        Ket
        Cond
      1 Cond ref
        X
        Alt
        Y
        Ket
        Ket
        End
------------------------------------------------------------------
    abcX
 0: abcX
 1: abc
    Y
 0: Y
    ** Failers
No match
    abcY   
No match
    
/((?(+1)X|Y)(abc))+/BZ 
------------------------------------------------------------------
        Bra
        
        CBra 1
        Cond
      2 Cond ref
        X
        Alt
        Y
        Ket
        CBra 2
        abc
        Ket
        KetRmax
        Ket
        End
------------------------------------------------------------------
    YabcXabc
 0: YabcXabc
 1: Xabc
 2: abc
    YabcXabcXabc
 0: YabcXabcXabc
 1: Xabc
 2: abc
    ** Failers
No match
    XabcXabc  
No match

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

/((?(-1)a))/BZ
------------------------------------------------------------------
        Bra
        CBra 1
        Cond
      1 Cond ref
        a
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------

/((?(-2)a))/BZ
Failed: reference to non-existent subpattern at offset 7

/(?(+1)X|Y)(.)/BZ
------------------------------------------------------------------
        Bra
        
        Cond
      1 Cond ref
        X
        Alt
        Y
        Ket
        CBra 1
        Any
        Ket
        Ket
        End
------------------------------------------------------------------
    Y!
 0: Y!
 1: !

/(?<A>tom|bon)-\k{A}/
    tom-tom
 0: tom-tom
 1: tom
    bon-bon 
 0: bon-bon
 1: bon
    ** Failers
No match
    tom-bon  
No match

/\g{A/ 
Failed: syntax error in subpattern name (missing terminator) at offset 4

/(?|(abc)|(xyz))/BZ
------------------------------------------------------------------
        Bra
        Bra
        CBra 1
        abc
        Ket
        Alt
        CBra 1
        xyz
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------
   >abc<
 0: abc
 1: abc
   >xyz< 
 0: xyz
 1: xyz

/(x)(?|(abc)|(xyz))(x)/BZ
------------------------------------------------------------------
        Bra
        CBra 1
        x
        Ket
        Bra
        CBra 2
        abc
        Ket
        Alt
        CBra 2
        xyz
        Ket
        Ket
        CBra 3
        x
        Ket
        Ket
        End
------------------------------------------------------------------
    xabcx
 0: xabcx
 1: x
 2: abc
 3: x
    xxyzx 
 0: xxyzx
 1: x
 2: xyz
 3: x

/(x)(?|(abc)(pqr)|(xyz))(x)/BZ
------------------------------------------------------------------
        Bra
        CBra 1
        x
        Ket
        Bra
        CBra 2
        abc
        Ket
        CBra 3
        pqr
        Ket
        Alt
        CBra 2
        xyz
        Ket
        Ket
        CBra 4
        x
        Ket
        Ket
        End
------------------------------------------------------------------
    xabcpqrx
 0: xabcpqrx
 1: x
 2: abc
 3: pqr
 4: x
    xxyzx 
 0: xxyzx
 1: x
 2: xyz
 3: <unset>
 4: x

/\H++X/BZ
------------------------------------------------------------------
        Bra
        \H++
        X
        Ket
        End
------------------------------------------------------------------
    ** Failers
No match
    XXXX
No match
    
/\H+\hY/BZ
------------------------------------------------------------------
        Bra
        \H++
        \h
        Y
        Ket
        End
------------------------------------------------------------------
    XXXX Y 
 0: XXXX Y

/\H+ Y/BZ
------------------------------------------------------------------
        Bra
        \H++
         Y
        Ket
        End
------------------------------------------------------------------

/\h+A/BZ
------------------------------------------------------------------
        Bra
        \h++
        A
        Ket
        End
------------------------------------------------------------------

/\v*B/BZ
------------------------------------------------------------------
        Bra
        \v*+
        B
        Ket
        End
------------------------------------------------------------------

/\V+\x0a/BZ
------------------------------------------------------------------
        Bra
        \V++
        \x0a
        Ket
        End
------------------------------------------------------------------

/A+\h/BZ
------------------------------------------------------------------
        Bra
        A++
        \h
        Ket
        End
------------------------------------------------------------------

/ *\H/BZ
------------------------------------------------------------------
        Bra
         *+
        \H
        Ket
        End
------------------------------------------------------------------

/A*\v/BZ
------------------------------------------------------------------
        Bra
        A*+
        \v
        Ket
        End
------------------------------------------------------------------

/\x0b*\V/BZ
------------------------------------------------------------------
        Bra
        \x0b*+
        \V
        Ket
        End
------------------------------------------------------------------

/\d+\h/BZ
------------------------------------------------------------------
        Bra
        \d++
        \h
        Ket
        End
------------------------------------------------------------------

/\d*\v/BZ
------------------------------------------------------------------
        Bra
        \d*+
        \v
        Ket
        End
------------------------------------------------------------------

/S+\h\S+\v/BZ
------------------------------------------------------------------
        Bra
        S++
        \h
        \S++
        \v
        Ket
        End
------------------------------------------------------------------

/\w{3,}\h\w+\v/BZ
------------------------------------------------------------------
        Bra
        \w{3}
        \w*+
        \h
        \w++
        \v
        Ket
        End
------------------------------------------------------------------

/\h+\d\h+\w\h+\S\h+\H/BZ
------------------------------------------------------------------
        Bra
        \h++
        \d
        \h++
        \w
        \h++
        \S
        \h++
        \H
        Ket
        End
------------------------------------------------------------------

/\v+\d\v+\w\v+\S\v+\V/BZ
------------------------------------------------------------------
        Bra
        \v++
        \d
        \v++
        \w
        \v+
        \S
        \v++
        \V
        Ket
        End
------------------------------------------------------------------

/\H+\h\H+\d/BZ
------------------------------------------------------------------
        Bra
        \H++
        \h
        \H+
        \d
        Ket
        End
------------------------------------------------------------------

/\V+\v\V+\w/BZ
------------------------------------------------------------------
        Bra
        \V++
        \v
        \V+
        \w
        Ket
        End
------------------------------------------------------------------

/\( (?: [()]* | (?R) )* \)/x
\J1024(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)
 0: (0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(0(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)

/[\E]AAA/
Failed: missing terminating ] for character class at offset 7

/[\Q\E]AAA/
Failed: missing terminating ] for character class at offset 9

/[\E]AAA/
Failed: missing terminating ] for character class at offset 8

/[\Q\E]AAA/
Failed: missing terminating ] for character class at offset 10

/[\E]AAA/
Failed: missing terminating ] for character class at offset 8

/[\Q\E]AAA/
Failed: missing terminating ] for character class at offset 10

/A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/BZ
------------------------------------------------------------------
        Bra
        A
        *PRUNE
        B
        *SKIP
        C
        *THEN
        D
        *COMMIT
        E
        *FAIL
        F
        *FAIL
        G
        *FAIL
        H
        *ACCEPT
        I
        Ket
        End
------------------------------------------------------------------

/a+(*FAIL)/C
    aaaaaa
--->aaaaaa
 +0           
 +1           a+
 +3          (*FAIL)
 +3          (*FAIL)
 +3          (*FAIL)
 +3          (*FAIL)
 +3          (*FAIL)
 +3          (*FAIL)
No match
    
/a+b?c+(*FAIL)/C
    aaabccc
--->aaabccc
 +0            a+
 +2           b?
 +4           c+
 +6           (*FAIL)
 +6           (*FAIL)
 +6           (*FAIL)
 +4           c+
 +2           b?
 +4           c+
 +2           b?
 +4           c+
 +0            a+
 +2           b?
 +4           c+
 +6           (*FAIL)
 +6           (*FAIL)
 +6           (*FAIL)
 +4           c+
 +2           b?
 +4           c+
 +0            a+
 +2           b?
 +4           c+
 +6           (*FAIL)
 +6           (*FAIL)
 +6           (*FAIL)
 +4           c+
No match

/a+b?(*PRUNE)c+(*FAIL)/C
    aaabccc
--->aaabccc
 +0            a+
 +2           b?
 +4           (*PRUNE)
+12           c+
+14           (*FAIL)
+14           (*FAIL)
+14           (*FAIL)
 +0            a+
 +2           b?
 +4           (*PRUNE)
+12           c+
+14           (*FAIL)
+14           (*FAIL)
+14           (*FAIL)
 +0            a+
 +2           b?
 +4           (*PRUNE)
+12           c+
+14           (*FAIL)
+14           (*FAIL)
+14           (*FAIL)
No match

/a+b?(*COMMIT)c+(*FAIL)/C
    aaabccc
--->aaabccc
 +0            a+
 +2           b?
 +4           (*COMMIT)
+13           c+
+15           (*FAIL)
+15           (*FAIL)
+15           (*FAIL)
No match
    
/a+b?(*SKIP)c+(*FAIL)/C
    aaabcccaaabccc
--->aaabcccaaabccc
 +0                   a+
 +2                  b?
 +4                  (*SKIP)
+11                  c+
+13                  (*FAIL)
+13                  (*FAIL)
+13                  (*FAIL)
 +0                   a+
 +2                  b?
 +4                  (*SKIP)
+11                  c+
+13                  (*FAIL)
+13                  (*FAIL)
+13                  (*FAIL)
No match

/a+b?(*THEN)c+(*FAIL)/C
    aaabccc
--->aaabccc
 +0            a+
 +2           b?
 +4           (*THEN)
+11           c+
+13           (*FAIL)
+13           (*FAIL)
+13           (*FAIL)
 +0            a+
 +2           b?
 +4           (*THEN)
+11           c+
+13           (*FAIL)
+13           (*FAIL)
+13           (*FAIL)
 +0            a+
 +2           b?
 +4           (*THEN)
+11           c+
+13           (*FAIL)
+13           (*FAIL)
+13           (*FAIL)
No match
    
/a(*MARK)b/ 
Failed: (*MARK) must have an argument at offset 7

/(?i:A{1,}\6666666666)/
Failed: number is too big at offset 19

/\g6666666666/
Failed: number is too big at offset 11

/[\g6666666666]/BZ
------------------------------------------------------------------
        Bra
        [6g]
        Ket
        End
------------------------------------------------------------------

/(?1)\c[/
Failed: reference to non-existent subpattern at offset 3

/.+A/<crlf>
    \r\nA
No match
    
/\nA/<crlf>
    \r\nA 
 0: \x0aA

/[\r\n]A/<crlf>
    \r\nA 
 0: \x0aA

/(\r|\n)A/<crlf>
    \r\nA 
 0: \x0aA
 1: \x0a

/a(*CR)b/
Failed: (*VERB) not recognized at offset 5

/(*CR)a.b/
    a\nb
 0: a\x0ab
    ** Failers
No match
    a\rb  
No match

/(*CR)a.b/<lf>
    a\nb
 0: a\x0ab
    ** Failers
No match
    a\rb  
No match

/(*LF)a.b/<CRLF>
    a\rb
 0: a\x0db
    ** Failers
No match
    a\nb  
No match

/(*CRLF)a.b/
    a\rb
 0: a\x0db
    a\nb  
 0: a\x0ab
    ** Failers
No match
    a\r\nb  
No match

/(*ANYCRLF)a.b/<CR>
    ** Failers
No match
    a\rb
No match
    a\nb  
No match
    a\r\nb  
No match

/(*ANY)a.b/<cr>
    ** Failers
No match
    a\rb
No match
    a\nb  
No match
    a\r\nb  
No match
    a\x85b 
No match
    
/(*ANY).*/g
    abc\r\ndef
 0: abc
 0: 
 0: def
 0: 

/(*ANYCRLF).*/g
    abc\r\ndef
 0: abc
 0: 
 0: def
 0: 

/(*CRLF).*/g
    abc\r\ndef
 0: abc
 0: 
 0: def
 0: 

/a\Rb/I<bsr_anycrlf>
Capturing subpattern count = 0
Options: bsr_anycrlf
First char = 'a'
Need char = 'b'
    a\rb
 0: a\x0db
    a\nb
 0: a\x0ab
    a\r\nb
 0: a\x0d\x0ab
    ** Failers
No match
    a\x85b
No match
    a\x0bb     
No match

/a\Rb/I<bsr_unicode>
Capturing subpattern count = 0
Options: bsr_unicode
First char = 'a'
Need char = 'b'
    a\rb
 0: a\x0db
    a\nb
 0: a\x0ab
    a\r\nb
 0: a\x0d\x0ab
    a\x85b
 0: a\x85b
    a\x0bb     
 0: a\x0bb
    ** Failers 
No match
    a\x85b\<bsr_anycrlf>
No match
    a\x0bb\<bsr_anycrlf>
No match
    
/a\R?b/I<bsr_anycrlf>
Capturing subpattern count = 0
Options: bsr_anycrlf
First char = 'a'
Need char = 'b'
    a\rb
 0: a\x0db
    a\nb
 0: a\x0ab
    a\r\nb
 0: a\x0d\x0ab
    ** Failers
No match
    a\x85b
No match
    a\x0bb     
No match

/a\R?b/I<bsr_unicode>
Capturing subpattern count = 0
Options: bsr_unicode
First char = 'a'
Need char = 'b'
    a\rb
 0: a\x0db
    a\nb
 0: a\x0ab
    a\r\nb
 0: a\x0d\x0ab
    a\x85b
 0: a\x85b
    a\x0bb     
 0: a\x0bb
    ** Failers 
No match
    a\x85b\<bsr_anycrlf>
No match
    a\x0bb\<bsr_anycrlf>
No match
    
/a\R{2,4}b/I<bsr_anycrlf>
Capturing subpattern count = 0
Options: bsr_anycrlf
First char = 'a'
Need char = 'b'
    a\r\n\nb
 0: a\x0d\x0a\x0ab
    a\n\r\rb
 0: a\x0a\x0d\x0db
    a\r\n\r\n\r\n\r\nb
 0: a\x0d\x0a\x0d\x0a\x0d\x0a\x0d\x0ab
    ** Failers
No match
    a\x85\85b
No match
    a\x0b\0bb     
No match

/a\R{2,4}b/I<bsr_unicode>
Capturing subpattern count = 0
Options: bsr_unicode
First char = 'a'
Need char = 'b'
    a\r\rb
 0: a\x0d\x0db
    a\n\n\nb
 0: a\x0a\x0a\x0ab
    a\r\n\n\r\rb
 0: a\x0d\x0a\x0a\x0d\x0db
    a\x85\85b
No match
    a\x0b\0bb     
No match
    ** Failers 
No match
    a\r\r\r\r\rb 
No match
    a\x85\85b\<bsr_anycrlf>
No match
    a\x0b\0bb\<bsr_anycrlf>
No match
 
/(*BSR_ANYCRLF)a\Rb/I
Capturing subpattern count = 0
Options: bsr_anycrlf
First char = 'a'
Need char = 'b'
    a\nb
 0: a\x0ab
    a\rb 
 0: a\x0db

/(*BSR_UNICODE)a\Rb/I
Capturing subpattern count = 0
Options: bsr_unicode
First char = 'a'
Need char = 'b'
    a\x85b
 0: a\x85b

/(*BSR_ANYCRLF)(*CRLF)a\Rb/I
Capturing subpattern count = 0
Options: bsr_anycrlf
Forced newline sequence: CRLF
First char = 'a'
Need char = 'b'
    a\nb
 0: a\x0ab
    a\rb 
 0: a\x0db

/(*CRLF)(*BSR_UNICODE)a\Rb/I
Capturing subpattern count = 0
Options: bsr_unicode
Forced newline sequence: CRLF
First char = 'a'
Need char = 'b'
    a\x85b
 0: a\x85b

/(*CRLF)(*BSR_ANYCRLF)(*CR)ab/I
Capturing subpattern count = 0
Options: bsr_anycrlf
Forced newline sequence: CR
First char = 'a'
Need char = 'b'

/(?<a>)(?&)/
Failed: subpattern name expected at offset 9

/(?<abc>)(?&a)/
Failed: reference to non-existent subpattern at offset 12

/(?<a>)(?&aaaaaaaaaaaaaaaaaaaaaaa)/
Failed: reference to non-existent subpattern at offset 32

/(?+-a)/
Failed: digit expected after (?+ at offset 3

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

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

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

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

/(?(+2))()()/

/(?(2))()()/

/\k''/
Failed: subpattern name expected at offset 3

/\k<>/
Failed: subpattern name expected at offset 3

/\k{}/
Failed: subpattern name expected at offset 3

/\k/
Failed: \k is not followed by a braced, angle-bracketed, or quoted name at offset 2

/\kabc/
Failed: \k is not followed by a braced, angle-bracketed, or quoted name at offset 5

/(?P=)/
Failed: subpattern name expected at offset 4

/(?P>)/
Failed: subpattern name expected at offset 4

/(?!\w)(?R)/
Failed: recursive call could loop indefinitely at offset 9

/(?=\w)(?R)/
Failed: recursive call could loop indefinitely at offset 9

/(?<!\w)(?R)/
Failed: recursive call could loop indefinitely at offset 10

/(?<=\w)(?R)/
Failed: recursive call could loop indefinitely at offset 10

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

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

/[[:f\oo:]]/
Failed: unknown POSIX class name at offset 3

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

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

/[[:l\ower:]]/
Failed: unknown POSIX class name at offset 3

/[[:abc\:]]/
Failed: unknown POSIX class name at offset 3

/[abc[:x\]pqr:]]/
Failed: unknown POSIX class name at offset 6

/[[:a\dz:]]/
Failed: unknown POSIX class name at offset 3

/((a|b\g<-1'c))/
Failed: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number at offset 15

/(?+1)(?<a>x|y){0}z/
    xzxx
 0: xz
    yzyy 
 0: yz
    ** Failers
No match
    xxz  
No match

/(\3)(\1)(a)/
    cat
No match

/(\3)(\1)(a)/<JS>
    cat
 0: a
 1: 
 2: 
 3: a
    
/TA]/
    The ACTA] comes 
 0: TA]

/TA]/<JS>
Failed: ] is an invalid data character in JavaScript compatibility mode at offset 2

/(?2)[]a()b](abc)/
Failed: reference to non-existent subpattern at offset 3

/(?2)[]a()b](abc)/
Failed: reference to non-existent subpattern at offset 3

/(?1)[]a()b](abc)/
    abcbabc
 0: abcbabc
 1: abc
    ** Failers 
No match
    abcXabc
No match

/(?1)[]a()b](abc)/
    abcXabc
 0: abcXabc
 1: abc
    ** Failers 
No match
    abcbabc
No match

/(?2)[]a()b](abc)(xyz)/
    xyzbabcxyz
 0: xyzbabcxyz
 1: abc
 2: xyz

/(?&N)[]a(?<N>)](?<M>abc)/
Failed: reference to non-existent subpattern at offset 4

/(?&N)[]a(?<N>)](abc)/
Failed: reference to non-existent subpattern at offset 4

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

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

/a[]b/<JS>
    ** Failers
No match
    ab
No match

/a[]+b/<JS>
    ** Failers
No match
    ab 
No match

/a[]*+b/<JS>
    ** Failers
No match
    ab 
No match

/a[]b/<JS>
    aXb
 0: aXb
    a\nb 
 0: a\x0ab
    ** Failers
No match
    ab  
No match
    
/a[]+b/<JS> 
    aXb
 0: aXb
    a\nX\nXb 
 0: a\x0aX\x0aXb
    ** Failers
No match
    ab  
No match

/a(?!)+b/
Failed: nothing to repeat at offset 5

/a(*FAIL)+b/
Failed: nothing to repeat at offset 8

/(abc|pqr|123){0}[xyz]/SI
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 1
Starting byte set: x y z 

/(?(?=.*b)b|)/CI
Capturing subpattern count = 0
Options:
No first char
No need char
   adc
--->adc
 +0        (?(?=.*b)b|)
 +2        (?=.*b)
 +5        .*
 +7       b
 +7       b
 +7       b
 +7        b
+12        )
+13        
 0: 
   abc 
--->abc
 +0        (?(?=.*b)b|)
 +2        (?=.*b)
 +5        .*
 +7       b
 +7       b
 +7       b
 +8       )
 +9        b
 +0        (?(?=.*b)b|)
 +2        (?=.*b)
 +5        .*
 +7       b
 +7       b
 +7        b
 +8       )
 +9        b
+10       |
+13       
 0: b
   
/(?(?=b).*b|d)/I
Capturing subpattern count = 0
No options
No first char
No need char

/(?(?=.*b).*b|d)/I
Capturing subpattern count = 0
No options
First char at start or follows newline
No need char

/xyz/C
  xyz 
--->xyz
 +0        x
 +1       y
 +2       z
 +3       
 0: xyz
  abcxyz 
--->abcxyz
 +0           x
 +1          y
 +2          z
 +3          
 0: xyz
  abcxyz\Y
--->abcxyz
 +0           x
 +0           x
 +0           x
 +0           x
 +1          y
 +2          z
 +3          
 0: xyz
  ** Failers 
No match
  abc
No match
  abc\Y
--->abc
 +0        x
 +0        x
 +0        x
 +0        x
No match
  abcxypqr  
No match
  abcxypqr\Y  
--->abcxypqr
 +0             x
 +0             x
 +0             x
 +0             x
 +1            y
 +2            z
 +0             x
 +0             x
 +0             x
 +0             x
 +0             x
No match
  
/(*NO_START_OPT)xyz/C
  abcxyz 
--->abcxyz
+15           x
+15           x
+15           x
+15           x
+16          y
+17          z
+18          
 0: xyz

/xyz/CY
  abcxyz 
--->abcxyz
 +0           x
 +0           x
 +0           x
 +0           x
 +1          y
 +2          z
 +3          
 0: xyz

/"((?(?=[a])["])|b)*"$/C
    "ab"
--->"ab"
 +0         
 +1         "
 +2        ((?(?=[a])["])|b)*
 +3        (?(?=[a])["])
 +5        (?=[a])
 +8        [a]
+11        )
+12        ["]
+16        )
+17        |
 +3        (?(?=[a])["])
 +5        (?=[a])
 +8        [a]
+21        "
+18        b
+19        )
 +3        (?(?=[a])["])
 +5        (?=[a])
 +8        [a]
+21        "
+22        $
+23        
 0: "ab"
 1: 

/"((?(?=[a])["])|b)*"$/
    "ab"
 0: "ab"
 1: 

/X(?5)(a)(?|(b)|(q))(c)(d)Y/
Failed: reference to non-existent subpattern at offset 5

/X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)/
    XYabcdY
 0: XYabcdY
 1: a
 2: b
 3: c
 4: d
 5: Y
 
/Xa{2,4}b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/Xa{2,4}?b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/Xa{2,4}+b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/X\d{2,4}b/
    X\P
Partial match: X
    X3\P
Partial match: X3
    X33\P 
Partial match: X33
    X333\P
Partial match: X333
    X3333\P 
Partial match: X3333
    
/X\d{2,4}?b/
    X\P
Partial match: X
    X3\P
Partial match: X3
    X33\P 
Partial match: X33
    X333\P
Partial match: X333
    X3333\P 
Partial match: X3333
    
/X\d{2,4}+b/
    X\P
Partial match: X
    X3\P
Partial match: X3
    X33\P 
Partial match: X33
    X333\P
Partial match: X333
    X3333\P 
Partial match: X3333
    
/X\D{2,4}b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/X\D{2,4}?b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/X\D{2,4}+b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/X[abc]{2,4}b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/X[abc]{2,4}?b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/X[abc]{2,4}+b/
    X\P
Partial match: X
    Xa\P
Partial match: Xa
    Xaa\P 
Partial match: Xaa
    Xaaa\P
Partial match: Xaaa
    Xaaaa\P 
Partial match: Xaaaa
    
/X[a]{2,4}b/
    X\P
Partial match: X
    Xz\P
Partial match: Xz
    Xzz\P 
Partial match: Xzz
    Xzzz\P
Partial match: Xzzz
    Xzzzz\P 
Partial match: Xzzzz
    
/X[a]{2,4}?b/
    X\P
Partial match: X
    Xz\P
Partial match: Xz
    Xzz\P 
Partial match: Xzz
    Xzzz\P
Partial match: Xzzz
    Xzzzz\P 
Partial match: Xzzzz
    
/X[a]{2,4}+b/
    X\P
Partial match: X
    Xz\P
Partial match: Xz
    Xzz\P 
Partial match: Xzz
    Xzzz\P
Partial match: Xzzz
    Xzzzz\P 
Partial match: Xzzzz
    
/(Y)X\1{2,4}b/
    YX\P
Partial match: YX
    YXY\P
Partial match: YXY
    YXYY\P 
Partial match: YXYY
    YXYYY\P
Partial match: YXYYY
    YXYYYY\P 
Partial match: YXYYYY
    
/(Y)X\1{2,4}?b/
    YX\P
Partial match: YX
    YXY\P
Partial match: YXY
    YXYY\P 
Partial match: YXYY
    YXYYY\P
Partial match: YXYYY
    YXYYYY\P 
Partial match: YXYYYY
    
/(Y)X\1{2,4}+b/
    YX\P
Partial match: YX
    YXY\P
Partial match: YXY
    YXYY\P 
Partial match: YXYY
    YXYYY\P
Partial match: YXYYY
    YXYYYY\P 
Partial match: YXYYYY
    
/\++\KZ|\d+X|9+Y/
    ++++123999\P
Partial match: 123999
    ++++123999Y\P
 0: 999Y
    ++++Z1234\P 
 0: Z

/Z(*F)/
    Z\P
No match
    ZA\P 
No match
    
/Z(?!)/
    Z\P 
No match
    ZA\P 
No match

/dog(sbody)?/
    dogs\P
 0: dog
    dogs\P\P 
Partial match: dogs
    
/dog(sbody)??/
    dogs\P
 0: dog
    dogs\P\P 
 0: dog

/dog|dogsbody/
    dogs\P
 0: dog
    dogs\P\P 
 0: dog
 
/dogsbody|dog/
    dogs\P
 0: dog
    dogs\P\P 
Partial match: dogs

/\bthe cat\b/
    the cat\P
 0: the cat
    the cat\P\P
Partial match: the cat

/abc/
   abc\P
 0: abc
   abc\P\P
 0: abc
   
/abc\K123/
    xyzabc123pqr
 0: 123
    xyzabc12\P
Partial match: abc12
    xyzabc12\P\P
Partial match: abc12
    
/(?<=abc)123/
    xyzabc123pqr 
 0: 123
    xyzabc12\P
Partial match: abc12
    xyzabc12\P\P
Partial match: abc12

/\babc\b/
    +++abc+++
 0: abc
    +++ab\P
Partial match: +ab
    +++ab\P\P  
Partial match: +ab

/(?&word)(?&element)(?(DEFINE)(?<element><[m][>]>[<])(?<word>\w*+))/BZ
------------------------------------------------------------------
        Bra
        Recurse
        Recurse
        Cond
        Cond def
        CBra 1
        <
        [m]
        [>]
        >
        [<]
        Ket
        CBra 2
        \w*+
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------

/(?&word)(?&element)(?(DEFINE)(?<element><[\d][>]>[<])(?<word>\w*+))/BZ
------------------------------------------------------------------
        Bra
        Recurse
        Recurse
        Cond
        Cond def
        CBra 1
        <
        [\x00-/:-\xff] (neg)
        [>]
        >
        [<]
        Ket
        CBra 2
        \w*+
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------

/(ab)(x(y)z(cd(*ACCEPT)))pq/BZ
------------------------------------------------------------------
        Bra
        CBra 1
        ab
        Ket
        CBra 2
        x
        CBra 3
        y
        Ket
        z
        CBra 4
        cd
        Close 4
        Close 2
        *ACCEPT
        Ket
        Ket
        pq
        Ket
        End
------------------------------------------------------------------

/abc\K/+
    abcdef
 0: 
 0+ def
    abcdef\N\N
 0: 
 0+ def
    xyzabcdef\N\N
 0: 
 0+ def
    ** Failers
No match
    abcdef\N 
No match
    xyzabcdef\N
No match
    
/(?:(?=abc)|abc\K)/+
    abcdef
 0: 
 0+ abcdef
    abcdef\N\N 
 0: 
 0+ def
    ** Failers 
No match
    abcdef\N 
No match

/a?b?/+
    xyz
 0: 
 0+ xyz
    xyzabc
 0: 
 0+ xyzabc
    xyzabc\N
 0: ab
 0+ c
    xyzabc\N\N
 0: 
 0+ yzabc
    xyz\N\N    
 0: 
 0+ yz
    ** Failers 
 0: 
 0+ ** Failers
    xyz\N 
No match

/a?b?/+
    xyz
 0: 
 0+ xyz
    xyzabc
 0: 
 0+ xyzabc
    ** Failers 
 0: 
 0+ ** Failers
    xyzabc\N
No match
    xyzabc\N\N
No match
    xyz\N\N    
No match
    xyz\N 
No match
    
/(?<name>a|b\g<name>c)/
    aaaa
 0: a
 1: a
    bacxxx
 0: bac
 1: bac
    bbaccxxx 
 0: bbacc
 1: bbacc
    bbbacccxx
 0: bbbaccc
 1: bbbaccc

/(?<name>a|b\g'name'c)/
    aaaa
 0: a
 1: a
    bacxxx
 0: bac
 1: bac
    bbaccxxx 
 0: bbacc
 1: bbacc
    bbbacccxx
 0: bbbaccc
 1: bbbaccc

/(a|b\g<1>c)/
    aaaa
 0: a
 1: a
    bacxxx
 0: bac
 1: bac
    bbaccxxx 
 0: bbacc
 1: bbacc
    bbbacccxx
 0: bbbaccc
 1: bbbaccc

/(a|b\g'1'c)/
    aaaa
 0: a
 1: a
    bacxxx
 0: bac
 1: bac
    bbaccxxx 
 0: bbacc
 1: bbacc
    bbbacccxx
 0: bbbaccc
 1: bbbaccc

/(a|b\g'-1'c)/
    aaaa
 0: a
 1: a
    bacxxx
 0: bac
 1: bac
    bbaccxxx 
 0: bbacc
 1: bbacc
    bbbacccxx
 0: bbbaccc
 1: bbbaccc

/((a|b\g<-1>c))/
    aaaa
 0: a
 1: a
 2: a
    bacxxx
 0: bac
 1: bac
 2: bac
    bbaccxxx 
 0: bbacc
 1: bbacc
 2: bbacc
    bbbacccxx
 0: bbbaccc
 1: bbbaccc
 2: bbbaccc

/(?-i:\g<name>)(?i:(?<name>a))/
    XaaX
 0: aa
 1: a
    XAAX 
 0: AA
 1: A

/(?i:\g<name>)(?-i:(?<name>a))/
    XaaX
 0: aa
 1: a
    ** Failers 
No match
    XAAX 
No match

/(?-i:\g<+1>)(?i:(a))/
    XaaX
 0: aa
 1: a
    XAAX 
 0: AA
 1: A

/(?=(?<regex>(?#simplesyntax)\$(?<name>[a-zA-Z_\x{7f}-\x{ff}][a-zA-Z0-9_\x{7f}-\x{ff}]*)(?:\[(?<index>[a-zA-Z0-9_\x{7f}-\x{ff}]+|\$\g<name>)\]|->\g<name>(\(.*?\))?)?|(?#simple syntax withbraces)\$\{(?:\g<name>(?<indices>\[(?:\g<index>|'(?:\\.|['\\])*'|"(?:\g<regex>|\\.|["\\])*")\])?|\g<complex>|\$\{\g<complex>\})\}|(?#complexsyntax)\{(?<complex>\$(?<segment>\g<name>(\g<indices>*|\(.*?\))?)(?:->\g<segment>)*|\$\g<complex>|\$\{\g<complex>\})\}))\{/

/(?<n>a|b|c)\g<n>*/
   abc
 0: abc
 1: a
   accccbbb 
 0: accccbbb
 1: a

/X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)/
    XYabcdY
 0: XYabcdY
 1: a
 2: b
 3: <unset>
 4: <unset>
 5: c
 6: d
 7: Y

/(?<=b(?1)|zzz)(a)/
    xbaax
 0: a
 1: a
    xzzzax 
 0: a
 1: a

/(a)(?<=b\1)/
Failed: lookbehind assertion is not fixed length at offset 10

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

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

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

/(?<=b(?1))xyz/
Failed: reference to non-existent subpattern at offset 8

/(?<=b(?1))xyz(b+)pqrstuvew/
Failed: lookbehind assertion is not fixed length at offset 26

/(a|bc)\1/SI
Capturing subpattern count = 1
Max back reference = 1
No options
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b 

/(a|bc)\1{2,3}/SI
Capturing subpattern count = 1
Max back reference = 1
No options
No first char
No need char
Subject length lower bound = 3
Starting byte set: a b 

/(a|bc)(?1)/SI
Capturing subpattern count = 1
No options
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b 

/(a|b\1)(a|b\1)/SI
Capturing subpattern count = 2
Max back reference = 1
No options
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b 

/(a|b\1){2}/SI
Capturing subpattern count = 1
Max back reference = 1
No options
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b 

/(a|bbbb\1)(a|bbbb\1)/SI
Capturing subpattern count = 2
Max back reference = 1
No options
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b 

/(a|bbbb\1){2}/SI
Capturing subpattern count = 1
Max back reference = 1
No options
No first char
No need char
Subject length lower bound = 2
Starting byte set: a b 

/From +([ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/SI
Capturing subpattern count = 1
Options: anchored
No first char
Need char = ':'
Subject length lower bound = 22
No set of starting bytes

/<tr([\w\W\s\d][<>]{0,})><TD([\w\W\s\d][<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><TD([\w\W\s\d][<>]{0,})>([\w\W\s\d][<>]{0,})<\/TD><\/TR>/isIS
Capturing subpattern count = 11
Options: caseless dotall
First char = '<'
Need char = '>'
Subject length lower bound = 47
No set of starting bytes

"(?>.*/)foo"SI
Capturing subpattern count = 0
No options
No first char
Need char = 'o'
Subject length lower bound = 4
No set of starting bytes

/(?(?=[a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /xSI
Capturing subpattern count = 0
Options: extended
No first char
Need char = '-'
Subject length lower bound = 8
No set of starting bytes

/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/iSI
Capturing subpattern count = 1
Options: caseless
No first char
No need char
Subject length lower bound = 1
Starting byte set: A B C a b c 

/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/SI
Capturing subpattern count = 0
No options
No first char
Need char = 'b'
Subject length lower bound = 41
Starting byte set: c d 

/<a[\s]+href[\s]*=[\s]*          # find <a href=
 ([\"\'])?                       # find single or double quote
 (?(1) (.*?)\1 | ([\s]+))       # if quote found, match up to next matching
                                 # quote, otherwise match up to next space
/isxSI
Capturing subpattern count = 3
Max back reference = 1
Options: caseless extended dotall
First char = '<'
Need char = '='
Subject length lower bound = 9
No set of starting bytes

/(?!:)                       # colon disallowed at start
  (?:                         # start of item
    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
    (?(1)0 | () ) )           # if null previously matched, fail; else null
    :                         # followed by colon
  ){1,7}                      # end item; 1-7 of them required               
  [0-9a-f]{1,4} $             # final hex number at end of string
  (?(1)|.)                    # check that there was an empty component
  /xiIS
Capturing subpattern count = 1
Options: anchored caseless extended
No first char
Need char = ':'
Subject length lower bound = 2
No set of starting bytes

/(?|(?<a>A)|(?<a>B))/I
Capturing subpattern count = 1
Named capturing subpatterns:
  a   1
  a   1
No options
No first char
No need char
    AB\Ca
 0: A
 1: A
  C A (1) a
    BA\Ca
 0: B
 1: B
  C B (1) a

/(?|(?<a>A)|(?<b>B))/ 
Failed: different names for subpatterns of the same number are not allowed at offset 15

/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |
    b(?<quote> (?<apostrophe>')|(?<realquote>")) ) 
    (?('quote')[a-z]+|[0-9]+)/JIx
Capturing subpattern count = 6
Named capturing subpatterns:
  apostrophe   2
  apostrophe   5
  quote        1
  quote        4
  realquote    3
  realquote    6
Options: extended dupnames
No first char
No need char
    a"aaaaa
 0: a"aaaaa
 1: "
 2: <unset>
 3: "
    b"aaaaa 
 0: b"aaaaa
 1: <unset>
 2: <unset>
 3: <unset>
 4: "
 5: <unset>
 6: "
    ** Failers 
No match
    b"11111
No match
    a"11111 
No match
    
/(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/JDZx
------------------------------------------------------------------
        Bra
        
        Bra
        CBra 1
        a
        Ket
        CBra 2
        b
        Ket
        CBra 3
        c
        Ket
        CBra 4
        d
        Ket
        Alt
        CBra 1
        e
        Ket
        Ket
        Cond
      4 Cond nref
        X
        Alt
        Y
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 4
Named capturing subpatterns:
  D   4
  D   1
Options: anchored extended dupnames
No first char
No need char
    abcdX
 0: abcdX
 1: a
 2: b
 3: c
 4: d
    eX
 0: eX
 1: e
    ** Failers
No match
    abcdY
No match
    ey     
No match
    
/(?<A>a) (b)(c)  (?<A>d  (?(R&A)$ | (?4)) )/JDZx
------------------------------------------------------------------
        Bra
        CBra 1
        a
        Ket
        CBra 2
        b
        Ket
        CBra 3
        c
        Ket
        CBra 4
        d
        Cond
        Cond nrecurse 1
        $
        Alt
        Recurse
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 4
Named capturing subpatterns:
  A   1
  A   4
Options: extended dupnames
First char = 'a'
Need char = 'd'
    abcdd
 0: abcdd
 1: a
 2: b
 3: c
 4: dd
    ** Failers
No match
    abcdde  
No match

/abcd*/
    xxxxabcd\P
 0: abcd
    xxxxabcd\P\P
Partial match: abcd

/abcd*/i
    xxxxabcd\P
 0: abcd
    xxxxabcd\P\P
Partial match: abcd
    XXXXABCD\P
 0: ABCD
    XXXXABCD\P\P
Partial match: ABCD

/abc\d*/
    xxxxabc1\P
 0: abc1
    xxxxabc1\P\P
Partial match: abc1

/(a)bc\1*/
    xxxxabca\P
 0: abca
 1: a
    xxxxabca\P\P
Partial match: abca

/abc[de]*/
    xxxxabcde\P
 0: abcde
    xxxxabcde\P\P
Partial match: abcde

/-- This is not in the Perl >= 5.10 test because Perl seems currently to be
    broken and not behaving as specified in that it *does* bumpalong after
    hitting (*COMMIT). --/

/(?1)(A(*COMMIT)|B)D/
    ABD
 0: ABD
 1: B
    XABD
 0: ABD
 1: B
    BAD
 0: BAD
 1: A
    ABXABD  
 0: ABD
 1: B
    ** Failers 
No match
    ABX 
No match
    BAXBAD  
No match

/(\3)(\1)(a)/<JS>
    cat
 0: a
 1: 
 2: 
 3: a

/(\3)(\1)(a)/SI<JS>
Capturing subpattern count = 3
Max back reference = 3
Options:
No first char
Need char = 'a'
Subject length lower bound = 1
No set of starting bytes
    cat
 0: a
 1: 
 2: 
 3: a

/(\3)(\1)(a)/SI
Capturing subpattern count = 3
Max back reference = 3
No options
No first char
Need char = 'a'
Subject length lower bound = 3
No set of starting bytes
    cat
No match

/i(?(DEFINE)(?<s>a))/SI
Capturing subpattern count = 1
Named capturing subpatterns:
  s   1
No options
First char = 'i'
No need char
Subject length lower bound = 1
No set of starting bytes
    i
 0: i
    
/()i(?(1)a)/SI 
Capturing subpattern count = 1
No options
No first char
Need char = 'i'
Subject length lower bound = 1
Starting byte set: i 
    ia
 0: ia
 1: 

/(?i)a(?-i)b|c/BZ
------------------------------------------------------------------
        Bra
     /i a
        b
        Alt
        c
        Ket
        End
------------------------------------------------------------------
    XabX
 0: ab
    XAbX
 0: Ab
    CcC 
 0: c
    ** Failers
No match
    XABX   
No match

/(?i)a(?s)b|c/BZ
------------------------------------------------------------------
        Bra
     /i ab
        Alt
     /i c
        Ket
        End
------------------------------------------------------------------

/(?i)a(?s-i)b|c/BZ
------------------------------------------------------------------
        Bra
     /i a
        b
        Alt
        c
        Ket
        End
------------------------------------------------------------------

/(ab(c\1)d|x){2}$/BZ
------------------------------------------------------------------
        Bra
        
        Once
        CBra 1
        ab
        CBra 2
        c
        \1
        Ket
        d
        Alt
        x
        Ket
        Ket
        Once
        CBra 1
        ab
        CBra 2
        c
        \1
        Ket
        d
        Alt
        x
        Ket
        Ket
        $
        Ket
        End
------------------------------------------------------------------
    xabcxd
 0: xabcxd
 1: abcxd
 2: cx
    
/(?&t)*+(?(DEFINE)(?<t>.))$/BZ
------------------------------------------------------------------
        Bra
        
        Braposzero
        SBraPos
        Recurse
        KetRpos
        Cond
        Cond def
        CBra 1
        Any
        Ket
        Ket
        $
        Ket
        End
------------------------------------------------------------------

/(?&t)*(?(DEFINE)(?<t>.))$/BZ
------------------------------------------------------------------
        Bra
        
        Brazero
        Once
        Recurse
        KetRmax
        Cond
        Cond def
        CBra 1
        Any
        Ket
        Ket
        $
        Ket
        End
------------------------------------------------------------------

/ -- The first four of these are not in the Perl >= 5.10 test because Perl 
     documents that the use of \K in assertions is "not well defined". The
     last is here because Perl gives the match as "b" rather than "ab". I
     believe this to be a Perl bug. --/  
      
/(?=a\Kb)ab/
    ab 
 0: b

/(?!a\Kb)ac/
    ac 
 0: ac
    
/abc(?<=b\Kc)d/
    abcd
 0: cd

/abc(?<!b\Kq)d/
    abcd
 0: abcd

/(?>a\Kb)z|(ab)/
    ab 
 0: ab
 1: ab

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

/(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/
Failed: recursive call could loop indefinitely at offset 31

/abc(*MARK:)pqr/
Failed: (*MARK) must have an argument at offset 10

/abc(*:)pqr/
Failed: (*MARK) must have an argument at offset 6

/abc(*FAIL:123)xyz/
Failed: an argument is not allowed for (*ACCEPT), (*FAIL), or (*COMMIT) at offset 13

/--- This should, and does, fail. In Perl, it does not, which I think is a 
     bug because replacing the B in the pattern by (B|D) does make it fail. ---/

/A(*COMMIT)B/+K
    ACABX
No match

/--- These should be different, but in Perl 5.11 are not, which I think
     is a bug in Perl. ---/

/A(*THEN)B|A(*THEN)C/K
    AC
 0: AC

/A(*PRUNE)B|A(*PRUNE)C/K
    AC
No match
    
/--- This should fail; the SKIP advances by one, but when we get to AC, the
     PRUNE kills it. Perl behaves differently. ---/ 
    
/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
    AAAC
No match, mark = A

/--- Mark names can be duplicated. Perl doesn't give a mark for this one,
though PCRE does. ---/

/A(*:A)B|X(*:A)Y/K
    ** Failers
No match
    XAQQ
No match, mark = A
    
/--- COMMIT at the start of a pattern should be the same as an anchor. Perl 
optimizations defeat this. So does the PCRE optimization unless we disable it 
with \Y. ---/

/(*COMMIT)ABC/
    ABCDEFG
 0: ABC
    ** Failers
No match
    DEFGABC\Y  
No match
    
/(ab (c+(*THEN)cd) | xyz)/x
    abcccd  
No match

/(ab (c+(*PRUNE)cd) | xyz)/x
    abcccd  
No match

/(ab (c+(*FAIL)cd) | xyz)/x
    abcccd  
No match
    
/--- Perl 5.11 gets some of these wrong ---/ 

/(?>.(*ACCEPT))*?5/
    abcde
 0: a

/(.(*ACCEPT))*?5/
    abcde
 0: a
 1: a

/(.(*ACCEPT))5/
    abcde
 0: a
 1: a

/(.(*ACCEPT))*5/
    abcde
 0: a
 1: a

/A\NB./BZ
------------------------------------------------------------------
        Bra
        A
        Any
        B
        Any
        Ket
        End
------------------------------------------------------------------
    ACBD
 0: ACBD
    *** Failers
No match
    A\nB
No match
    ACB\n   
No match

/A\NB./sBZ
------------------------------------------------------------------
        Bra
        A
        Any
        B
        AllAny
        Ket
        End
------------------------------------------------------------------
    ACBD
 0: ACBD
    ACB\n 
 0: ACB\x0a
    *** Failers
No match
    A\nB  
No match
  
/A\NB/<crlf>
    A\nB
 0: A\x0aB
    A\rB
 0: A\x0dB
    ** Failers
No match
    A\r\nB    
No match

/\R+b/BZ
------------------------------------------------------------------
        Bra
        \R++
        b
        Ket
        End
------------------------------------------------------------------

/\R+\n/BZ
------------------------------------------------------------------
        Bra
        \R+
        \x0a
        Ket
        End
------------------------------------------------------------------

/\R+\d/BZ
------------------------------------------------------------------
        Bra
        \R++
        \d
        Ket
        End
------------------------------------------------------------------

/\d*\R/BZ
------------------------------------------------------------------
        Bra
        \d*+
        \R
        Ket
        End
------------------------------------------------------------------

/\s*\R/BZ
------------------------------------------------------------------
        Bra
        \s*
        \R
        Ket
        End
------------------------------------------------------------------
    \x20\x0a
 0:  \x0a
    \x20\x0d
 0:  \x0d
    \x20\x0d\x0a
 0:  \x0d\x0a

/\S*\R/BZ
------------------------------------------------------------------
        Bra
        \S*+
        \R
        Ket
        End
------------------------------------------------------------------
    a\x0a
 0: a\x0a

/X\h*\R/BZ
------------------------------------------------------------------
        Bra
        X
        \h*+
        \R
        Ket
        End
------------------------------------------------------------------
    X\x20\x0a
 0: X \x0a

/X\H*\R/BZ
------------------------------------------------------------------
        Bra
        X
        \H*
        \R
        Ket
        End
------------------------------------------------------------------
    X\x0d\x0a
 0: X\x0d\x0a

/X\H+\R/BZ
------------------------------------------------------------------
        Bra
        X
        \H+
        \R
        Ket
        End
------------------------------------------------------------------
    X\x0d\x0a
 0: X\x0d\x0a

/X\H++\R/BZ
------------------------------------------------------------------
        Bra
        X
        \H++
        \R
        Ket
        End
------------------------------------------------------------------
    X\x0d\x0a
No match

/-- Perl treats this one differently, not failing the second string. I believe
    that is a bug in Perl. --/

/((abc|abcx)(*THEN)y|abcd)/
    abcd
 0: abcd
 1: abcd
    *** Failers 
No match
    abcxy 
No match

/(?<=abc)def/
    abc\P\P
Partial match: abc

/abc$/
    abc
 0: abc
    abc\P
 0: abc
    abc\P\P
Partial match: abc

/abc$/m
    abc
 0: abc
    abc\n
 0: abc
    abc\P\P
Partial match: abc
    abc\n\P\P 
 0: abc
    abc\P
 0: abc
    abc\n\P
 0: abc

/abc\z/
    abc
 0: abc
    abc\P
 0: abc
    abc\P\P
Partial match: abc

/abc\Z/
    abc
 0: abc
    abc\P
 0: abc
    abc\P\P
Partial match: abc

/abc\b/
    abc
 0: abc
    abc\P
 0: abc
    abc\P\P
Partial match: abc

/abc\B/
    abc
No match
    abc\P
Partial match: abc
    abc\P\P
Partial match: abc

/.+/
    abc\>0
 0: abc
    abc\>1
 0: bc
    abc\>2
 0: c
    abc\>3
No match
    abc\>4
Error -24 (bad offset value)
    abc\>-4 
Error -24 (bad offset value)

/\cģ/
Failed: \c must be followed by an ASCII character at offset 3

/(?P<abn>(?P=abn)xxx)/BZ
------------------------------------------------------------------
        Bra
        Once
        CBra 1
        \1
        xxx
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------

/(a\1z)/BZ
------------------------------------------------------------------
        Bra
        Once
        CBra 1
        a
        \1
        z
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------

/(?P<abn>(?P=abn)(?<badstufxxx)/BZ
Failed: syntax error in subpattern name (missing terminator) at offset 29

/(?P<abn>(?P=axn)xxx)/BZ
Failed: reference to non-existent subpattern at offset 15

/(?P<abn>(?P=axn)xxx)(?<axn>yy)/BZ
------------------------------------------------------------------
        Bra
        CBra 1
        \2
        xxx
        Ket
        CBra 2
        yy
        Ket
        Ket
        End
------------------------------------------------------------------

/-- These tests are here because Perl gets the first one wrong. --/

/(\R*)(.)/s
    \r\n
 0: \x0d
 1: 
 2: \x0d
    \r\r\n\n\r 
 0: \x0d\x0d\x0a\x0a\x0d
 1: \x0d\x0d\x0a\x0a
 2: \x0d
    \r\r\n\n\r\n 
 0: \x0d\x0d\x0a\x0a\x0d
 1: \x0d\x0d\x0a\x0a
 2: \x0d

/(\R)*(.)/s
    \r\n
 0: \x0d
 1: <unset>
 2: \x0d
    \r\r\n\n\r 
 0: \x0d\x0d\x0a\x0a\x0d
 1: \x0a
 2: \x0d
    \r\r\n\n\r\n 
 0: \x0d\x0d\x0a\x0a\x0d
 1: \x0a
 2: \x0d

/((?>\r\n|\n|\x0b|\f|\r|\x85)*)(.)/s
    \r\n
 0: \x0d
 1: 
 2: \x0d
    \r\r\n\n\r 
 0: \x0d\x0d\x0a\x0a\x0d
 1: \x0d\x0d\x0a\x0a
 2: \x0d
    \r\r\n\n\r\n 
 0: \x0d\x0d\x0a\x0a\x0d
 1: \x0d\x0d\x0a\x0a
 2: \x0d

/-- --/

/abc$/BZ
------------------------------------------------------------------
        Bra
        
        abc
        $
        Ket
        End
------------------------------------------------------------------

/abc$/BZm
------------------------------------------------------------------
        Bra
     /m 
        abc
     /m $
        Ket
        End
------------------------------------------------------------------

/(a)*+(\w)/S
    aaaaX
 0: aaaaX
 1: a
 2: X
    ** Failers 
No match
    aaaa
No match

/(?:a)*+(\w)/S
    aaaaX
 0: aaaaX
 1: X
    ** Failers 
No match
    aaaa
No match

/(a)++1234/SDZ
------------------------------------------------------------------
        Bra
        CBraPos 1
        a
        KetRpos
        1234
        Ket
        End
------------------------------------------------------------------
Capturing subpattern count = 1
No options
First char = 'a'
Need char = '4'
Subject length lower bound = 5
No set of starting bytes

/([abc])++1234/SI
Capturing subpattern count = 1
No options
No first char
Need char = '4'
Subject length lower bound = 5
Starting byte set: a b c 

/(?<=(abc)+)X/
Failed: lookbehind assertion is not fixed length at offset 10

/(ab)/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char

/(ab)++/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char

/(ab|)+/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char

/(ab|)++/I
Capturing subpattern count = 1
Options: anchored
No first char
No need char

/(?:ab)/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/(?:ab)++/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/(?:ab|)+/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char

/(?:ab|)++/I
Capturing subpattern count = 0
Options: anchored
No first char
No need char

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

/(.*ab)++/I
Capturing subpattern count = 1
No options
First char at start or follows newline
Need char = 'b'

/(.*ab|.*)+/I
Capturing subpattern count = 1
No options
First char at start or follows newline
No need char

/(.*ab|.*)++/I
Capturing subpattern count = 1
No options
First char at start or follows newline
No need char

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

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

/(?:.*ab|.*)+/I
Capturing subpattern count = 0
No options
First char at start or follows newline
No need char

/(?:.*ab|.*)++/I
Capturing subpattern count = 0
No options
First char at start or follows newline
No need char

/(?=a)[bcd]/I
Capturing subpattern count = 0
No options
First char = 'a'
No need char

/((?=a))[bcd]/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/((?=a))+[bcd]/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/((?=a))++[bcd]/I
Capturing subpattern count = 1
No options
First char = 'a'
No need char

/(?=a+)[bcd]/iI
Capturing subpattern count = 0
Options: caseless
First char = 'a' (caseless)
No need char

/(?=a+?)[bcd]/iI
Capturing subpattern count = 0
Options: caseless
First char = 'a' (caseless)
No need char

/(?=a++)[bcd]/iI
Capturing subpattern count = 0
Options: caseless
First char = 'a' (caseless)
No need char

/(?=a{3})[bcd]/iI
Capturing subpattern count = 0
Options: caseless
First char = 'a' (caseless)
Need char = 'a' (caseless)

/(abc)\1+/S

/-- Perl doesn't get these right IMO (the 3rd is PCRE-specific) --/

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

/(?1)(?:(b(*ACCEPT))){0}c/
    bc
 0: bc
    ** Failers 
No match
    b 
No match

/(?1)(?:((*ACCEPT))){0}c/
    c
 0: c
    c\N 
 0: c

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

/.*?(?(?=a)a|bc)/
    ba
 0: ba

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

/.*?(?(?=a)a(*THEN)b)c/
    ac
No match

/.*?(a(*THEN)b)c/
    aabc
No match
    
/.*? (?1) c (?(DEFINE)(a(*THEN)b))/x
    aabc
 0: aabc

/.*?(a(*THEN)b|z)c/
    aabc
 0: aabc
 1: ab

/.*?(z|a(*THEN)b)c/
    aabc
 0: aabc
 1: ab

/-- --/

/-- These studied versions are here because they are not Perl-compatible; the
    studying means the mark is not seen. --/

/(*MARK:A)(*SKIP:B)(C|X)/KS
    C
 0: C
 1: C
MK: A
    D
No match, mark = A
     
/(*:A)A+(*SKIP:A)(B|Z)/KS
    AAAC
No match, mark = A

/-- --/

"(?=a*(*ACCEPT)b)c"
    c
 0: c
    c\N 
 0: c
    
/(?1)c(?(DEFINE)((*ACCEPT)b))/
    c
 0: c
    c\N  
 0: c
    
/(?>(*ACCEPT)b)c/
    c
 0: 
    c\N  
No match

/(?:(?>(a)))+a%/++
    %aa%
 0: aa%
 0+ 
 1: a
 1+ a%

/(a)b|ac/++SS
    ac\O3
Matched, but too many substrings
 0: ac
 0+ 
    
/(a)(b)x|abc/++
     abc\O6
 0: abc
 0+ 

/(a)bc|(a)(b)\2/
    \O3abc
Matched, but too many substrings
 0: abc
    \O4abc 
Matched, but too many substrings
 0: abc

/(?(DEFINE)(a(?2)|b)(b(?1)|a))(?:(?1)|(?2))/SI
Capturing subpattern count = 2
No options
No first char
No need char
Subject length lower bound = 1
No set of starting bytes

/(a(?2)|b)(b(?1)|a)(?:(?1)|(?2))/SI
Capturing subpattern count = 2
No options
No first char
No need char
Subject length lower bound = 3
Starting byte set: a b 

/(a(?2)|b)(b(?1)|a)(?1)(?2)/SI
Capturing subpattern count = 2
No options
No first char
No need char
Subject length lower bound = 4
Starting byte set: a b 

/(abc)(?1)/SI
Capturing subpattern count = 1
No options
First char = 'a'
Need char = 'c'
Subject length lower bound = 6
No set of starting bytes

/(?>a)++/
    aa\M
Minimum match() limit = 5
Minimum match() recursion limit = 2
 0: aa
    aaaaaaaaa\M 
Minimum match() limit = 12
Minimum match() recursion limit = 2
 0: aaaaaaaaa
    
/(a)(?1)++/
    aa\M
Minimum match() limit = 7
Minimum match() recursion limit = 4
 0: aa
 1: a
    aaaaaaaaa\M  
Minimum match() limit = 21
Minimum match() recursion limit = 4
 0: aaaaaaaaa
 1: a

/(?:(foo)|(bar)|(baz))X/SS=
    bazfooX
 0: fooX
 1: foo
 2: <unset>
 3: <unset>
    foobazbarX
 0: barX
 1: <unset>
 2: bar
 3: <unset>
    barfooX
 0: fooX
 1: foo
 2: <unset>
 3: <unset>
    bazX
 0: bazX
 1: <unset>
 2: <unset>
 3: baz
    foobarbazX    
 0: bazX
 1: <unset>
 2: <unset>
 3: baz
    bazfooX\O0
Matched, but too many substrings
    bazfooX\O2
Matched, but too many substrings
 0: fooX
    bazfooX\O4
Matched, but too many substrings
 0: fooX
 1: <unset>
    bazfooX\O6
Matched, but too many substrings
 0: fooX
 1: foo
 2: <unset>
    bazfooX\O8
Matched, but too many substrings
 0: fooX
 1: foo
 2: <unset>
 3: <unset>
    bazfooX\O10
 0: fooX
 1: foo
 2: <unset>
 3: <unset>

/(?=abc){3}abc/BZ
------------------------------------------------------------------
        Bra
        Assert
        abc
        Ket
        abc
        Ket
        End
------------------------------------------------------------------

/(?=abc)+abc/BZ
------------------------------------------------------------------
        Bra
        Assert
        abc
        Ket
        abc
        Ket
        End
------------------------------------------------------------------

/(?=abc)++abc/BZ
------------------------------------------------------------------
        Bra
        Assert
        abc
        Ket
        abc
        Ket
        End
------------------------------------------------------------------

/(?=abc){0}xyz/BZ
------------------------------------------------------------------
        Bra
        Skip zero
        Assert
        abc
        Ket
        xyz
        Ket
        End
------------------------------------------------------------------

/(?=(a))?./BZ
------------------------------------------------------------------
        Bra
        Brazero
        Assert
        CBra 1
        a
        Ket
        Ket
        Any
        Ket
        End
------------------------------------------------------------------

/(?=(a))??./BZ
------------------------------------------------------------------
        Bra
        Braminzero
        Assert
        CBra 1
        a
        Ket
        Ket
        Any
        Ket
        End
------------------------------------------------------------------

/(?=(a)){0}b(?1)/BZ
------------------------------------------------------------------
        Bra
        
        Skip zero
        Assert
        CBra 1
        a
        Ket
        Ket
        b
        Recurse
        Ket
        End
------------------------------------------------------------------

/(?(DEFINE)(a))?b(?1)/BZ
------------------------------------------------------------------
        Bra
        Cond
        Cond def
        CBra 1
        a
        Ket
        Ket
        b
        Recurse
        Ket
        End
------------------------------------------------------------------

/(?=(?1))?[az]([abc])d/BZ
------------------------------------------------------------------
        Bra
        
        Brazero
        Assert
        Recurse
        Ket
        [az]
        CBra 1
        [a-c]
        Ket
        d
        Ket
        End
------------------------------------------------------------------

/(?!a){0}\w+/BZ
------------------------------------------------------------------
        Bra
        
        Skip zero
        Assert not
        a
        Ket
        \w+
        Ket
        End
------------------------------------------------------------------

/(?<=(abc))?xyz/BZ
------------------------------------------------------------------
        Bra
        Brazero
        AssertB
        Reverse
        CBra 1
        abc
        Ket
        Ket
        xyz
        Ket
        End
------------------------------------------------------------------

/[:a[:abc]b:]/BZ
------------------------------------------------------------------
        Bra
        [:[a-c]
        b:]
        Ket
        End
------------------------------------------------------------------

/((?2))((?1))/SS
    abc
Error -26 (nested recursion at the same subject position)

/((?(R2)a+|(?1)b))/SS
    aaaabcde
Error -26 (nested recursion at the same subject position)

/(?(R)a*(?1)|((?R))b)/SS
    aaaabcde
Error -26 (nested recursion at the same subject position)

/(a+|(?R)b)/
Failed: recursive call could loop indefinitely at offset 7

/(a(*:A)(d|e(*:B))z|aeq)/C
    adz
--->adz
 +0        
 +1        (a(*:A)(d|e(*:B))z|aeq)
 +2        a
 +3       (*:A)
 +8       (d|e(*:B))
Latest Mark: A
 +9       d
+10       |
+18       z
+19       |
+24       
 0: adz
 1: adz
 2: d
    aez
--->aez
 +0        
 +1        (a(*:A)(d|e(*:B))z|aeq)
 +2        a
 +3       (*:A)
 +8       (d|e(*:B))
Latest Mark: A
 +9       d
+11       e
+12       (*:B)
+17       )
Latest Mark: B
+18       z
+19       |
+24       
 0: aez
 1: aez
 2: e
    aeqwerty
--->aeqwerty
 +0             
 +1             (a(*:A)(d|e(*:B))z|aeq)
 +2             a
 +3            (*:A)
 +8            (d|e(*:B))
Latest Mark: A
 +9            d
+11            e
+12            (*:B)
+17            )
Latest Mark: B
+18            z
+20             a
+21            e
+22            q
+23            )
+24            
 0: aeq
 1: aeq

/.(*F)/
    \P\Pabc
No match

/\btype\b\W*?\btext\b\W*?\bjavascript\b/IS
Capturing subpattern count = 0
No options
First char = 't'
Need char = 't'
Max lookbehind = 1
Subject length lower bound = 18
No set of starting bytes

/\btype\b\W*?\btext\b\W*?\bjavascript\b|\burl\b\W*?\bshell:|<input\b.*?\btype\b\W*?\bimage\b|\bonkeyup\b\W*?\=/IS
Capturing subpattern count = 0
No options
No first char
No need char
Max lookbehind = 1
Subject length lower bound = 8
Starting byte set: < o t u 

/a(*SKIP)c|b(*ACCEPT)|/+SI
Capturing subpattern count = 0
No options
No first char
No need char
Study returned NULL
    a
 0: 
 0+ 

/a(*SKIP)c|b(*ACCEPT)cd(*ACCEPT)|x/SI
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = -1
Starting byte set: a b x 
    ax
 0: x

'a*(*ACCEPT)b'+
    \N\N
No match
    abc\N\N
 0: a
 0+ bc
    bbb\N\N 
 0: 
 0+ bb

/(*ACCEPT)a/+I
Capturing subpattern count = 0
No options
No first char
No need char
    bax
 0: 
 0+ bax

/z(*ACCEPT)a/+I
Capturing subpattern count = 0
No options
First char = 'z'
No need char
    baxzbx
 0: z
 0+ bx

/a(?:.)*?a/ims                                                                  
    \Mabbbbbbbbbbbbbbbbbbbbba
Minimum match() limit = 65
Minimum match() recursion limit = 2
 0: abbbbbbbbbbbbbbbbbbbbba
    
/a(?:.(*THEN))*?a/ims
    \Mabbbbbbbbbbbbbbbbbbbbba
Minimum match() limit = 86
Minimum match() recursion limit = 45
 0: abbbbbbbbbbbbbbbbbbbbba

/a(?:.(*THEN:ABC))*?a/ims
    \Mabbbbbbbbbbbbbbbbbbbbba
Minimum match() limit = 86
Minimum match() recursion limit = 45
 0: abbbbbbbbbbbbbbbbbbbbba

/-- These tests are in agreement with development Perl 5.015, which has fixed
    some things, but they don't all work with 5.012, so they aren't in the
    Perl-compatible tests. Those after the first come from Perl's own test
    files. --/
    
/((yes|no)(*THEN)(*F))?/
  yes
No match

/(A (.*)   C? (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match

/(A (.*)   C? (*THEN)  | A D) z/x
AbcdCBefgBhiBqz
No match

/(A (.*)   C? (*THEN)  | A D) \s* (*FAIL)/x
AbcdCBefgBhiBqz
No match

/(A (.*)   C? (*THEN)  | A D) \s* z/x
AbcdCBefgBhiBqz
No match

/(A (.*)   (?:C|) (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match

/(A (.*)   (?:C|) (*THEN)  | A D) z/x
AbcdCBefgBhiBqz
No match

/(A (.*)   C{0,6} (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match

/(A (.*)   C{0,6} (*THEN)  | A D) z/x
AbcdCBefgBhiBqz
No match

/(A (.*)   (CE){0,6} (*THEN)  | A D) (*FAIL)/x
AbcdCEBefgBhiBqz
No match

/(A (.*)   (CE){0,6} (*THEN)  | A D) z/x
AbcdCEBefgBhiBqz
No match

/(A (.*)   (CE*){0,6} (*THEN)  | A D) (*FAIL)/x
AbcdCBefgBhiBqz
No match

/(A (.*)   (CE*){0,6} (*THEN)  | A D) z/x
AbcdCBefgBhiBqz
No match

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

/(?>a+)(?>(z+))\w/BZ
------------------------------------------------------------------
        Bra
        
        Once_NC
        a+
        Ket
        Once
        CBra 1
        z+
        Ket
        Ket
        \w
        Ket
        End
------------------------------------------------------------------
    aaaazzzzb
 0: aaaazzzzb
 1: zzzz
    ** Failers
No match
    aazz  
No match

/(.)(\1|a(?2))/
    bab
 0: bab
 1: b
 2: ab
    
/\1|(.)(?R)\1/
    cbbbc
 0: cbbbc
 1: c
    
/(.)((?(1)c|a)|a(?2))/
    baa  
No match

/(?P<abn>(?P=abn)xxx)/BZ
------------------------------------------------------------------
        Bra
        Once
        CBra 1
        \1
        xxx
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------

/(a\1z)/BZ
------------------------------------------------------------------
        Bra
        Once
        CBra 1
        a
        \1
        z
        Ket
        Ket
        Ket
        End
------------------------------------------------------------------

/(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
     \Maabbccddee
Minimum match() limit = 12
Minimum match() recursion limit = 3
 0: aabbccddee

/(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
     \Maabbccddee
Minimum match() limit = 22
Minimum match() recursion limit = 21
 0: aabbccddee
 1: aa
 2: bb
 3: cc
 4: dd
 5: ee

/(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
     \Maabbccddee
Minimum match() limit = 18
Minimum match() recursion limit = 13
 0: aabbccddee
 1: aa
 2: cc
 3: ee

/a\x41z/<JS>
    aAz
 0: aAz
    *** Failers
No match
    ax41z
No match

/a[m\x41]z/<JS>
    aAz
 0: aAz

/a\x1z/<JS>
    ax1z
 0: ax1z

/a\u0041z/<JS>
    aAz
 0: aAz
    *** Failers
No match
    au0041z
No match

/a[m\u0041]z/<JS>
    aAz
 0: aAz

/a\u041z/<JS>
    au041z
 0: au041z
    *** Failers
No match
    aAz
No match

/a\U0041z/<JS>
    aU0041z
 0: aU0041z
    *** Failers
No match
    aAz
No match

/(?(?=c)c|d)++Y/BZ
------------------------------------------------------------------
        Bra
        BraPos
        Cond
        Assert
        c
        Ket
        c
        Alt
        d
        Ket
        KetRpos
        Y
        Ket
        End
------------------------------------------------------------------

/(?(?=c)c|d)*+Y/BZ
------------------------------------------------------------------
        Bra
        Braposzero
        BraPos
        Cond
        Assert
        c
        Ket
        c
        Alt
        d
        Ket
        KetRpos
        Y
        Ket
        End
------------------------------------------------------------------

/a[\NB]c/
Failed: \N is not supported in a class at offset 3

/a[B-\Nc]/ 
Failed: \N is not supported in a class at offset 5

/(a)(?2){0,1999}?(b)/

/(a)(?(DEFINE)(b))(?2){0,1999}?(?2)/

/--- This test, with something more complicated than individual letters, causes
different behaviour in Perl. Perhaps it disables some optimization; no tag is
passed back for the failures, whereas in PCRE there is a tag. ---/
    
/(A|P)(*:A)(B|P) | (X|P)(X|P)(*:B)(Y|P)/xK
    AABC
 0: AB
 1: A
 2: B
MK: A
    XXYZ 
 0: XXY
 1: <unset>
 2: <unset>
 3: X
 4: X
 5: Y
MK: B
    ** Failers
No match
    XAQQ  
No match, mark = A
    XAQQXZZ  
No match, mark = A
    AXQQQ 
No match, mark = A
    AXXQQQ 
No match, mark = B

/-- Perl doesn't give marks for these, though it does if the alternatives are
replaced by single letters. --/
    
/(b|q)(*:m)f|a(*:n)w/K
    aw 
 0: aw
MK: n
    ** Failers 
No match, mark = n
    abc
No match, mark = m

/(q|b)(*:m)f|a(*:n)w/K
    aw 
 0: aw
MK: n
    ** Failers 
No match, mark = n
    abc
No match, mark = m

/-- After a partial match, the behaviour is as for a failure. --/

/a(*:X)bcde/K
   abc\P
Partial match, mark=X: abc
   
/-- These are here because Perl doesn't return a mark, except for the first --/

/(?=(*:x))(q|)/K+
    abc
 0: 
 0+ abc
 1: 
MK: x

/(?=(*:x))((*:y)q|)/K+
    abc
 0: 
 0+ abc
 1: 
MK: x

/(?=(*:x))(?:(*:y)q|)/K+
    abc
 0: 
 0+ abc
MK: x

/(?=(*:x))(?>(*:y)q|)/K+
    abc
 0: 
 0+ abc
MK: x

/(?=a(*:x))(?!a(*:y)c)/K+
    ab
 0: 
 0+ ab
MK: x

/(?=a(*:x))(?=a(*:y)c|)/K+
    ab
 0: 
 0+ ab
MK: x

/(..)\1/
    ab\P
Partial match: ab
    aba\P
Partial match: aba
    abab\P
 0: abab
 1: ab

/(..)\1/i
    ab\P
Partial match: ab
    abA\P
Partial match: abA
    aBAb\P
 0: aBAb
 1: aB

/(..)\1{2,}/
    ab\P
Partial match: ab
    aba\P
Partial match: aba
    abab\P
Partial match: abab
    ababa\P
Partial match: ababa
    ababab\P
 0: ababab
 1: ab
    ababab\P\P
Partial match: ababab
    abababa\P
 0: ababab
 1: ab
    abababa\P\P
Partial match: abababa

/(..)\1{2,}/i
    ab\P
Partial match: ab
    aBa\P
Partial match: aBa
    aBAb\P
Partial match: aBAb
    AbaBA\P
Partial match: AbaBA
    abABAb\P
 0: abABAb
 1: ab
    aBAbaB\P\P
Partial match: aBAbaB
    abABabA\P
 0: abABab
 1: ab
    abaBABa\P\P
Partial match: abaBABa

/(..)\1{2,}?x/i
    ab\P
Partial match: ab
    abA\P
Partial match: abA
    aBAb\P
Partial match: aBAb
    abaBA\P
Partial match: abaBA
    abAbaB\P
Partial match: abAbaB
    abaBabA\P
Partial match: abaBabA
    abAbABaBx\P
 0: abAbABaBx
 1: ab

/(..)\1/
    aba\P
Partial match: aba

/(..)\1{2,3}x/
    aba\P
Partial match: aba
    ababa\P
Partial match: ababa
    ababa\P\P
Partial match: ababa
    abababx
 0: abababx
 1: ab
    ababababx  
 0: ababababx
 1: ab

/(..)\1{2,3}?x/
    aba\P
Partial match: aba
    ababa\P
Partial match: ababa
    ababa\P\P
Partial match: ababa
    abababx
 0: abababx
 1: ab
    ababababx  
 0: ababababx
 1: ab
    
/(..)(\1{2,3})ab/
    abababab
 0: abababab
 1: ab
 2: abab

/\R/
    \r\P
 0: \x0d
    \r\P\P
Partial match: \x0d
    
/\R{2,3}x/
    \r\P
Partial match: \x0d
    \r\P\P
Partial match: \x0d
    \r\r\P 
Partial match: \x0d\x0d
    \r\r\P\P
Partial match: \x0d\x0d
    \r\r\r\P  
Partial match: \x0d\x0d\x0d
    \r\r\r\P\P
Partial match: \x0d\x0d\x0d
    \r\rx
 0: \x0d\x0dx
    \r\r\rx    
 0: \x0d\x0d\x0dx

/\R{2,3}?x/
    \r\P
Partial match: \x0d
    \r\P\P
Partial match: \x0d
    \r\r\P 
Partial match: \x0d\x0d
    \r\r\P\P
Partial match: \x0d\x0d
    \r\r\r\P  
Partial match: \x0d\x0d\x0d
    \r\r\r\P\P
Partial match: \x0d\x0d\x0d
    \r\rx
 0: \x0d\x0dx
    \r\r\rx    
 0: \x0d\x0d\x0dx
    
/\R?x/
    \r\P
Partial match: \x0d
    \r\P\P 
Partial match: \x0d
    x
 0: x
    \rx  
 0: \x0dx

/\R+x/
    \r\P
Partial match: \x0d
    \r\P\P 
Partial match: \x0d
    \r\n\P
Partial match: \x0d\x0a
    \r\n\P\P  
Partial match: \x0d\x0a
    \rx  
 0: \x0dx

/a$/<CRLF>
    a\r\P
Partial match: a\x0d
    a\r\P\P 
Partial match: a\x0d

/a$/m<CRLF>
    a\r\P
Partial match: a\x0d
    a\r\P\P 
Partial match: a\x0d

/(a$|a\r)/<CRLF>
    a\r\P
 0: a\x0d
 1: a\x0d
    a\r\P\P 
Partial match: a\x0d

/(a$|a\r)/m<CRLF>
    a\r\P
 0: a\x0d
 1: a\x0d
    a\r\P\P 
Partial match: a\x0d

/./<CRLF>
    \r\P
 0: \x0d
    \r\P\P 
Partial match: \x0d
  
/.{2,3}/<CRLF>
    \r\P 
Partial match: \x0d
    \r\P\P
Partial match: \x0d
    \r\r\P
 0: \x0d\x0d
    \r\r\P\P
Partial match: \x0d\x0d
    \r\r\r\P
 0: \x0d\x0d\x0d
    \r\r\r\P\P     
Partial match: \x0d\x0d\x0d

/.{2,3}?/<CRLF>
    \r\P 
Partial match: \x0d
    \r\P\P
Partial match: \x0d
    \r\r\P
 0: \x0d\x0d
    \r\r\P\P
Partial match: \x0d\x0d
    \r\r\r\P
 0: \x0d\x0d
    \r\r\r\P\P     
 0: \x0d\x0d

/-- These two are here because Perl does not match: it seems to allow the
COMMIT to escape from the assertion. --/

/(?=a(*COMMIT)b|ac)ac|ac/
    ac
 0: ac

/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
    ac
 0: ac
 1: <unset>
 2: a

"AB(C(D))(E(F))?(?(?=\2)(?=\4))"
    ABCDGHI\O03
Matched, but too many substrings
 0: ABCD
    
/-- This one is here because Perl does not confine the *COMMIT to the 
assertion, and therefore fails the entire subroutine call. --/ 
    
/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
    ac 
 0: ac
    
/-- These are all run as real matches in test 1; here we are just checking the
settings of the anchored and startline bits. --/ 

/(?>.*?a)(?<=ba)/I
Capturing subpattern count = 0
No options
No first char
Need char = 'a'
Max lookbehind = 2

/(?:.*?a)(?<=ba)/I
Capturing subpattern count = 0
No options
First char at start or follows newline
Need char = 'a'
Max lookbehind = 2

/.*?a(*PRUNE)b/I
Capturing subpattern count = 0
No options
No first char
Need char = 'b'

/.*?a(*PRUNE)b/sI
Capturing subpattern count = 0
Options: dotall
No first char
Need char = 'b'

/a(*PRUNE)b/sI
Capturing subpattern count = 0
Options: anchored dotall
No first char
No need char

/.*?a(*SKIP)b/I
Capturing subpattern count = 0
No options
No first char
Need char = 'b'

/(?>.*?a)b/sI
Capturing subpattern count = 0
Options: dotall
No first char
Need char = 'b'

/(?>.*?a)b/I
Capturing subpattern count = 0
No options
No first char
Need char = 'b'

/(?>a)b/sI
Capturing subpattern count = 0
Options: anchored dotall
No first char
No need char

/(?>.*?)(?<=(abcd)|(wxyz))/I
Capturing subpattern count = 2
No options
No first char
No need char
Max lookbehind = 4

/(?>.*)(?<=(abcd)|(wxyz))/I
Capturing subpattern count = 2
No options
No first char
No need char
Max lookbehind = 4

"(?>.*)foo"I
Capturing subpattern count = 0
No options
No first char
Need char = 'o'

"(?>.*?)foo"I
Capturing subpattern count = 0
No options
No first char
Need char = 'o'

/(?>abc)/mI
Capturing subpattern count = 0
Options: multiline
First char at start or follows newline
Need char = 'c'

/(?>.*abc)/mI
Capturing subpattern count = 0
Options: multiline
No first char
Need char = 'c'

/(?:.*abc)/mI
Capturing subpattern count = 0
Options: multiline
First char at start or follows newline
Need char = 'c'

/-- Check PCRE_STUDY_EXTRA_NEEDED --/

/.?/S-I
Capturing subpattern count = 0
No options
No first char
No need char
Study returned NULL

/.?/S!I
Capturing subpattern count = 0
No options
No first char
No need char
Subject length lower bound = -1
No set of starting bytes

/-- End of testinput2 --/
