summaryrefslogtreecommitdiff
path: root/testdata
diff options
context:
space:
mode:
authorMatthew Vernon <matthew@debian.org>2016-02-27 15:00:32 +0000
committerMatthew Vernon <matthew@debian.org>2016-02-27 15:00:32 +0000
commit5fc77543f854bbe609407e8f2d54d906faad2883 (patch)
tree1c6a1c13657d2b80357ea2dadd7d8b3ee5c4e493 /testdata
parentc27ff5607e8146d7dcacf9ab7c25a931f14e1fbd (diff)
Imported Upstream version 10.21
Diffstat (limited to 'testdata')
-rw-r--r--testdata/grepoutput4
-rw-r--r--testdata/testinput1781
-rw-r--r--testdata/testinput10142
-rw-r--r--testdata/testinput119
-rw-r--r--testdata/testinput1295
-rw-r--r--testdata/testinput14145
-rw-r--r--testdata/testinput15164
-rw-r--r--testdata/testinput16206
-rw-r--r--testdata/testinput17315
-rw-r--r--testdata/testinput18106
-rw-r--r--testdata/testinput1972
-rw-r--r--testdata/testinput2873
-rw-r--r--testdata/testinput2063
-rw-r--r--testdata/testinput2116
-rw-r--r--testdata/testinput2295
-rw-r--r--testdata/testinput237
-rw-r--r--testdata/testinput318
-rw-r--r--testdata/testinput4547
-rw-r--r--testdata/testinput5193
-rw-r--r--testdata/testinput6615
-rw-r--r--testdata/testinput7413
-rw-r--r--testdata/testinput842
-rw-r--r--testdata/testinput915
-rw-r--r--testdata/testoutput11152
-rw-r--r--testdata/testoutput10229
-rw-r--r--testdata/testoutput11-1611
-rw-r--r--testdata/testoutput11-3211
-rw-r--r--testdata/testoutput12-16151
-rw-r--r--testdata/testoutput12-32149
-rw-r--r--testdata/testoutput14242
-rw-r--r--testdata/testoutput14-1661
-rw-r--r--testdata/testoutput14-3261
-rw-r--r--testdata/testoutput14-861
-rw-r--r--testdata/testoutput15378
-rw-r--r--testdata/testoutput16383
-rw-r--r--testdata/testoutput17627
-rw-r--r--testdata/testoutput18159
-rw-r--r--testdata/testoutput19113
-rw-r--r--testdata/testoutput21710
-rw-r--r--testdata/testoutput20101
-rw-r--r--testdata/testoutput2194
-rw-r--r--testdata/testoutput22-16167
-rw-r--r--testdata/testoutput22-32165
-rw-r--r--testdata/testoutput22-8169
-rw-r--r--testdata/testoutput238
-rw-r--r--testdata/testoutput329
-rw-r--r--testdata/testoutput3A29
-rw-r--r--testdata/testoutput3B29
-rw-r--r--testdata/testoutput4724
-rw-r--r--testdata/testoutput5361
-rw-r--r--testdata/testoutput6953
-rw-r--r--testdata/testoutput7623
-rw-r--r--testdata/testoutput8-16-2 (renamed from testdata/testoutput8-16)194
-rw-r--r--testdata/testoutput8-16-31026
-rw-r--r--testdata/testoutput8-32-2 (renamed from testdata/testoutput8-32)191
-rw-r--r--testdata/testoutput8-32-31026
-rw-r--r--testdata/testoutput8-32-41026
-rw-r--r--testdata/testoutput8-8-2 (renamed from testdata/testoutput8-8)193
-rw-r--r--testdata/testoutput8-8-31027
-rw-r--r--testdata/testoutput8-8-41025
-rw-r--r--testdata/testoutput922
-rw-r--r--testdata/valgrind-jit.supp7
62 files changed, 13558 insertions, 6065 deletions
diff --git a/testdata/grepoutput b/testdata/grepoutput
index 883bad7..3f6704c 100644
--- a/testdata/grepoutput
+++ b/testdata/grepoutput
@@ -751,3 +751,7 @@ RC=0
2:3,1
2:4,1
RC=0
+---------------------------- Test 108 ------------------------------
+RC=0
+---------------------------- Test 109 -----------------------------
+RC=0
diff --git a/testdata/testinput1 b/testdata/testinput1
index 884faf1..6d7bc80 100644
--- a/testdata/testinput1
+++ b/testdata/testinput1
@@ -3,12 +3,14 @@
# 32-bit PCRE libraries, and also using the perltest.pl script.
#forbid_utf
+#newline_default lf any anycrlf
#perltest
/the quick brown fox/
the quick brown fox
- The quick brown FOX
What do you know about the quick brown fox?
+\= Expect no match
+ The quick brown FOX
What do you know about THE QUICK BROWN FOX?
/The quick brown fox/i
@@ -51,7 +53,7 @@
>>>aaabxyzpqrrrabbxyyyypqAzz
>aaaabxyzpqrrrabbxyyyypqAzz
>>>>abcxyzpqrrrabbxyyyypqAzz
- *** Failers
+\= Expect no match
abxyzpqrrabbxyyyypqAzz
abxyzpqrrrrabbxyyyypqAzz
abxyzpqrrrabxyyyypqAzz
@@ -62,7 +64,7 @@
/^(abc){1,2}zz/
abczz
abcabczz
- *** Failers
+\= Expect no match
zz
abcabcabczz
>>abczz
@@ -76,7 +78,7 @@
aac
abbbbbbbbbbbc
bbbbbbbbbbbac
- *** Failers
+\= Expect no match
aaac
abbbbbbbbbbbac
@@ -89,7 +91,7 @@
aac
abbbbbbbbbbbc
bbbbbbbbbbbac
- *** Failers
+\= Expect no match
aaac
abbbbbbbbbbbac
@@ -100,7 +102,7 @@
babc
bbabc
bababc
- *** Failers
+\= Expect no match
bababbc
babababc
@@ -108,7 +110,7 @@
babc
bbabc
bababc
- *** Failers
+\= Expect no match
bababbc
babababc
@@ -122,7 +124,7 @@
cthing
dthing
ething
- *** Failers
+\= Expect no match
fthing
[thing
\\thing
@@ -132,7 +134,7 @@
cthing
dthing
ething
- *** Failers
+\= Expect no match
athing
fthing
@@ -140,7 +142,7 @@
fthing
[thing
\\thing
- *** Failers
+\= Expect no match
athing
bthing
]thing
@@ -151,7 +153,7 @@
/^[^]cde]/
athing
fthing
- *** Failers
+\= Expect no match
]thing
cthing
dthing
@@ -176,7 +178,7 @@
9
10
100
- *** Failers
+\= Expect no match
abc
/^.*nter/
@@ -187,28 +189,28 @@
/^xxx[0-9]+$/
xxx0
xxx1234
- *** Failers
+\= Expect no match
xxx
/^.+[0-9][0-9][0-9]$/
x123
+ x1234
xx123
123456
- *** Failers
+\= Expect no match
123
- x1234
/^.+?[0-9][0-9][0-9]$/
x123
+ x1234
xx123
123456
- *** Failers
+\= Expect no match
123
- x1234
/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
abc!pqr=apquxz.ixr.zzz.ac.uk
- *** Failers
+\= Expect no match
!pqr=apquxz.ixr.zzz.ac.uk
abc!=apquxz.ixr.zzz.ac.uk
abc!pqr=apquxz:ixr.zzz.ac.uk
@@ -216,7 +218,8 @@
/:/
Well, we need a colon: somewhere
- *** Fail if we don't
+\= Expect no match
+ Fail without a colon
/([\da-f:]+)$/i
0abc
@@ -227,7 +230,7 @@
5f03:12C0::932e
fed def
Any old stuff
- *** Failers
+\= Expect no match
0zzz
gzzz
fed\x20
@@ -236,7 +239,7 @@
/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
.1.2.3
A.12.123.0
- *** Failers
+\= Expect no match
.1.2.3333
1.2.3
1234.2.3
@@ -244,7 +247,7 @@
/^(\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
+\= Expect no match
1IN SOA non-sp1 non-sp2(
/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
@@ -254,7 +257,7 @@
ab-c.pq-r.
sxk.zzz.ac.uk.
x-.y-.
- *** Failers
+\= Expect no match
-abc.peq.
/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
@@ -262,7 +265,7 @@
*.b0-a
*.c3-b.c
*.c-a.b-c
- *** Failers
+\= Expect no match
*.0
*.a-
*.a-b.c-
@@ -286,29 +289,30 @@
\"1234\"
\"abcd\" ;
\"\" ; rhubarb
- *** Failers
+\= Expect no match
\"1234\" : things
/^$/
\
- *** Failers
+\= Expect no match
+ A non-empty line
/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
ab c
- *** Failers
+\= Expect no match
abc
ab cde
/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
ab c
- *** Failers
+\= Expect no match
abc
ab cde
/^ a\ b[c ]d $/x
a bcd
a b d
- *** Failers
+\= Expect no match
abcd
ab d
@@ -362,7 +366,7 @@
1234567890
12345678ab
12345678__
- *** Failers
+\= Expect no match
1234567
/^[aeiou\d]{4,5}$/
@@ -370,7 +374,7 @@
1234
12345
aaaaa
- *** Failers
+\= Expect no match
123456
/^[aeiou\d]{4,5}?/
@@ -383,7 +387,7 @@
/\A(abc|def)=(\1){2,3}\Z/
abc=abcabc
def=defdefdef
- *** Failers
+\= Expect no match
abc=defdef
/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
@@ -402,7 +406,7 @@
/^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
+\= Expect no match
From abcd Sep 01 12:33:02 1997
/^12.34/s
@@ -423,7 +427,7 @@
/^(\D*)(?=\d)(?!123)/
abc456
- *** Failers
+\= Expect no match
abc123
/^1234(?# test newlines
@@ -449,12 +453,12 @@
/(?!^)abc/
the abc
- *** Failers
+\= Expect no match
abc
/(?=^)abc/
abc
- *** Failers
+\= Expect no match
the abc
/^[ab]{1,3}(ab*|b)/
@@ -670,7 +674,7 @@
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
+\= Expect no match
The quick brown fox
/[\040\t]* # Nab whitespace.
@@ -1262,7 +1266,7 @@
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
+\= Expect no match
The quick brown fox
/abc\0def\00pqr\000xyz\0000AB/
@@ -1284,14 +1288,14 @@
/A\x0{2,3}Z/
The A\x0\x0Z
An A\0\x0\0Z
- *** Failers
+\= Expect no match
A\0Z
A\0\x0\0\x0Z
/^(cow|)\1(bell)/
cowcowbell
bell
- *** Failers
+\= Expect no match
cowbell
/^\s/
@@ -1300,7 +1304,7 @@
\nabc
\rabc
\tabc
- *** Failers
+\= Expect no match
abc
/^a b
@@ -1311,27 +1315,27 @@
ab
aaaab
b
- *** Failers
+\= Expect no match
acb
/^(a|)\1+b/
aab
aaaab
b
- *** Failers
+\= Expect no match
ab
/^(a|)\1?b/
ab
aab
b
- *** Failers
+\= Expect no match
acb
/^(a|)\1{2}b/
aaab
b
- *** Failers
+\= Expect no match
ab
aab
aaaab
@@ -1340,7 +1344,7 @@
aaab
aaaab
b
- *** Failers
+\= Expect no match
ab
aab
aaaaab
@@ -1349,7 +1353,7 @@
abbbbc
abbbc
abbc
- *** Failers
+\= Expect no match
abc
abbbbbc
@@ -1364,7 +1368,7 @@
/^[W-c]+$/
WXY_^abc
- *** Failers
+\= Expect no match
wxy
/^[W-c]+$/i
@@ -1383,7 +1387,7 @@
/^abc$/
abc
- *** Failers
+\= Expect no match
qqq\nabc
abc\nzzz
qqq\nabc\nzzz
@@ -1391,7 +1395,7 @@
/\Aabc\Z/m
abc
abc\n
- *** Failers
+\= Expect no match
qqq\nabc
abc\nzzz
qqq\nabc\nzzz
@@ -1400,7 +1404,7 @@
abc\ndef
/\A(.)*\Z/m
- *** Failers
+\= Expect no match
abc\ndef
/(?:b)|(?::+)/
@@ -1409,17 +1413,17 @@
/[-az]+/
az-
- *** Failers
+\= Expect no match
b
/[az-]+/
za-
- *** Failers
+\= Expect no match
b
/[a\-z]+/
a-z
- *** Failers
+\= Expect no match
b
/[a-z]+/
@@ -1427,12 +1431,12 @@
/[\d-]+/
12-34
- *** Failers
+\= Expect no match
aaa
/[\d-z]+/
12-34z
- *** Failers
+\= Expect no match
aaa
/\x5c/
@@ -1440,7 +1444,7 @@
/\x20Z/
the Zoo
- *** Failers
+\= Expect no match
Zulu
/(abc)\1/i
@@ -1448,22 +1452,10 @@
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
+\= Expect no match
abc\ndef
/(abc)\123/
@@ -1492,7 +1484,7 @@
/^[A\8B\9C]+$/
A8B9C
- *** Failers
+\= Expect no match
A8B9C\x00
/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
@@ -1524,7 +1516,7 @@
baNOTcccd
baNOTccd
bacccd
- *** Failers
+\= Expect no match
anything
b\bc
baccd
@@ -1546,14 +1538,14 @@
/[^k]$/
abc
- *** Failers
+\= Expect no match
abk
/[^k]{2,3}$/
abc
kbc
kabc
- *** Failers
+\= Expect no match
abk
akb
akk
@@ -1561,14 +1553,14 @@
/^\d{8,}\@.+[^k]$/
12345678\@a.b.c.d
123456789\@x.y.z
- *** Failers
+\= Expect no match
12345678\@x.y.uk
1234567\@a.b.c.d
/(a)\1{8,}/
aaaaaaaaa
aaaaaaaaaa
- *** Failers
+\= Expect no match
aaaaaaa
/[^a]/
@@ -1604,7 +1596,7 @@
/(\.\d\d((?=0)|\d(?=\d)))/
1.230003938
1.875000282
- *** Failers
+\= Expect no match
1.235
/a(?)b/
@@ -1648,13 +1640,13 @@
/^(\D*)(?=\d)(?!123)/
ABC445
- *** Failers
+\= Expect no match
ABC123
/^[W-]46]/
W46]789
-46]789
- *** Failers
+\= Expect no match
Wall
Zebra
42
@@ -1670,7 +1662,7 @@
[abcd]
]abcd[
\\backslash
- *** Failers
+\= Expect no match
-46]789
well
@@ -1678,11 +1670,13 @@
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 cat dog elephant mussel cow horse canary baboon snake shark otherword
+\= Expect no match
+ 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
+\= Expect no match
+ 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
@@ -1713,27 +1707,31 @@
aaaaaaaa
/^(a){1,1}/
- bcd
abc
aab
+\= Expect no match
+ bcd
/^(a){1,2}/
- bcd
abc
aab
+\= Expect no match
+ bcd
/^(a){1,3}/
- bcd
abc
aab
aaa
+\= Expect no match
+ bcd
/^(a){1,}/
- bcd
abc
aab
aaa
aaaaaaaa
+\= Expect no match
+ bcd
/.*\.gif/
borfle\nbib.gif\nno
@@ -1777,7 +1775,7 @@
/(.*X|^B)/
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/(.*X|^B)/m
@@ -1788,7 +1786,7 @@
/(.*X|^B)/s
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/(.*X|^B)/ms
@@ -1799,17 +1797,17 @@
/(?s)(.*X|^B)/
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/(?s:.*X|^B)/
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/^.*B/
- **** Failers
+\= Expect no match
abc\nB
/(?s)^.*B/
@@ -1847,34 +1845,34 @@
/^[abcdefghijklmnopqrstuvwxy0123456789]/
n
- *** Failers
+\= Expect no match
z
/abcde{0,0}/
abcd
- *** Failers
+\= Expect no match
abce
/ab[cd]{0,0}e/
abe
- *** Failers
+\= Expect no match
abcde
/ab(c){0,0}d/
abd
- *** Failers
+\= Expect no match
abcd
/a(b*)/
a
ab
abbbb
- *** Failers
+\= Expect no match
bbbbb
/ab\d{0}e/
abe
- *** Failers
+\= Expect no match
ab1e
/"([^\\"]+|\\.)*"/
@@ -1902,7 +1900,7 @@
/a.b/
acb
- *** Failers
+\= Expect no match
a\nb
/a[^a]b/s
@@ -1928,12 +1926,11 @@
bbbbbac
/(?!\A)x/m
+ a\bx\n
+ a\nx\n
+\= Expect no match
x\nb\n
- a\bx\n
-/\x0{ab}/
- \0{ab}
-
/(A|B)*?CD/
CD
@@ -1951,46 +1948,45 @@
catfood
arfootle
rfoosh
- *** Failers
+\= Expect no match
barfoo
towbarfoo
/\w{3}(?<!bar)foo/
catfood
- *** Failers
+\= Expect no match
foo
barfoo
towbarfoo
/(?<=(foo)a)bar/
fooabar
- *** Failers
+\= Expect no match
bar
foobbar
/\Aabc\z/m
abc
- *** Failers
+\= Expect no match
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
+\= Expect no match
+ /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
/(?>(\.\d\d[1-9]?))\d+/
1.230003938
1.875000282
- *** Failers
+\= Expect no match
1.235
/^((?>\w+)|(?>\s+))*$/
now is the time for all good men to come to the aid of the party
- *** Failers
+\= Expect no match
this is not a line with only words and spaces!
/(\d+)(\w)/
@@ -1999,7 +1995,7 @@
/((?>\d+))(\w)/
12345a
- *** Failers
+\= Expect no match
12345+
/(?>a+)b/
@@ -2023,32 +2019,32 @@
/\(((?>[^()]+)|\([^()]+\))+\)/
(abc)
(abc(def)xyz)
- *** Failers
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/a(?-i)b/i
ab
Ab
- *** Failers
+\= Expect no match
aB
AB
/(a (?x)b c)d e/
a bcd e
- *** Failers
+\= Expect no match
a b cd e
abcd e
a bcde
/(a b(?x)c d (?-x)e f)/
a bcde f
- *** Failers
+\= Expect no match
abcdef
/(a(?i)b)c/
abc
aBc
- *** Failers
+\= Expect no match
abC
aBC
Abc
@@ -2059,7 +2055,7 @@
/a(?i:b)c/
abc
aBc
- *** Failers
+\= Expect no match
ABC
abC
aBC
@@ -2067,14 +2063,14 @@
/a(?i:b)*c/
aBc
aBBc
- *** Failers
+\= Expect no match
aBC
aBBC
/a(?=b(?i)c)\w\wd/
abcd
abCd
- *** Failers
+\= Expect no match
aBCd
abcD
@@ -2082,7 +2078,7 @@
more than million
more than MILLION
more \n than Million
- *** Failers
+\= Expect no match
MORE THAN MILLION
more \n than \n million
@@ -2090,7 +2086,7 @@
more than million
more than MILLION
more \n than Million
- *** Failers
+\= Expect no match
MORE THAN MILLION
more \n than \n million
@@ -2098,7 +2094,7 @@
abc
aBbc
aBBc
- *** Failers
+\= Expect no match
Abc
abAb
abbC
@@ -2106,7 +2102,7 @@
/(?=a(?i)b)\w\wc/
abc
aBc
- *** Failers
+\= Expect no match
Ab
abC
aBC
@@ -2114,7 +2110,7 @@
/(?<=a(?i)b)(\w\w)c/
abxxc
aBxxc
- *** Failers
+\= Expect no match
Abxxc
ABxxc
abxxC
@@ -2122,7 +2118,7 @@
/(?:(a)|b)(?(1)A|B)/
aA
bB
- *** Failers
+\= Expect no match
aB
bA
@@ -2130,7 +2126,7 @@
aa
b
bb
- *** Failers
+\= Expect no match
ab
# Perl gets this next one wrong if the pattern ends with $; in that case it
@@ -2140,13 +2136,13 @@
abc:
12
123
- *** Failers
+\= Expect no match
xyz
/^(?(?!abc)\d\d|\w{3}:)$/
abc:
12
- *** Failers
+\= Expect no match
123
xyz
@@ -2155,7 +2151,7 @@
cat
fcat
focat
- *** Failers
+\= Expect no match
foocat
/(?(?<!foo)cat|bar)/
@@ -2163,7 +2159,7 @@
cat
fcat
focat
- *** Failers
+\= Expect no match
foocat
/( \( )? [^()]+ (?(1) \) |) /x
@@ -2182,7 +2178,7 @@
12
12a
12aa
- *** Failers
+\= Expect no match
1234
/((?i)blah)\s+\1/
@@ -2190,7 +2186,7 @@
BLAH BLAH
Blah Blah
blaH blaH
- *** Failers
+\= Expect no match
blah BLAH
Blah blah
blaH blah
@@ -2270,13 +2266,13 @@
/(?(?=[^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
+\= Expect no match
sep-12-98
/(?<=(foo))bar\1/
foobarfoo
foobarfootling
- *** Failers
+\= Expect no match
foobar
barfoo
@@ -2294,7 +2290,7 @@
aBCx
bbx
BBx
- *** Failers
+\= Expect no match
abcX
aBCX
bbX
@@ -2308,7 +2304,7 @@
Europe
frog
France
- *** Failers
+\= Expect no match
Africa
/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
@@ -2318,13 +2314,13 @@
xY
zebra
Zambesi
- *** Failers
+\= Expect no match
aCD
XY
/(?<=foo\n)^bar/m
foo\nbar
- *** Failers
+\= Expect no match
bar
baz\nbar
@@ -2332,41 +2328,43 @@
barbaz
barbarbaz
koobarbaz
- *** Failers
+\= Expect no match
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./
+# 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}$/
+ aaaaa
+ aaaaaaa
+ aaaaaaaaaa
+\= Expect no match
a
aa
aaa
- aaaaa
- aaaaaaa
aaaaaaaa
aaaaaaaaa
- aaaaaaaaaa
aaaaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaaa
aaaaaaaaaaaaaa
aaaaaaaaaaaaaaa
- aaaaaaaaaaaaaaaa
+ aaaaaaaaaaaaaaaa
/^(a\1?)(a\1?)(a\2?)(a\3?)$/
- a
- aa
- aaa
aaaa
aaaaa
aaaaaa
aaaaaaa
+ aaaaaaaaaa
+\= Expect no match
+ a
+ aa
+ aaa
aaaaaaaa
aaaaaaaaa
- aaaaaaaaaa
aaaaaaaaaaa
aaaaaaaaaaaa
aaaaaaaaaaaaa
@@ -2374,14 +2372,14 @@
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./
+# 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
+\= Expect no match
xbc
axc
abx
@@ -2405,7 +2403,7 @@
/ab+bc/
abbc
- *** Failers
+\= Expect no match
abc
abq
@@ -2424,7 +2422,7 @@
abbbbc
/ab{4,5}bc/
- *** Failers
+\= Expect no match
abq
abbbbc
@@ -2445,7 +2443,7 @@
/^abc$/
abc
- *** Failers
+\= Expect no match
abbbbc
abcc
@@ -2456,8 +2454,7 @@
/abc$/
aabc
- *** Failers
- aabc
+\= Expect no match
aabcd
/^/
@@ -2475,7 +2472,7 @@
/a[bc]d/
abd
- *** Failers
+\= Expect no match
axyzd
abc
@@ -2499,7 +2496,7 @@
/a[^bc]d/
aed
- *** Failers
+\= Expect no match
abd
abd
@@ -2508,8 +2505,8 @@
/a[^]b]c/
adc
- *** Failers
a-c
+\= Expect no match
a]c
/\ba\b/
@@ -2518,13 +2515,13 @@
-a-
/\by\b/
- *** Failers
+\= Expect no match
xy
yz
xyz
/\Ba\B/
- *** Failers
+\= Expect no match
a-
-a
-a-
@@ -2543,8 +2540,7 @@
/\W/
-
- *** Failers
- -
+\= Expect no match
a
/a\sb/
@@ -2552,8 +2548,7 @@
/a\Sb/
a-b
- *** Failers
- a-b
+\= Expect no match
a b
/\d/
@@ -2561,8 +2556,7 @@
/\D/
-
- *** Failers
- -
+\= Expect no match
1
/[\w]/
@@ -2570,8 +2564,7 @@
/[\W]/
-
- *** Failers
- -
+\= Expect no match
a
/a[\s]b/
@@ -2579,8 +2572,7 @@
/a[\S]b/
a-b
- *** Failers
- a-b
+\= Expect no match
a b
/[\d]/
@@ -2588,8 +2580,7 @@
/[\D]/
-
- *** Failers
- -
+\= Expect no match
1
/ab|cd/
@@ -2648,12 +2639,11 @@
cde
/abc/
- *** Failers
+\= Expect no match
b
-
/a*/
-
+ \
/([abc])*d/
abbbcd
@@ -2707,7 +2697,7 @@
adcdcde
/a[bcd]+dcdcde/
- *** Failers
+\= Expect no match
abcde
adcdcde
@@ -2727,7 +2717,7 @@
effgz
ij
reffgz
- *** Failers
+\= Expect no match
effg
bcdd
@@ -2741,7 +2731,7 @@
a
/multiple words of text/
- *** Failers
+\= Expect no match
aa
uh-uh
@@ -2773,8 +2763,8 @@
/(a)|\1/
a
- *** Failers
ab
+\= Expect no match
x
/(([a-c])b*?\2)*/
@@ -2793,7 +2783,7 @@
ABC
XABCY
ABABC
- *** Failers
+\= Expect no match
aaxabxbaxbbx
XBC
AXC
@@ -2816,7 +2806,7 @@
ABBC
/ab+bc/i
- *** Failers
+\= Expect no match
ABC
ABQ
@@ -2835,7 +2825,7 @@
ABBBBC
/ab{4,5}?bc/i
- *** Failers
+\= Expect no match
ABQ
ABBBBC
@@ -2856,7 +2846,7 @@
/^abc$/i
ABC
- *** Failers
+\= Expect no match
ABBBBC
ABCC
@@ -2882,8 +2872,8 @@
AXYZC
/a.*c/i
- *** Failers
AABC
+\= Expect no match
AXYZD
/a[bc]d/i
@@ -2891,7 +2881,7 @@
/a[b-d]e/i
ACE
- *** Failers
+\= Expect no match
ABC
ABD
@@ -2915,7 +2905,7 @@
/a[^-b]c/i
ADC
- *** Failers
+\= Expect no match
ABD
A-C
@@ -2930,7 +2920,7 @@
DEF
/$b/i
- *** Failers
+\= Expect no match
A]C
B
@@ -2990,11 +2980,6 @@
/[^ab]*/i
CDE
-/abc/i
-
-/a*/i
-
-
/([abc])*d/i
ABBBCD
@@ -3021,6 +3006,7 @@
HIJ
/^(ab|cd)e/i
+\= Expect no match
ABCDE
/(abc|)ef/i
@@ -3065,7 +3051,7 @@
EFFGZ
IJ
REFFGZ
- *** Failers
+\= Expect no match
ADCDCDE
EFFG
BCDD
@@ -3086,7 +3072,7 @@
C
/multiple words of text/i
- *** Failers
+\= Expect no match
AA
UH-UH
@@ -3182,14 +3168,14 @@
/^(a\1?){4}$/
aaaaaaaaaa
- *** Failers
+\= Expect no match
AB
aaaaaaaaa
aaaaaaaaaaa
/^(a(?(1)\1)){4}$/
aaaaaaaaaa
- *** Failers
+\= Expect no match
aaaaaaaaa
aaaaaaaaaaa
@@ -3198,7 +3184,7 @@
/(?<=a)b/
ab
- *** Failers
+\= Expect no match
cb
b
@@ -3247,7 +3233,7 @@
Ab
/(?:(?i)a)b/
- *** Failers
+\= Expect no match
cb
aB
@@ -3266,7 +3252,7 @@
Ab
/(?i:a)b/
- *** Failers
+\= Expect no match
aB
aB
@@ -3285,25 +3271,11 @@
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
+\= Expect no match
Ab
AB
-/((?-i)a)b/i
-
/(?-i:a)b/i
ab
@@ -3317,7 +3289,7 @@
aB
/(?-i:a)b/i
- *** Failers
+\= Expect no match
AB
Ab
@@ -3330,14 +3302,14 @@
aB
/(?-i:a)b/i
- *** Failers
+\= Expect no match
Ab
AB
/((?-i:a))b/i
/((?-i:a.))b/i
- *** Failers
+\= Expect no match
AB
a\nB
@@ -3367,7 +3339,7 @@
aaac
/(?<![cd])b/
- *** Failers
+\= Expect no match
B\nB
dbcb
@@ -3387,7 +3359,7 @@
a
ab
aaa
- *** Failers
+\= Expect no match
dbcb
a--
aa--
@@ -3421,7 +3393,7 @@
/^b/
/()^b/
- *** Failers
+\= Expect no match
a\nb\nc\n
a\nb\nc\n
@@ -3429,7 +3401,7 @@
a\nb\nc\n
/(x)?(?(1)a|b)/
- *** Failers
+\= Expect no match
a
a
@@ -3447,7 +3419,7 @@
/^(\()?blah(?(1)(\)))$/
(blah)
blah
- *** Failers
+\= Expect no match
a
blah)
(blah
@@ -3455,7 +3427,7 @@
/^(\(+)?blah(?(1)(\)))$/
(blah)
blah
- *** Failers
+\= Expect no match
blah)
(blah
@@ -3465,7 +3437,7 @@
a
/(?(?=a)b|a)/
- *** Failers
+\= Expect no match
a
a
@@ -3487,7 +3459,7 @@
aaab
/^(?=(a+?))\1ab/
- *** Failers
+\= Expect no match
aaab
aaab
@@ -3504,7 +3476,7 @@
/([\w:]+::)?(\w+)$/
abcd
xy:z:::abcd
- *** Failers
+\= Expect no match
abcd:
abcd:
@@ -3535,7 +3507,7 @@
((abc(ade)ufh()()x
/a\Z/
- *** Failers
+\= Expect no match
aaab
a\nb\n
@@ -3549,7 +3521,6 @@
/b\z/
a\nb
- *** Failers
/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
a
@@ -3561,7 +3532,7 @@
the.quick.brown.fox
a100.b200.300c
12-ab.1245
- *** Failers
+\= Expect no match
\
.a
-a
@@ -3579,38 +3550,40 @@
/(?>.*)(?<=(abcd|wxyz))/
alphabetabcd
endingwxyz
- *** Failers
+\= Expect no match
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
+\= Expect no match
word cat dog elephant mussel cow horse canary baboon snake shark
/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
+\= Expect no match
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
+\= Expect no match
123abcfoo
/(?<=(?!...999)\d{3})foo/
999foo
123999foo
- *** Failers
+\= Expect no match
123abcfoo
/(?<=\d{3}(?!999)...)foo/
123abcfoo
123456foo
- *** Failers
+\= Expect no match
123999foo
/(?<=\d{3}...)(?<!999)foo/
123abcfoo
123456foo
- *** Failers
+\= Expect no match
123999foo
/<a[\s]+href[\s]*=[\s]* # find <a href=
@@ -3662,7 +3635,7 @@
abcde
-things
0digit
- *** Failers
+\= Expect no match
bcdef
/[[:space:]]+/
@@ -3681,10 +3654,11 @@
ab
/(?!\A)x/m
- a\nxb\n
+ a\nxb\n
/(?!^)x/m
- a\nxb\n
+\= Expect no match
+ a\nxb\n
/abc\Qabc\Eabc/
abcabcabc
@@ -3694,7 +3668,7 @@
/ abc\Q abc\Eabc/x
abc abcabc
- *** Failers
+\= Expect no match
abcabcabc
/abc#comment
@@ -3726,7 +3700,7 @@
/\Gabc/
abc
- *** Failers
+\= Expect no match
xyzabc
/\Gabc./g
@@ -3737,7 +3711,7 @@
/a(?x: b c )d/
XabcdY
- *** Failers
+\= Expect no match
Xa b c d Y
/((?x)x y z | a b c)/
@@ -3746,13 +3720,13 @@
/(?i)AB(?-i)C/
XabCY
- *** Failers
+\= Expect no match
XabcY
/((?i)AB(?-i)C|D)E/
abCE
DE
- *** Failers
+\= Expect no match
abcE
abCe
dE
@@ -3789,7 +3763,7 @@
a123:ddde:b342::324e:abcd
a123:ddde:b342::324e:dcba:abcd
a123:ddde:9999:b342::324e:dcba:abcd
- *** Failers
+\= Expect no match
1:2:3:4:5:6:7:8
a123:bce:ddde:9999:b342::324e:dcba:abcd
a123::9999:b342::324e:dcba:abcd
@@ -3805,10 +3779,11 @@
-
d
]
- *** Failers
+\= Expect no match
b
/(a+)*b/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?i)reg(?:ul(?:[a]|ae)r|ex)/
@@ -3831,22 +3806,22 @@
/ab cd(?x) de fg/
ab cddefg
- ** Failers
+\= Expect no match
abcddefg
/(?<![^f]oo)(bar)/
foobarX
- ** Failers
+\= Expect no match
boobarX
/(?<![^f])X/
offX
- ** Failers
+\= Expect no match
onyX
/(?<=[^f])X/
onyX
- ** Failers
+\= Expect no match
offX
/^/gm
@@ -3876,12 +3851,12 @@
"(?x)(?-x: \s*#\s*)"
A # B
- ** Failers
+\= Expect no match
#
"(?x-is)(?:(?-ixs) \s*#\s*) include"
A #include
- ** Failers
+\= Expect no match
A#include
A #Include
@@ -3933,24 +3908,24 @@
/^[\Eabc]/
a
- ** Failers
+\= Expect no match
E
/^[a-\Ec]/
b
- ** Failers
+\= Expect no match
-
E
/^[a\E\E-\Ec]/
b
- ** Failers
+\= Expect no match
-
E
/^[\E\Qa\E-\Qz\E]+/
b
- ** Failers
+\= Expect no match
-
/^[a\Q]bc\E]/
@@ -3980,30 +3955,36 @@
D
/(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?>a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?:a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/\Z/g
abc\n
/^(?s)(?>.*)(?<!\n)/
abc
+\= Expect no match
abc\n
/^(?![^\n]*\n\z)/
abc
+\= Expect no match
abc\n
/\z(?<!\n)/
abc
+\= Expect no match
abc\n
/(.*(.)?)*/
@@ -4030,6 +4011,7 @@
p
/.*[op][xyz]/
+\= Expect no match
fooabcfoo
/(?(?=.*b)b|^)/
@@ -4038,6 +4020,7 @@
/(?(?=^.*b)b|^)/
adc
+\= Expect no match
abc
/(?(?=.*b)b|^)*/
@@ -4061,16 +4044,18 @@
XabX
XAbX
CcC
- ** Failers
+\= Expect no match
XABX
/[\x00-\xff\s]+/
\x0a\x0b\x0c\x0d
/(abc)\1/i
+\= Expect no match
abc
/(abc)\1/
+\= Expect no match
abc
/[^a]*/i
@@ -4082,12 +4067,12 @@
12ABC
/[^a]*?X/i
- ** Failers
+\= Expect no match
12abc
12ABC
/[^a]+?X/i
- ** Failers
+\= Expect no match
12abc
12ABC
@@ -4155,9 +4140,11 @@
aaaabaaabaabab
/(?>a+|ab)+?c/
+\= Expect no match
aabc
/(?>a+|ab)+c/
+\= Expect no match
aabc
/(?:a+|ab)+c/
@@ -4170,9 +4157,11 @@
ab
/^(?:a|ab)++c/
+\= Expect no match
aaaabc
/^(?>a|ab)++c/
+\= Expect no match
aaaabc
/^(?:a|ab)+c/
@@ -4180,24 +4169,24 @@
/(?=abc){3}abc/aftertext
abcabcabc
- ** Failers
+\= Expect no match
xyz
/(?=abc)+abc/aftertext
abcabcabc
- ** Failers
+\= Expect no match
xyz
/(?=abc)++abc/aftertext
abcabcabc
- ** Failers
+\= Expect no match
xyz
/(?=abc){0}xyz/
xyz
/(?=abc){1}xyz/
- ** Failers
+\= Expect no match
xyz
/(?=(a))?./
@@ -4221,7 +4210,7 @@
/^[\g<a>]+/
ggg<<<aaa>>>
- ** Failers
+\= Expect no match
\\ga
/^[\ga]+/
@@ -4238,12 +4227,12 @@
/(?<=a{2})b/i
xaabc
- ** Failers
+\= Expect no match
xabc
/(?<!a{2})b/i
xabc
- ** Failers
+\= Expect no match
xaabc
/(?<=a\h)c/
@@ -4252,12 +4241,12 @@
/(?<=[^a]{2})b/
axxbc
aAAbc
- ** Failers
+\= Expect no match
xaabc
/(?<=[^a]{2})b/i
axxbc
- ** Failers
+\= Expect no match
aAAbc
xaabc
@@ -4278,35 +4267,29 @@
/^(a{2,3}){2,}+a/
aaaaaaa
- ** Failers
+\= Expect no match
aaaaaa
aaaaaaaaa
/^(a{2,3})++a/
- ** Failers
+\= Expect no match
aaaaaa
/^(a{2,3})*+a/
- ** Failers
+\= Expect no match
aaaaaa
-/ab\Cde/
- abXde
-
-/(?<=ab\Cde)X/
- abZdeX
-
/\H\h\V\v/
X X\x0a
X\x09X\x0b
- ** Failers
+\= Expect no match
\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
+\= Expect no match
\x09\x20\xa0\x0a\x0b
/\H{3,4}/
@@ -4319,7 +4302,7 @@
/\h*X\h?\H+Y\H?Z/
>XNNNYZ
> X NYQZ
- ** Failers
+\= Expect no match
>XYZ
> X NY Z
@@ -4348,10 +4331,10 @@
/^abc\K/aftertext
abcdef
- ** Failers
+\= Expect no match
defabcxyz
-/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
+/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-2}Z/
ababababbbabZXXXX
/(?<A>tom|bon)-\g{A}/
@@ -4359,19 +4342,20 @@
bon-bon
/(^(a|b\g{-1}))/
+\= Expect no match
bacxxx
/(?|(abc)|(xyz))\1/
abcabc
xyzxyz
- ** Failers
+\= Expect no match
abcxyz
xyzabc
/(?|(abc)|(xyz))(?1)/
abcabc
xyzabc
- ** Failers
+\= Expect no match
xyzxyz
/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
@@ -4386,14 +4370,14 @@
/(?'abc'\w+):\k<abc>{2}/
a:aaxyz
ab:ababxyz
- ** Failers
+\= Expect no match
a:axyz
ab:abxyz
/(?'abc'\w+):\g{abc}{2}/
a:aaxyz
ab:ababxyz
- ** Failers
+\= Expect no match
a:axyz
ab:abxyz
@@ -4421,7 +4405,7 @@
1.2.3.4
131.111.10.206
10.0.0.0
- ** Failers
+\= Expect no match
10.6
455.3.4.5
@@ -4429,18 +4413,18 @@
1.2.3.4
131.111.10.206
10.0.0.0
- ** Failers
+\= Expect no match
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
+\= Expect no match
this is not a line with only words and spaces!
/(\d++)(\w)/
12345a
- *** Failers
+\= Expect no match
12345+
/a++b/
@@ -4458,14 +4442,14 @@
/\(([^()]++|\([^()]+\))+\)/
(abc)
(abc(def)xyz)
- *** Failers
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/^([^()]|\((?1)*\))*$/
abc
a(b)c
a(b(c))d
- *** Failers)
+\= Expect no match)
a(b(c)d
/^>abc>([^()]|\((?1)*\))*<xyz<$/
@@ -4478,20 +4462,20 @@
Satanoscillatemymetallicsonatas
AmanaplanacanalPanama
AblewasIereIsawElba
- *** Failers
+\= Expect no match
Thequickbrownfox
/^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
12
(((2+2)*-3)-7)
-12
- *** Failers
+\= Expect no match
((2+2)*-3)-7)
/^(x(y|(?1){2})z)/
xyz
xxyzxyzz
- *** Failers
+\= Expect no match
xxyzz
xxyzxyzxyzz
@@ -4502,22 +4486,27 @@
<abc <def> hij>
<abc<>def>
<abc<>
- *** Failers
+\= Expect no match
<abc
/^a+(*FAIL)/
+\= Expect no match
aaaaaa
/a+b?c+(*FAIL)/
+\= Expect no match
aaabccc
/a+b?(*PRUNE)c+(*FAIL)/
+\= Expect no match
aaabccc
/a+b?(*COMMIT)c+(*FAIL)/
+\= Expect no match
aaabccc
/a+b?(*SKIP)c+(*FAIL)/
+\= Expect no match
aaabcccaaabccc
/^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
@@ -4539,6 +4528,7 @@
dddddddd
/a+b?(*THEN)c+(*FAIL)/
+\= Expect no match
aaabccc
/(A (A|B(*ACCEPT)|C) D)(E)/x
@@ -4546,7 +4536,7 @@
ABX
AADE
ACDE
- ** Failers
+\= Expect no match
AD
/^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
@@ -4554,7 +4544,7 @@
Satan, oscillate my metallic sonatas!
A man, a plan, a canal: Panama!
Able was I ere I saw Elba.
- *** Failers
+\= Expect no match
The quick brown fox
/^((.)(?1)\2|.)$/
@@ -4564,17 +4554,18 @@
abcdcba
pqaabaaqp
ablewasiereisawelba
+\= Expect no match
rhubarb
the quick brown fox
/(a)(?<=b(?1))/
baz
- ** Failers
+\= Expect no match
caz
/(?<=b(?1))(a)/
zbaaz
- ** Failers
+\= Expect no match
aaa
/(?<X>a)(?<=b(?&X))/
@@ -4583,33 +4574,33 @@
/^(?|(abc)|(def))\1/
abcabc
defdef
- ** Failers
+\= Expect no match
abcdef
defabc
/^(?|(abc)|(def))(?1)/
abcabc
defabc
- ** Failers
+\= Expect no match
defdef
abcdef
/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/x,dupnames
a\"aaaaa
b\"aaaaa
- ** Failers
+\= Expect no match
b\"11111
/(?:(?1)|B)(A(*F)|C)/
ABCD
CCD
- ** Failers
+\= Expect no match
CAD
/^(?:(?1)|B)(A(*F)|C)/
CCD
BCD
- ** Failers
+\= Expect no match
ABCD
CAD
BAD
@@ -4620,7 +4611,7 @@
BAD
BCD
BAX
- ** Failers
+\= Expect no match
ACX
ABC
@@ -4634,12 +4625,12 @@
(ab(cd)ef)
/^(?=a(*SKIP)b|ac)/
- ** Failers
+\= Expect no match
ac
/^(?=a(*PRUNE)b)/
ab
- ** Failers
+\= Expect no match
ac
/^(?=a(*ACCEPT)b)/
@@ -4682,27 +4673,31 @@
# I think is a Perl bug.
/A(*COMMIT)(B|D)/
+\= Expect no match
ACABX
# Check the use of names for failure
/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
- ** Failers
+\= Expect no match
AC
CB
/(*MARK:A)(*SKIP:B)(C|X)/mark
C
+\= Expect no match
D
/^(A(*THEN:A)B|C(*THEN:B)D)/mark
- ** Failers
+\= Expect no match
CB
/^(?:A(*THEN:A)B|C(*THEN:B)D)/mark
+\= Expect no match
CB
/^(?>A(*THEN:A)B|C(*THEN:B)D)/mark
+\= Expect no match
CB
# This should succeed, as the skip causes bump to offset 1 (the mark). Note
@@ -4724,6 +4719,7 @@
AAAC
/(*:A)A+(*SKIP:A)(B|Z)/mark
+\= Expect no match
AAAC
# This should succeed, as a non-existent skip name disables the skip.
@@ -4739,7 +4735,7 @@
/(*COMMIT)(A|P)(B|P)(C|P)/
ABCDEFG
- ** Failers
+\= Expect no match
DEFGABC
# COMMIT inside an atomic group can't stop backtracking over the group.
@@ -4748,6 +4744,7 @@
abbb
/(\w+)b(*COMMIT)\w{2}/
+\= Expect no match
abbb
# Check opening parens in comment when seeking forward reference.
@@ -4758,9 +4755,11 @@
# COMMIT should override THEN.
/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
+\= Expect no match
yes
/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
+\= Expect no match
yes
/b?(*SKIP)c/
@@ -4768,9 +4767,11 @@
abc
/(*SKIP)bc/
+\= Expect no match
a
/(*SKIP)b/
+\= Expect no match
a
/(?P<abn>(?P=abn)xxx|)+/
@@ -4779,7 +4780,7 @@
/(?i:([^b]))(?1)/
aa
aA
- ** Failers
+\= Expect no match
ab
aB
Ba
@@ -4787,7 +4788,7 @@
/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
aaaaaaX
- ** Failers
+\= Expect no match
aaaaaa
/^(?&t)*(?(DEFINE)(?<t>a))\w$/
@@ -4797,24 +4798,24 @@
/^(a)*+(\w)/
aaaaX
YZ
- ** Failers
+\= Expect no match
aaaa
/^(?:a)*+(\w)/
aaaaX
YZ
- ** Failers
+\= Expect no match
aaaa
/^(a)++(\w)/
aaaaX
- ** Failers
+\= Expect no match
aaaa
YZ
/^(?:a)++(\w)/
aaaaX
- ** Failers
+\= Expect no match
aaaa
YZ
@@ -4828,13 +4829,13 @@
/^(a){2,}+(\w)/
aaaaX
- ** Failers
+\= Expect no match
aaa
YZ
/^(?:a){2,}+(\w)/
aaaaX
- ** Failers
+\= Expect no match
aaa
YZ
@@ -4844,12 +4845,12 @@
aab
/(a)++(?1)b/
- ** Failers
+\= Expect no match
ab
aab
/(a)*+(?1)b/
- ** Failers
+\= Expect no match
ab
aab
@@ -4884,6 +4885,7 @@
aaaab
/^(a)(?1)++ab/
+\= Expect no match
aaaab
/^(?=a(*:M))aZ/mark
@@ -4933,6 +4935,7 @@ name)/mark
# Capture
/^.*? (a(*THEN)b) c/x
+\= Expect no match
aabc
/^.*? (a(*THEN)b|(*F)) c/x
@@ -4942,11 +4945,13 @@ name)/mark
aabc
/^.*? ( (a(*THEN)b) ) c/x
+\= Expect no match
aabc
# Non-capture
/^.*? (?:a(*THEN)b) c/x
+\= Expect no match
aabc
/^.*? (?:a(*THEN)b|(*F)) c/x
@@ -4956,11 +4961,13 @@ name)/mark
aabc
/^.*? (?: (?:a(*THEN)b) ) c/x
+\= Expect no match
aabc
# Atomic
/^.*? (?>a(*THEN)b) c/x
+\= Expect no match
aabc
/^.*? (?>a(*THEN)b|(*F)) c/x
@@ -4970,11 +4977,13 @@ name)/mark
aabc
/^.*? (?> (?>a(*THEN)b) ) c/x
+\= Expect no match
aabc
# Possessive capture
/^.*? (a(*THEN)b)++ c/x
+\= Expect no match
aabc
/^.*? (a(*THEN)b|(*F))++ c/x
@@ -4984,11 +4993,13 @@ name)/mark
aabc
/^.*? ( (a(*THEN)b)++ )++ c/x
+\= Expect no match
aabc
# Possessive non-capture
/^.*? (?:a(*THEN)b)++ c/x
+\= Expect no match
aabc
/^.*? (?:a(*THEN)b|(*F))++ c/x
@@ -4998,6 +5009,7 @@ name)/mark
aabc
/^.*? (?: (?:a(*THEN)b)++ )++ c/x
+\= Expect no match
aabc
# Condition assertion
@@ -5008,12 +5020,14 @@ name)/mark
# Condition
/^.*?(?(?=a)a|b(*THEN)c)/
+\= Expect no match
ba
/^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
ba
/^.*?(?(?=a)a(*THEN)b|c)/
+\= Expect no match
ac
# Assertion
@@ -5037,7 +5051,7 @@ name)/mark
/(?<=(a(*COMMIT)b))c/
xabcd
- ** Failers
+\= Expect no match
xacd
/(?<!a(*FAIL)b)c/
@@ -5061,40 +5075,49 @@ name)/mark
/(*MARK:A)(*PRUNE:B)(C|X)/mark
C
+\= Expect no match
D
/(*MARK:A)(*PRUNE:B)(C|X)/mark
C
+\= Expect no match
D
/(*MARK:A)(*THEN:B)(C|X)/mark
C
+\= Expect no match
D
/(*MARK:A)(*THEN:B)(C|X)/mark,no_start_optimize
C
+\= Expect no match
D
/(*MARK:A)(*THEN:B)(C|X)/mark
C
+\= Expect no match
D
# This should fail, as the skip causes a bump to offset 3 (the skip).
/A(*MARK:A)A+(*SKIP)(B|Z) | AC/x,mark
+\= Expect no match
AAAC
# Same
/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark
+\= Expect no match
AAAC
/A(*:A)A+(*SKIP)(B|Z) | AC/x,mark
+\= Expect no match
AAAC
# This should fail, as a null name is the same as no name.
/A(*MARK:A)A+(*SKIP:)(B|Z) | AC/x,mark
+\= Expect no match
AAAC
# A check on what happens after hitting a mark and them bumping along to
@@ -5105,7 +5128,7 @@ name)/mark
/A(*:A)B|XX(*:B)Y/mark
AABC
XXYZ
- ** Failers
+\= Expect no match
XAQQ
XAQQXZZ
AXQQQ
@@ -5114,14 +5137,14 @@ name)/mark
/^(A(*THEN:A)B|C(*THEN:B)D)/mark
AB
CD
- ** Failers
+\= Expect no match
AC
CB
/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
AB
CD
- ** Failers
+\= Expect no match
AC
CB
@@ -5145,12 +5168,12 @@ name)/mark
/b(*:m)f|a(*:n)w/mark
aw
- ** Failers
+\= Expect no match
abc
/b(*:m)f|aw/mark
abaw
- ** Failers
+\= Expect no match
abc
abax
@@ -5158,47 +5181,48 @@ name)/mark
AAAC
/a(*PRUNE:X)bc|qq/mark,no_start_optimize
- ** Failers
+\= Expect no match
axy
/a(*THEN:X)bc|qq/mark,no_start_optimize
- ** Failers
+\= Expect no match
axy
/(?=a(*MARK:A)b)..x/mark
abxy
- ** Failers
+\= Expect no match
abpq
/(?=a(*MARK:A)b)..(*:Y)x/mark
abxy
- ** Failers
+\= Expect no match
abpq
/(?=a(*PRUNE:A)b)..x/mark
abxy
- ** Failers
+\= Expect no match
abpq
/(?=a(*PRUNE:A)b)..(*:Y)x/mark
abxy
- ** Failers
+\= Expect no match
abpq
/(?=a(*THEN:A)b)..x/mark
abxy
- ** Failers
+\= Expect no match
abpq
/(?=a(*THEN:A)b)..(*:Y)x/mark
abxy
- ** Failers
+\= Expect no match
abpq
/(another)?(\1?)test/
hello world test
/(another)?(\1+)test/
+\= Expect no match
hello world test
/(a(*COMMIT)b){0}a(?1)|aac/
@@ -5216,18 +5240,6 @@ name)/mark
/(?:.*?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
@@ -5235,6 +5247,7 @@ name)/mark
aab
/(?>^a)b/s
+\= Expect no match
aab
/(?>.*?)(?<=(abcd)|(wxyz))/
@@ -5246,6 +5259,7 @@ name)/mark
endingwxyz
"(?>.*)foo"
+\= Expect no match
abcdfooxyz
"(?>.*?)foo"
@@ -5258,6 +5272,7 @@ name)/mark
ac
/(?<=(*SKIP)ac)a/
+\= Expect no match
aa
/A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/x,mark
@@ -5331,6 +5346,7 @@ name)/mark
# This gives "no match", as expected.
/aaaaa(*COMMIT)b|a+c/
+\= Expect no match
aaaaaac
# ---- Tests using THEN ----
@@ -5389,6 +5405,7 @@ name)/mark
/(a(*COMMIT)b)c|abd/
abc
+\= Expect no match
abd
/(?=a(*COMMIT)b)abc|abd/
@@ -5400,14 +5417,16 @@ name)/mark
abd
/a(?=b(*COMMIT)c)[^d]|abd/
+ abc
+\= Expect no match
abd
- abc
/a(?=bc).|abd/
abd
abc
/a(?>b(*COMMIT)c)d|abd/
+\= Expect no match
abceabd
/a(?>bc)d|abd/
@@ -5417,6 +5436,7 @@ name)/mark
abd
/(?>a(*COMMIT)c)d|abd/
+\= Expect no match
abd
/((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
@@ -5426,7 +5446,7 @@ name)/mark
# made them compatible.
/^(a)?(?(1)a|b)+$/
- *** Failers
+\= Expect no match
a
/(?=a\Kb)ab/
@@ -5441,58 +5461,73 @@ name)/mark
/^abc(?<!b\Kq)d/
abcd
-
/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark
+\= Expect no match
AAAC
/^((abc|abcx)(*THEN)y|abcd)/
abcd
- *** Failers
+\= Expect no match
abcxy
/^((yes|no)(*THEN)(*F))?/
+\= Expect no match
yes
/(A (.*) C? (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) C? (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) C? (*THEN) | A D) \s* z/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) (?:C|) (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) C{0,6} (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCEBefgBhiBqz
/(A (.*) (CE){0,6} (*THEN) | A D) z/x
+\= Expect no match
AbcdCEBefgBhiBqz
/(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
/(A (.*) (CE*){0,6} (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
/(?=a(*COMMIT)b|ac)ac|ac/
+\= Expect no match
ac
/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
+\= Expect no match
ac
# ----
@@ -5519,6 +5554,7 @@ name)/mark
bnn
/(?=b(*SKIP)a)bn|bnn/
+\= Expect no match
bnn
/(?=b(*THEN)a)bn|bnn/
@@ -5565,22 +5601,27 @@ name)/mark
/^\d*\w{4}/
1234
+\= Expect no match
123
/^[^b]*\w{4}/
aaaa
+\= Expect no match
aaa
/^[^b]*\w{4}/i
aaaa
+\= Expect no match
aaa
/^a*\w{4}/
aaaa
+\= Expect no match
aaa
/^a*\w{4}/i
aaaa
+\= Expect no match
aaa
/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
@@ -5590,7 +5631,7 @@ name)/mark
/(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
AfooA
AbarA
- ** Failers
+\= Expect no match
Afoofoo
Abarbar
@@ -5641,6 +5682,7 @@ name)/mark
ababc
/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
+\= Expect no match
acb
'\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
@@ -5671,6 +5713,7 @@ name)/mark
bbbaaabaabb
/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames
+\= Expect no match
bbbaaaccccaaabbbcc
/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
@@ -5727,4 +5770,26 @@ name)/mark
"(?|(\k'Pm')|(?'Pm'))"
abcd
+/(?|(aaa)|(b))\g{1}/
+ aaaaaa
+ bb
+
+/(?|(aaa)|(b))(?1)/
+ aaaaaa
+ baaa
+\= Expect no match
+ bb
+
+/(?|(aaa)|(b))/
+ xaaa
+ xbc
+
+/(?|(?'a'aaa)|(?'a'b))\k'a'/
+ aaaaaa
+ bb
+
+/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames
+ aaaccccaaa
+ bccccb
+
# End of testinput1
diff --git a/testdata/testinput10 b/testdata/testinput10
index a1fdd92..550e1c9 100644
--- a/testdata/testinput10
+++ b/testdata/testinput10
@@ -1,45 +1,7 @@
# This set of tests is for UTF-8 support and Unicode property support, with
# relevance only for the 8-bit library.
-/X(\C{3})/utf
- X\x{1234}
-
-/X(\C{4})/utf
- X\x{1234}YZ
-
-/X\C*/utf
- XYZabcdce
-
-/X\C*?/utf
- XYZabcde
-
-/X\C{3,5}/utf
- Xabcdefg
- X\x{1234}
- X\x{1234}YZ
- X\x{1234}\x{512}
- X\x{1234}\x{512}YZ
-
-/X\C{3,5}?/utf
- Xabcdefg
- X\x{1234}
- X\x{1234}YZ
- X\x{1234}\x{512}
-
-/a\Cb/utf
- aXb
- a\nb
-
-/a\C\Cb/utf
- a\x{100}b
-
-/ab\Cde/utf
- abXde
-
-/a\C\Cb/utf
- a\x{100}b
- ** Failers
- a\x{12257}b
+# The next 4 patterns have UTF-8 errors
/[]/utf
@@ -47,7 +9,12 @@
/xxx/utf
+/Â/utf
+
+# Now test subjects
+
/badutf/utf
+\= Expect UTF-8 errors
X\xdf
XX\xef
XXX\xef\x80
@@ -89,11 +56,13 @@
\xff
/badutf/utf
+\= Expect UTF-8 errors
XX\xfb\x80\x80\x80\x80
XX\xfd\x80\x80\x80\x80\x80
XX\xf7\xbf\xbf\xbf
/shortutf/utf
+\= Expect UTF-8 errors
XX\xdf\=ph
XX\xef\=ph
XX\xef\x80\=ph
@@ -111,6 +80,7 @@
\xfd\x80\x80\x80\x80\=ph
/anything/utf
+\= Expect UTF-8 errors
X\xc0\x80
XX\xc1\x8f
XXX\xe0\x9f\x80
@@ -119,20 +89,57 @@
\xfc\x83\x80\x80\x80\x80
\xfe\x80\x80\x80\x80\x80
\xff\x80\x80\x80\x80\x80
+ \xf8\x88\x80\x80\x80
+ \xf9\x87\x80\x80\x80
+ \xfc\x84\x80\x80\x80\x80
+ \xfd\x83\x80\x80\x80\x80
+\= Expect no match
\xc3\x8f
\xe0\xaf\x80
\xe1\x80\x80
\xf0\x9f\x80\x80
\xf1\x8f\x80\x80
- \xf8\x88\x80\x80\x80
- \xf9\x87\x80\x80\x80
- \xfc\x84\x80\x80\x80\x80
- \xfd\x83\x80\x80\x80\x80
\xf8\x88\x80\x80\x80\=no_utf_check
\xf9\x87\x80\x80\x80\=no_utf_check
\xfc\x84\x80\x80\x80\x80\=no_utf_check
\xfd\x83\x80\x80\x80\x80\=no_utf_check
+
+# Similar tests with offsets
+/badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+ X\xdfabcd\=offset=1
+\= Expect no match
+ X\xdfabcd\=offset=2
+
+/(?<=x)badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+ X\xdfabcd\=offset=1
+ X\xdfabcd\=offset=2
+ X\xdfabcd\xdf\=offset=3
+\= Expect no match
+ X\xdfabcd\=offset=3
+
+/(?<=xx)badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+ X\xdfabcd\=offset=1
+ X\xdfabcd\=offset=2
+ X\xdfabcd\=offset=3
+
+/(?<=xxxx)badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+ X\xdfabcd\=offset=1
+ X\xdfabcd\=offset=2
+ X\xdfabcd\=offset=3
+ X\xdfabc\xdf\=offset=6
+ X\xdfabc\xdf\=offset=7
+\= Expect no match
+ X\xdfabcd\=offset=6
+
/\x{100}/IB,utf
/\x{1000}/IB,utf
@@ -167,27 +174,12 @@
/\x{212ab}/IB,utf
-# This one is here not because it's different to Perl, but because the way
-# the captured single-byte is displayed. (In Perl it becomes a character, and you
-# can't tell the difference.)
-
-/X(\C)(.*)/utf
- X\x{1234}
- X\nabc
-
-# This one is here because Perl gives out a grumbly error message (quite
-# correctly, but that messes up comparisons).
-
-/a\Cb/utf
- *** Failers
- a\x{100}b
-
/[^ab\xC0-\xF0]/IB,utf
\x{f1}
\x{bf}
\x{100}
\x{1000}
- *** Failers
+\= Expect no match
\x{c0}
\x{f0}
@@ -214,7 +206,6 @@
\x{100}
Z\x{100}
\x{100}Z
- *** Failers
/[\xff]/IB,utf
>\x{ff}<
@@ -236,21 +227,23 @@
# This tests the stricter UTF-8 check according to RFC 3629.
/X/utf
+\= Expect UTF-8 errors
\x{d800}
- \x{d800}\=no_utf_check
\x{da00}
- \x{da00}\=no_utf_check
\x{dfff}
- \x{dfff}\=no_utf_check
\x{110000}
- \x{110000}\=no_utf_check
\x{2000000}
- \x{2000000}\=no_utf_check
\x{7fffffff}
+\= Expect no match
+ \x{d800}\=no_utf_check
+ \x{da00}\=no_utf_check
+ \x{dfff}\=no_utf_check
+ \x{110000}\=no_utf_check
+ \x{2000000}\=no_utf_check
\x{7fffffff}\=no_utf_check
/(*UTF8)\x{1234}/
- abcd\x{1234}pqr
+ abcd\x{1234}pqr
/(*CRLF)(*UTF)(*BSR_UNICODE)a\Rb/I
@@ -290,11 +283,14 @@
/a+/utf
a\x{123}aa\=offset=1
- a\x{123}aa\=offset=2
a\x{123}aa\=offset=3
a\x{123}aa\=offset=4
- a\x{123}aa\=offset=5
+\= Expect bad offset value
a\x{123}aa\=offset=6
+\= Expect bad UTF-8 offset
+ a\x{123}aa\=offset=2
+\= Expect no match
+ a\x{123}aa\=offset=5
/\x{1234}+/Ii,utf
@@ -395,7 +391,6 @@
Z\x{100}
\x{100}
\x{100}Z
- *** Failers
/[z-\x{100}]/IB,utf
@@ -421,7 +416,7 @@
\x{104}
\x{105}
\x{109}
- ** Failers
+\= Expect no match
\x{100}
\x{10a}
@@ -435,7 +430,7 @@
\x{ff}
\x{100}
\x{101}
- ** Failers
+\= Expect no match
\x{102}
Y
y
@@ -445,6 +440,9 @@
/\x{3a3}B/IBi,utf
/abc/utf,replace=
- abc
+ abc
+
+/(?<=(a)(?-1))x/I,utf
+ a\x80zx\=offset=3
# End of testinput10
diff --git a/testdata/testinput11 b/testdata/testinput11
index 43d89e1..2bdef9b 100644
--- a/testdata/testinput11
+++ b/testdata/testinput11
@@ -4,11 +4,8 @@
# different, so they have separate output files.
#forbid_utf
+#newline_default LF ANY ANYCRLF
-/a\Cb/
- aXb
- a\nb
-
/[^\x{c4}]/IB
/\x{100}/I
@@ -343,7 +340,7 @@
# Non-UTF characters
-/\C{2,3}/
+/.{2,3}/
\x{400000}\x{400001}\x{400002}\x{400003}
/\x{400000}\x{800000}/IBi
@@ -354,4 +351,6 @@
/[\V]/IB
+/(*THEN:\[A]{65501})/expand
+
# End of testinput11
diff --git a/testdata/testinput12 b/testdata/testinput12
index 1cba4af..14a7715 100644
--- a/testdata/testinput12
+++ b/testdata/testinput12
@@ -7,49 +7,6 @@
/abc/utf
]
-/X(\C{3})/utf
- X\x{11234}Y
- X\x{11234}YZ
-
-/X(\C{4})/utf
- X\x{11234}YZ
- X\x{11234}YZW
-
-/X\C*/utf
- XYZabcdce
-
-/X\C*?/utf
- XYZabcde
-
-/X\C{3,5}/utf
- Xabcdefg
- X\x{11234}Y
- X\x{11234}YZ
- X\x{11234}\x{512}
- X\x{11234}\x{512}YZ
- X\x{11234}\x{512}\x{11234}Z
-
-/X\C{3,5}?/utf
- Xabcdefg
- X\x{11234}Y
- X\x{11234}YZ
- X\x{11234}\x{512}YZ
- *** Failers
- X\x{11234}
-
-/a\Cb/utf
- aXb
- a\nb
-
-/a\C\Cb/utf
- a\x{12257}b
- a\x{12257}\x{11234}b
- ** Failers
- a\x{100}b
-
-/ab\Cde/utf
- abXde
-
# Check maximum character size
/\x{ffff}/IB,utf
@@ -90,27 +47,12 @@
/\x{212ab}/IB,utf
-# This one is here not because it's different to Perl, but because the way
-# the captured single-byte is displayed. (In Perl it becomes a character, and you
-# can't tell the difference.)
-
-/X(\C)(.*)/utf
- X\x{1234}
- X\nabc
-
-# This one is here because Perl gives out a grumbly error message (quite
-# correctly, but that messes up comparisons).
-
-/a\Cb/utf
- *** Failers
- a\x{100}b
-
/[^ab\xC0-\xF0]/IB,utf
\x{f1}
\x{bf}
\x{100}
\x{1000}
- *** Failers
+\= Expect no match
\x{c0}
\x{f0}
@@ -137,7 +79,6 @@
\x{100}
Z\x{100}
\x{100}Z
- *** Failers
/[\xff]/IB,utf
>\x{ff}<
@@ -157,18 +98,24 @@
/^[\QĀ\E-\QŐ\E/B,utf
/X/utf
- XX\x{d800}
XX\x{d800}\=no_utf_check
- XX\x{da00}
XX\x{da00}\=no_utf_check
- XX\x{dc00}
XX\x{dc00}\=no_utf_check
- XX\x{de00}
XX\x{de00}\=no_utf_check
- XX\x{dfff}
XX\x{dfff}\=no_utf_check
+\= Expect UTF error
+ XX\x{d800}
+ XX\x{da00}
+ XX\x{dc00}
+ XX\x{de00}
+ XX\x{dfff}
XX\x{110000}
XX\x{d800}\x{1234}
+\= Expect no match
+ XX\x{d800}\=offset=3
+
+/(?<=.)X/utf
+ XX\x{d800}\=offset=3
/(*UTF16)\x{11234}/
abcd\x{11234}pqr
@@ -229,7 +176,9 @@
a\x{123}aa\=offset=1
a\x{123}aa\=offset=2
a\x{123}aa\=offset=3
+\= Expect no match
a\x{123}aa\=offset=4
+\= Expect bad offset error
a\x{123}aa\=offset=5
a\x{123}aa\=offset=6
@@ -250,11 +199,16 @@
# Check bad offset
/a/utf
+\= Expect bad UTF-16 offset, or no match in 32-bit
\x{10000}\=offset=1
\x{10000}ab\=offset=1
+\= Expect 16-bit match, 32-bit no match
\x{10000}ab\=offset=2
+\= Expect no match
\x{10000}ab\=offset=3
+\= Expect no match in 16-bit, bad offset in 32-bit
\x{10000}ab\=offset=4
+\= Expect bad offset
\x{10000}ab\=offset=5
//utf
@@ -329,9 +283,6 @@
/\o{4200000}/utf
-/\C/utf
- \x{110000}
-
/\x{100}*A/IB,utf
A
@@ -341,7 +292,6 @@
Z\x{100}
\x{100}
\x{100}Z
- *** Failers
/[z-\x{100}]/IB,utf
@@ -367,7 +317,7 @@
\x{104}
\x{105}
\x{109}
- ** Failers
+\= Expect no match
\x{100}
\x{10a}
@@ -381,7 +331,7 @@
\x{ff}
\x{100}
\x{101}
- ** Failers
+\= Expect no match
\x{102}
Y
y
@@ -390,4 +340,7 @@
/\x{3a3}B/IBi,utf
+/./utf
+ \x{110000}
+
# End of testinput12
diff --git a/testdata/testinput14 b/testdata/testinput14
index 69ca2b6..f97f3ec 100644
--- a/testdata/testinput14
+++ b/testdata/testinput14
@@ -1,112 +1,37 @@
-# These are:
-#
-# (1) Tests of the match-limiting features. The results are different for
-# interpretive or JIT matching, so this test should not be run with JIT. The
-# same tests are run using JIT in test 16.
-
-# (2) Other tests that must not be run with JIT.
-
-/(a+)*zz/I
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
- aaaaaaaaaaaaaz\=find_limits
-
-!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
- /* this is a C style comment */\=find_limits
-
-/^(?>a)++/
- aa\=find_limits
- aaaaaaaaa\=find_limits
-
-/(a)(?1)++/
- aa\=find_limits
- aaaaaaaaa\=find_limits
-
-/a(?:.)*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-
-/a(?:.(*THEN))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-
-/a(?:.(*THEN:ABC))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-
-/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
- aabbccddee\=find_limits
-
-/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
- aabbccddee\=find_limits
-
-/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
- aabbccddee\=find_limits
-
-/(*LIMIT_MATCH=12bc)abc/
-
-/(*LIMIT_MATCH=4294967290)abc/
-
-/(*LIMIT_RECURSION=4294967280)abc/I
-
-/(a+)*zz/
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=match_limit=3000
-
-/(a+)*zz/
- aaaaaaaaaaaaaz\=recursion_limit=10
-
-/(*LIMIT_MATCH=3000)(a+)*zz/I
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=match_limit=60000
-
-/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
- aaaaaaaaaaaaaz
-
-/(*LIMIT_MATCH=60000)(a+)*zz/I
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=match_limit=3000
-
-/(*LIMIT_RECURSION=10)(a+)*zz/I
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=recursion_limit=1000
-
-/(*LIMIT_RECURSION=10)(*LIMIT_RECURSION=1000)(a+)*zz/I
- aaaaaaaaaaaaaz
-
-/(*LIMIT_RECURSION=1000)(a+)*zz/I
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=recursion_limit=10
-
-# These three have infinitely nested recursions.
-
-/((?2))((?1))/
- abc
-
-/((?(R2)a+|(?1)b))/
- aaaabcde
-
-/(?(R)a*(?1)|((?R))b)/
- aaaabcde
-
-# The allusedtext modifier does not work with JIT, which does not maintain
-# the leftchar/rightchar data.
-
-/abc(?=xyz)/allusedtext
- abcxyzpqr
- abcxyzpqr\=aftertext
-
-/(?<=pqr)abc(?=xyz)/allusedtext
- xyzpqrabcxyzpqr
- xyzpqrabcxyzpqr\=aftertext
-
-/a\b/
- a.\=allusedtext
- a\=allusedtext
-
-/abc\Kxyz/
- abcxyz\=allusedtext
-
-/abc(?=xyz(*ACCEPT))/
- abcxyz\=allusedtext
-
-/abc(?=abcde)(?=ab)/allusedtext
- abcabcdefg
+# These test special (mostly error) UTF features of DFA matching. They are a
+# selection of the more comprehensive tests that are run for non-DFA matching.
+# The output is different for the different widths.
+
+#subject dfa
+
+/X/utf
+ XX\x{d800}
+ XX\x{d800}\=offset=3
+ XX\x{d800}\=no_utf_check
+ XX\x{da00}
+ XX\x{da00}\=no_utf_check
+ XX\x{dc00}
+ XX\x{dc00}\=no_utf_check
+ XX\x{de00}
+ XX\x{de00}\=no_utf_check
+ XX\x{dfff}
+ XX\x{dfff}\=no_utf_check
+ XX\x{110000}
+ XX\x{d800}\x{1234}
+
+/badutf/utf
+ X\xdf
+ XX\xef
+ XXX\xef\x80
+ X\xf7
+ XX\xf7\x80
+ XXX\xf7\x80\x80
+
+/shortutf/utf
+ XX\xdf\=ph
+ XX\xef\=ph
+ XX\xef\x80\=ph
+ \xf7\=ph
+ \xf7\x80\=ph
# End of testinput14
diff --git a/testdata/testinput15 b/testdata/testinput15
index d23b127..4ea9ffd 100644
--- a/testdata/testinput15
+++ b/testdata/testinput15
@@ -1,9 +1,163 @@
-# This test is run only when JIT support is not available. It checks that an
-# attempt to use it has the expected behaviour. It also tests things that
-# are different without JIT.
+# These are:
+#
+# (1) Tests of the match-limiting features. The results are different for
+# interpretive or JIT matching, so this test should not be run with JIT. The
+# same tests are run using JIT in test 17.
-/abc/I,jit,jitverify
+# (2) Other tests that must not be run with JIT.
-/a*/I
+/(a+)*zz/I
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
+ aaaaaaaaaaaaaz\=find_limits
+
+!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
+ /* this is a C style comment */\=find_limits
+
+/^(?>a)++/
+ aa\=find_limits
+ aaaaaaaaa\=find_limits
+
+/(a)(?1)++/
+ aa\=find_limits
+ aaaaaaaaa\=find_limits
+
+/a(?:.)*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+
+/a(?:.(*THEN))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+
+/a(?:.(*THEN:ABC))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+
+/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
+ aabbccddee\=find_limits
+
+/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
+ aabbccddee\=find_limits
+
+/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
+ aabbccddee\=find_limits
+
+/(*LIMIT_MATCH=12bc)abc/
+
+/(*LIMIT_MATCH=4294967290)abc/
+
+/(*LIMIT_RECURSION=4294967280)abc/I
+
+/(a+)*zz/
+ aaaaaaaaaaaaaz
+ aaaaaaaaaaaaaz\=match_limit=3000
+
+/(a+)*zz/
+ aaaaaaaaaaaaaz\=recursion_limit=10
+
+/(*LIMIT_MATCH=3000)(a+)*zz/I
+ aaaaaaaaaaaaaz
+ aaaaaaaaaaaaaz\=match_limit=60000
+
+/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
+ aaaaaaaaaaaaaz
+
+/(*LIMIT_MATCH=60000)(a+)*zz/I
+ aaaaaaaaaaaaaz
+ aaaaaaaaaaaaaz\=match_limit=3000
+
+/(*LIMIT_RECURSION=10)(a+)*zz/I
+ aaaaaaaaaaaaaz
+ aaaaaaaaaaaaaz\=recursion_limit=1000
+
+/(*LIMIT_RECURSION=10)(*LIMIT_RECURSION=1000)(a+)*zz/I
+ aaaaaaaaaaaaaz
+
+/(*LIMIT_RECURSION=1000)(a+)*zz/I
+ aaaaaaaaaaaaaz
+ aaaaaaaaaaaaaz\=recursion_limit=10
+
+# These three have infinitely nested recursions.
+
+/((?2))((?1))/
+ abc
+
+/((?(R2)a+|(?1)b))/
+ aaaabcde
+
+/(?(R)a*(?1)|((?R))b)/
+ aaaabcde
+
+# The allusedtext modifier does not work with JIT, which does not maintain
+# the leftchar/rightchar data.
+
+/abc(?=xyz)/allusedtext
+ abcxyzpqr
+ abcxyzpqr\=aftertext
+
+/(?<=pqr)abc(?=xyz)/allusedtext
+ xyzpqrabcxyzpqr
+ xyzpqrabcxyzpqr\=aftertext
+
+/a\b/
+ a.\=allusedtext
+ a\=allusedtext
+
+/abc\Kxyz/
+ abcxyz\=allusedtext
+
+/abc(?=xyz(*ACCEPT))/
+ abcxyz\=allusedtext
+
+/abc(?=abcde)(?=ab)/allusedtext
+ abcabcdefg
+
+# These tests provoke recursion loops, which give a different error message
+# when JIT is used.
+
+/(?R)/I
+ abcd
+
+/(a|(?R))/I
+ abcd
+ defg
+
+/(ab|(bc|(de|(?R))))/I
+ abcd
+ fghi
+
+/(ab|(bc|(de|(?1))))/I
+ abcd
+ fghi
+
+/x(ab|(bc|(de|(?1)x)x)x)/I
+ xab123
+ xfghi
+
+/(?!\w)(?R)/
+ abcd
+ =abc
+
+/(?=\w)(?R)/
+ =abc
+ abcd
+
+/(?<!\w)(?R)/
+ abcd
+
+/(?<=\w)(?R)/
+ abcd
+
+/(a+|(?R)b)/
+ aaa
+ bbb
+
+/[^\xff]((?1))/BI
+ abcd
+
+# These tests don't behave the same with JIT
+
+/\w+(?C1)/BI,no_auto_possess
+ abc\=callout_fail=1
+
+/(*NO_AUTO_POSSESS)\w+(?C1)/BI
+ abc\=callout_fail=1
# End of testinput15
diff --git a/testdata/testinput16 b/testdata/testinput16
index c26dfaf..8a48207 100644
--- a/testdata/testinput16
+++ b/testdata/testinput16
@@ -1,205 +1,9 @@
-# This test is run only when JIT support is available. It checks JIT complete
-# and partial modes, and things that are different with JIT.
+# This test is run only when JIT support is not available. It checks that an
+# attempt to use it has the expected behaviour. It also tests things that
+# are different without JIT.
-#pattern jitverify
+/abc/I,jit,jitverify
-# JIT does not support this pattern (callout at start of condition).
-
-/(?(?C1)(?=a)a)/I
-
-# The following pattern cannot be compiled by JIT.
-
-/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*/I
-
-# Check that an infinite recursion loop is caught.
-
-/(?(R)a*(?1)|((?R))b)/
- aaaabcde
-
-/abcd/I
- abcd
- xyz
-
-/(*NO_JIT)abcd/I
- abcd
- xyz
-
-/abcd/
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jitfast
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jit=1
- abcd
- ab\=ps
- ab\=ph
- xyz
- xyz\=ps
-
-/abcd/jit=1,jitfast
- abcd
- ab\=ps
- ab\=ph
- xyz
- xyz\=ps
-
-/abcd/jit=2
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jit=2,jitfast
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jit=3
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jit=4
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jit=5
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jit=6
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/jit=7
- abcd
- ab\=ps
- ab\=ph
- xyz
-
-/abcd/I,jit=2
-
-/(*NO_START_OPT)a(*:m)b/mark
- a
-
-/^12345678abcd/m
- 12345678abcd
-
-# Limits tests that give different output with JIT.
-
-/(a+)*zz/I
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
- aaaaaaaaaaaaaz\=find_limits
-
-!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
- /* this is a C style comment */\=find_limits
-
-/^(?>a)++/
- aa\=find_limits
- aaaaaaaaa\=find_limits
-
-/(a)(?1)++/
- aa\=find_limits
- aaaaaaaaa\=find_limits
-
-/a(?:.)*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-
-/a(?:.(*THEN))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-
-/a(?:.(*THEN:ABC))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-
-/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
- aabbccddee\=find_limits
-
-/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
- aabbccddee\=find_limits
-
-/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
- aabbccddee\=find_limits
-
-/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast
- aabbccddee\=find_limits
- aabbccddee\=jitstack=1
-
-/(a+)*zz/
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=match_limit=3000
-
-/(*LIMIT_MATCH=3000)(a+)*zz/I
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=match_limit=60000
-
-/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
- aaaaaaaaaaaaaz
-
-/(*LIMIT_MATCH=60000)(a+)*zz/I
- aaaaaaaaaaaaaz
- aaaaaaaaaaaaaz\=match_limit=3000
-
-# These three have infinitely nested recursions.
-
-/((?2))((?1))/
- abc
-
-/((?(R2)a+|(?1)b))/
- aaaabcde
-
-/(?(R)a*(?1)|((?R))b)/
- aaaabcde
-
-# Invalid options disable JIT when called via pcre2_match(), causing the
-# match to happen via the interpreter, but for fast JIT invalid options are
-# ignored, so an unanchored match happens.
-
-/abcd/
- abcd\=anchored
- fail abcd\=anchored
-
-/abcd/jitfast
- abcd\=anchored
- succeed abcd\=anchored
-
-# Push/pop does not lose the JIT information, though jitverify applies only to
-# compilation, but serializing (save/load) discards JIT data completely.
-
-/^abc\Kdef/info,push
-#pop jitverify
- abcdef
-
-/^abc\Kdef/info,push
-#save testsaved1
-#load testsaved1
-#pop jitverify
- abcdef
-
-#load testsaved1
-#pop jit,jitverify
- abcdef
-
-# Test pattern compilation
-
-/(?:a|b|c|d|e)(?R)/jit=1
-
-/(?:a|b|c|d|e)(?R)(?R)/jit=1
-
-/(a(?:a|b|c|d|e)b){8,16}/jit=1
+/a*/I
# End of testinput16
diff --git a/testdata/testinput17 b/testdata/testinput17
index d636d38..1474eb9 100644
--- a/testdata/testinput17
+++ b/testdata/testinput17
@@ -1,95 +1,276 @@
-# This set of tests is run only with the 8-bit library. It tests the POSIX
-# interface, which is supported only with the 8-bit library. This test should
-# not be run with JIT (which is not available for the POSIX interface).
+# This test is run only when JIT support is available. It checks JIT complete
+# and partial modes, and things that are different with JIT.
+
+#pattern jitverify
+
+# JIT does not support this pattern (callout at start of condition).
+
+/(?(?C1)(?=a)a)/I
+
+# The following pattern cannot be compiled by JIT.
+
+/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*/I
+
+# Check that an infinite recursion loop is caught.
+
+/(?(R)a*(?1)|((?R))b)/
+ aaaabcde
+
+/abcd/I
+ abcd
+\= Expect no match
+ xyz
+
+/(*NO_JIT)abcd/I
+ abcd
+\= Expect no match
+ xyz
+
+/abcd/
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/jitfast
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/jit=1
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+ xyz\=ps
+
+/abcd/jit=1,jitfast
+ abcd
+ ab\=ps
+ ab\=ph
+ xyz\=ps
+\= Expect no match
+ xyz
+
+/abcd/jit=2
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/jit=2,jitfast
+ abcd
+ ab\=ps
+ ab\=ph
+ xyz
+
+/abcd/jit=3
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/jit=4
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/jit=5
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/jit=6
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/jit=7
+ abcd
+ ab\=ps
+ ab\=ph
+\= Expect no match
+ xyz
+
+/abcd/I,jit=2
+
+/(*NO_START_OPT)a(*:m)b/mark
+\= Expect no match
+ a
+
+/^12345678abcd/m
+ 12345678abcd
+
+# Limits tests that give different output with JIT.
+
+/(a+)*zz/I
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
+\= Expect no match
+ aaaaaaaaaaaaaz\=find_limits
+
+!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
+ /* this is a C style comment */\=find_limits
+
+/^(?>a)++/
+ aa\=find_limits
+ aaaaaaaaa\=find_limits
+
+/(a)(?1)++/
+ aa\=find_limits
+ aaaaaaaaa\=find_limits
+
+/a(?:.)*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
-#forbid_utf
-#pattern posix
+/a(?:.(*THEN))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+
+/a(?:.(*THEN:ABC))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+
+/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
+ aabbccddee\=find_limits
+
+/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
+ aabbccddee\=find_limits
+
+/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
+ aabbccddee\=find_limits
-# Test invalid options
+/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast
+ aabbccddee\=find_limits
+ aabbccddee\=jitstack=1
-/abc/auto_callout
+/(a+)*zz/
+\= Expect no match
+ aaaaaaaaaaaaaz
+\= Expect limit exceeded
+ aaaaaaaaaaaaaz\=match_limit=3000
-/abc/
- abc\=find_limits
+/(*LIMIT_MATCH=3000)(a+)*zz/I
+ aaaaaaaaaaaaaz
+ aaaaaaaaaaaaaz\=match_limit=60000
-/abc/
- abc\=partial_hard
+/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
+ aaaaaaaaaaaaaz
-# Real tests
+/(*LIMIT_MATCH=60000)(a+)*zz/I
+\= Expect no match
+ aaaaaaaaaaaaaz
+\= Expect limit exceeded
+ aaaaaaaaaaaaaz\=match_limit=3000
-/abc/
+# These three have infinitely nested recursions.
+
+/((?2))((?1))/
abc
- *** Failers
-/^abc|def/
+/((?(R2)a+|(?1)b))/
+ aaaabcde
+
+/(?(R)a*(?1)|((?R))b)/
+ aaaabcde
+
+# Invalid options disable JIT when called via pcre2_match(), causing the
+# match to happen via the interpreter, but for fast JIT invalid options are
+# ignored, so an unanchored match happens.
+
+/abcd/
+ abcd\=anchored
+\= Expect no match
+ fail abcd\=anchored
+
+/abcd/jitfast
+ abcd\=anchored
+ succeed abcd\=anchored
+
+# Push/pop does not lose the JIT information, though jitverify applies only to
+# compilation, but serializing (save/load) discards JIT data completely.
+
+/^abc\Kdef/info,push
+#pop jitverify
abcdef
- abcdef\=notbol
-/.*((abc)$|(def))/
- defabc
- defabc\=noteol
+/^abc\Kdef/info,push
+#save testsaved1
+#load testsaved1
+#pop jitverify
+ abcdef
+
+#load testsaved1
+#pop jit,jitverify
+ abcdef
+
+# Test pattern compilation
-/the quick brown fox/
- the quick brown fox
- *** Failers
- The Quick Brown Fox
+/(?:a|b|c|d|e)(?R)/jit=1
-/the quick brown fox/i
- the quick brown fox
- The Quick Brown Fox
+/(?:a|b|c|d|e)(?R)(?R)/jit=1
-/abc.def/
- *** Failers
- abc\ndef
+/(a(?:a|b|c|d|e)b){8,16}/jit=1
-/abc$/
- abc
- abc\n
+/(?:|a|){100}x/jit=1
-/(abc)\2/
+# These tests provoke recursion loops, which give a different error message
+# when JIT is used.
-/(abc\1)/
- abc
+/(?R)/I
+ abcd
-/a*(b+)(z)(z)/
- aaaabbbbzzzz
- aaaabbbbzzzz\=ovector=0
- aaaabbbbzzzz\=ovector=1
- aaaabbbbzzzz\=ovector=2
+/(a|(?R))/I
+ abcd
+ defg
-/ab.cd/
- ab-cd
- ab=cd
- ** Failers
- ab\ncd
+/(ab|(bc|(de|(?R))))/I
+ abcd
+ fghi
-/ab.cd/s
- ab-cd
- ab=cd
- ab\ncd
+/(ab|(bc|(de|(?1))))/I
+ abcd
+ fghi
-/a(b)c/no_auto_capture
- abc
+/x(ab|(bc|(de|(?1)x)x)x)/I
+ xab123
+ xfghi
-/a(?P<name>b)c/no_auto_capture
- abc
+/(?!\w)(?R)/
+ abcd
+ =abc
-/a?|b?/
- abc
- ** Failers
- ddd\=notempty
+/(?=\w)(?R)/
+ =abc
+ abcd
+
+/(?<!\w)(?R)/
+ abcd
+
+/(?<=\w)(?R)/
+ abcd
+
+/(a+|(?R)b)/
+ aaa
+ bbb
-/\w+A/
- CDAAAAB
+/[^\xff]((?1))/BI
+ abcd
-/\w+A/ungreedy
- CDAAAAB
-
-/\Biss\B/I,aftertext
- Mississippi
+/(x(?1)){4}/
-/abc/\
+/[axm]{7}/
-"(?(?C)"
+/(.|.)*?bx/
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax
-# End of testdata/testinput16
+# End of testinput17
diff --git a/testdata/testinput18 b/testdata/testinput18
index a517905..c75b842 100644
--- a/testdata/testinput18
+++ b/testdata/testinput18
@@ -1,17 +1,101 @@
# This set of tests is run only with the 8-bit library. It tests the POSIX
-# interface with UTF/UCP support, which is supported only with the 8-bit
-# library. This test should not be run with JIT (which is not available for the
-# POSIX interface).
+# interface, which is supported only with the 8-bit library. This test should
+# not be run with JIT (which is not available for the POSIX interface).
+#forbid_utf
#pattern posix
-/a\x{1234}b/utf
- a\x{1234}b
+# Test invalid options
-/\w/
- +++\x{c2}
+/abc/auto_callout
-/\w/ucp
- +++\x{c2}
-
-# End of testdata/testinput17
+/abc/
+ abc\=find_limits
+
+/abc/
+ abc\=partial_hard
+
+# Real tests
+
+/abc/
+ abc
+
+/^abc|def/
+ abcdef
+ abcdef\=notbol
+
+/.*((abc)$|(def))/
+ defabc
+ defabc\=noteol
+
+/the quick brown fox/
+ the quick brown fox
+\= Expect no match
+ The Quick Brown Fox
+
+/the quick brown fox/i
+ the quick brown fox
+ The Quick Brown Fox
+
+/(*LF)abc.def/
+\= Expect no match
+ abc\ndef
+
+/(*LF)abc$/
+ abc
+ abc\n
+
+/(abc)\2/
+
+/(abc\1)/
+\= Expect no match
+ abc
+
+/a*(b+)(z)(z)/
+ aaaabbbbzzzz
+ aaaabbbbzzzz\=ovector=0
+ aaaabbbbzzzz\=ovector=1
+ aaaabbbbzzzz\=ovector=2
+
+/(*ANY)ab.cd/
+ ab-cd
+ ab=cd
+\= Expect no match
+ ab\ncd
+
+/ab.cd/s
+ ab-cd
+ ab=cd
+ ab\ncd
+
+/a(b)c/no_auto_capture
+ abc
+
+/a(?P<name>b)c/no_auto_capture
+ abc
+
+/a?|b?/
+ abc
+\= Expect no match
+ ddd\=notempty
+
+/\w+A/
+ CDAAAAB
+
+/\w+A/ungreedy
+ CDAAAAB
+
+/\Biss\B/I,aftertext
+ Mississippi
+
+/abc/\
+
+"(?(?C)"
+
+/abcd/substitute_extended
+
+/\[A]{1000000}**/expand,regerror_buffsize=31
+
+/\[A]{1000000}**/expand,regerror_buffsize=32
+
+# End of testdata/testinput18
diff --git a/testdata/testinput19 b/testdata/testinput19
index 155fd13..7a90f1a 100644
--- a/testdata/testinput19
+++ b/testdata/testinput19
@@ -1,62 +1,18 @@
-# This set of tests exercises the serialization/deserialization functions in
-# the library. It does not use UTF or JIT.
-
-#forbid_utf
-
-# Compile several patterns, push them onto the stack, and then write them
-# all to a file.
-
-#pattern push
-
-/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
- (?(DEFINE)
- (?<NAME_PAT>[a-z]+)
- (?<ADDRESS_PAT>\d+)
- )/x
-/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
-
-#save testsaved1
-
-# Do it again for some more patterns.
-
-/(*MARK:A)(*SKIP:B)(C|X)/mark
-/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
-
-#save testsaved2
-#pattern -push
-
-# Reload the patterns, then pop them one by one and check them.
-
-#load testsaved1
-#load testsaved2
-
-#pop info
- foofoo
- barbar
-
-#pop mark
- C
- D
-
-#pop
- AmanaplanacanalPanama
-
-#pop info
- metcalfe 33
+# This set of tests is run only with the 8-bit library. It tests the POSIX
+# interface with UTF/UCP support, which is supported only with the 8-bit
+# library. This test should not be run with JIT (which is not available for the
+# POSIX interface).
-# Check for an error when different tables are used.
-
-/abc/push,tables=1
-/xyz/push,tables=2
-#save testsaved1
+#pattern posix
-#pop
- xyz
+/a\x{1234}b/utf
+ a\x{1234}b
-#pop
- abc
+/\w/
+\= Expect no match
+ +++\x{c2}
-#pop should give an error
- pqr
-
-# End of testinput19
+/\w/ucp
+ +++\x{c2}
+
+# End of testdata/testinput19
diff --git a/testdata/testinput2 b/testdata/testinput2
index e0e149f..071cca1 100644
--- a/testdata/testinput2
+++ b/testdata/testinput2
@@ -9,6 +9,7 @@
# test 5.
#forbid_utf
+#newline_default lf any anycrlf
# Test binary zeroes in the pattern
@@ -30,14 +31,14 @@
abc
defabc
abc\=anchored
- *** Failers
+\= Expect no match
defabc\=anchored
ABC
/^abc/I
abc
abc\=anchored
- *** Failers
+\= Expect no match
defabc
defabc\=anchored
@@ -51,7 +52,7 @@
/^abc$/I
abc
- *** Failers
+\= Expect no match
def\nabc
/ab\idef/
@@ -128,7 +129,7 @@
/abc$/I,dollar_endonly
abc
- *** Failers
+\= Expect no match
abc\n
abc\ndef
@@ -140,7 +141,7 @@
/the quick brown fox/I,anchored
the quick brown fox
- *** Failers
+\= Expect no match
this is a line with the quick brown fox
/ab(?z)cd/
@@ -184,7 +185,7 @@
/(?<!bar|cattle)foo/I
foo
catfoo
- *** Failers
+\= Expect no match
the barfoo
and cattlefoo
@@ -239,7 +240,7 @@
/a$/I
a
a\n
- *** Failers
+\= Expect no match
a\=noteol
a\n\=noteol
@@ -247,7 +248,7 @@
a
a\n
a\n\=noteol
- *** Failers
+\= Expect no match
a\=noteol
/\Aabc/Im
@@ -265,14 +266,14 @@
/(?<=foo\n)^bar/Im
foo\nbarbar
- ***Failers
+\= Expect no match
rhubarb
barbell
abc\nbarton
/^(?<=foo\n)bar/Im
foo\nbarbar
- ***Failers
+\= Expect no match
rhubarb
barbell
abc\nbarton
@@ -280,7 +281,7 @@
/(?>^abc)/Im
abc
def\nabc
- *** Failers
+\= Expect no match
defabc
/(?<=ab(c+)d)ef/
@@ -294,7 +295,7 @@
/(?<=bullock|donkey)-cart/I
the bullock-cart
a donkey-cart race
- *** Failers
+\= Expect no match
cart
horse-and-cart
@@ -311,7 +312,7 @@
zZZ
bZZ
BZZ
- *** Failers
+\= Expect no match
ZZ
abXYZZ
zzz
@@ -320,30 +321,31 @@
/(?<!(foo)a)bar/I
bar
foobbar
- *** Failers
+\= Expect no match
fooabar
-/This one is here because Perl behaves differently; see also the following/I
+# This one is here because Perl behaves differently; see also the following.
/^(a\1?){4}$/I
+\= Expect no match
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./
+# 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
+\= Expect no match
xa=xaaa
/^(xa|=?\1a)+$/
xa=xaa
- ** Failers
+\= Expect no match
xa=xaaa
-/These are syntax tests from Perl 5.005/I
+# These are syntax tests from Perl 5.005
/a[b-a]/
@@ -466,7 +468,7 @@
/\Biss\B/Ig,aftertext
Mississippi
- *** Failers
+\= Expect no match
Mississippi\=anchored
/(?<=[Ms])iss/Ig,aftertext
@@ -496,6 +498,9 @@
/^ab\n/Igm,aftertext
ab\nab\ncd
+/^/gm,newline=any
+ a\rb\nc\r\nxyz\=aftertext
+
/abc/I
/abc|bac/I
@@ -583,14 +588,14 @@
b
ab
\
- *** Failers
+\= Expect no match
\=notempty
/|-/I
abcd
-abc
ab-c\=notempty
- *** Failers
+\= Expect no match
abc\=notempty
/^.?abcd/I
@@ -610,7 +615,7 @@
(ab(xycd)pqr
() abc ()
12(abcde(fsh)xyz(foo(bar))lmno)89
- *** Failers
+\= Expect no match
abcd
abcd)
(abcd
@@ -624,7 +629,7 @@
(ab(xy)cd)
(a(b(c)d)e)
((ab))
- *** Failers
+\= Expect no match
()
/\( (?: (?>[^()]+) | (?R) )? \) /Ix
@@ -720,7 +725,7 @@
/((?-i)[[:lower:]])[[:lower:]]/Ii
ab
aB
- *** Failers
+\= Expect no match
Ab
AB
@@ -796,13 +801,13 @@
/a(?i)b/IB
ab
aB
- *** Failers
+\= Expect no match
AB
/(a(?i)b)/IB
ab
aB
- *** Failers
+\= Expect no match
AB
/ (?i)abc/IBx
@@ -832,7 +837,7 @@
/\Q\Eabc/IB
/x*+\w/IB
- *** Failers
+\= Expect no match
xxxxx
/x?+/IB
@@ -851,12 +856,12 @@
/^(\w++|\s++)*$/I
now is the time for all good men to come to the aid of the party
- *** Failers
+\= Expect no match
this is not a line with only words and spaces!
/(\d++)(\w)/I
12345a
- *** Failers
+\= Expect no match
12345+
/a++b/I
@@ -874,7 +879,7 @@
/\(([^()]++|\([^()]+\))+\)/I
(abc)
(abc(def)xyz)
- *** Failers
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(abc){1,3}+/IB
@@ -937,7 +942,7 @@
<abc <def> hij>
<abc<>def>
<abc<>
- *** Failers
+\= Expect no match
<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/IB
@@ -1008,7 +1013,7 @@
/^a/Im
abcde
xy\nabc
- *** Failers
+\= Expect no match
xyabc
/c|abc/I
@@ -1020,7 +1025,7 @@
/abc(?C)def/I
abcdef
1234abcdef
- *** Failers
+\= Expect no match
abcxyz
abcxyzf
@@ -1029,12 +1034,12 @@
/(?C1)\dabc(?C2)def/I
1234abcdef
- *** Failers
+\= Expect no match
abcdef
/(?C1)\dabc(?C2)def/I
1234abcdef
- *** Failers
+\= Expect no match
abcdef
/(?C255)ab/I
@@ -1046,20 +1051,18 @@
/(?C12vr)x/I
/abc(?C)def/I
- *** Failers
\x83\x0\x61bcdef
/(abc)(?C)de(?C1)f/I
123abcdef
123abcdef\=callout_capture
123abcdefC-\=callout_none
- *** Failers
+\= Expect no match
123abcdef\=callout_fail=1
/(?C0)(abc(?C1))*/I
abcabcabc
abcabc\=callout_fail=1:3
- *** Failers
abcabcabc\=callout_fail=1:3
/(\d{3}(?C))*/I
@@ -1083,9 +1086,11 @@
abcxyz\=callout_capture
/a(b+)(c*)(?C1)/I
+\= Expect no match
abbbbbccc\=callout_data=1
/a(b+?)(c*?)(?C1)/I
+\= Expect no match
abbbbbccc\=callout_data=1
/(?C)abc/I
@@ -1094,30 +1099,20 @@
/(?C)a|b/I
-/(?R)/I
-
-/(a|(?R))/I
-
-/(ab|(bc|(de|(?R))))/I
-
/x(ab|(bc|(de|(?R))))/I
xab
xbc
xde
xxab
xxxab
- *** Failers
+\= Expect no match
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)
+\= Expect no match)
a(b(c)d
/^>abc>([^()]|\((?1)*\))*<xyz<$/I
@@ -1133,13 +1128,13 @@
12
(((2+2)*-3)-7)
-12
- *** Failers
+\= Expect no match
((2+2)*-3)-7)
/^(x(y|(?1){2})z)/I
xyz
xxyzxyzz
- *** Failers
+\= Expect no match
xxyzz
xxyzxyzxyzz
@@ -1150,7 +1145,7 @@
<abc <def> hij>
<abc<>def>
<abc<>
- *** Failers
+\= Expect no match
<abc
/(?1)/I
@@ -1183,7 +1178,7 @@
Satan, oscillate my metallic sonatas!
A man, a plan, a canal: Panama!
Able was I ere I saw Elba.
- *** Failers
+\= Expect no match
The quick brown fox
/((?(R)a|b))\1(?1)?/I
@@ -1224,6 +1219,7 @@
aaabbb
aaabbb\=callout_data=0
aaabbb\=callout_data=1
+\= Expect no match
aaabbb\=callout_data=-1
/ab(?P<one>cd)ef(?P<two>gh)/I
@@ -1246,7 +1242,7 @@
"\[((?P<elem>\d+)(,(?P>elem))*)\]"I
[10,20,30,5,5,4,4,2,43,23,4234]
- *** Failers
+\= Expect no match
[]
"\[((?P<elem>\d+)(,(?P>elem))*)?\]"I
@@ -1259,7 +1255,11 @@
/(a(b(?2)c)){0,2}/IB
-/[ab]{1}+/IB
+/[ab]{1}+/B
+
+/()(?1){1}/B
+
+/()(?1)/B
/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/Ii
Baby Bjorn Active Carrier - With free SHIPPING!!
@@ -1275,6 +1275,7 @@
/abcde/IB,auto_callout
abcde
+\= Expect no match
abcdfe
/a*b/IB,auto_callout
@@ -1290,18 +1291,19 @@
/a+b/IB,auto_callout
ab
aaaab
+\= Expect no match
aaaacb
/(abc|def)x/IB,auto_callout
abcx
defx
- ** Failers
+\= Expect no match
abcdefzx
/(abc|def)x/IB,auto_callout
abcx
defx
- ** Failers
+\= Expect no match
abcdefzx
/(ab|cd){3,4}/I,auto_callout
@@ -1310,9 +1312,11 @@
abcdcdcdcdcd
/([ab]{,4}c|xy)/IB,auto_callout
+\= Expect no match
Note: that { does NOT introduce a quantifier
/([ab]{,4}c|xy)/IB,auto_callout
+\= Expect no match
Note: that { does NOT introduce a quantifier
/([ab]{1,4}c|xy){4,5}?123/IB,auto_callout
@@ -1322,7 +1326,7 @@
ab cd\=offset=1
/\b.*/Is
- ab cd\=offset=1
+ ab cd\=startoffset=1
/(?!.bcd).*/I
Xbcd12345
@@ -1333,7 +1337,7 @@
abcd\=ps
abcde\=ps
the quick brown abc\=ps
- ** Failers\=ps
+\= Expect no match\=ps
the quick brown abxyz fox\=ps
"^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\d\d$"I
@@ -1348,7 +1352,7 @@
02/\=ps
02/0\=ps
02/1\=ps
- ** Failers\=ps
+\= Expect no match\=ps
\=ps
123\=ps
33/4/04\=ps
@@ -1382,7 +1386,7 @@
1234X
12345\=ps
12345X
- *** Failers
+\= Expect no match
1X
123456\=ps
@@ -1395,17 +1399,17 @@
/line\nbreak/I,firstline
this is a line\nbreak
- ** Failers
+\= Expect no match
line one\nthis is a line\nbreak in the second line
/line\nbreak/Im,firstline
this is a line\nbreak
- ** Failers
+\= Expect no match
line one\nthis is a line\nbreak in the second line
/(?i)(?-i)AbCd/I
AbCd
- ** Failers
+\= Expect no match
abcd
/a{11111111111111111111}/I
@@ -1460,7 +1464,6 @@
/^((?P<A>a1)|(?P<A>a2)b)/I,dupnames
a1b\=copy=A
a2b\=copy=A
- ** Failers
a1b\=copy=Z,copy=A
/(?|(?<a>)(?<b>)(?<a>)|(?<a>)(?<b>)(?<a>))/I,dupnames
@@ -1478,7 +1481,6 @@
/^((?P<A>a1)|(?P<A>a2)b)/I,dupnames
a1b\=get=A
a2b\=get=A
- ** Failers
a1b\=get=Z,get=A
/^(?P<A>a)(?P<A>b)/I,dupnames
@@ -1497,9 +1499,9 @@
/^(?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
+# In this next test, J is not set at the outer level; consequently it isn't set
+# in the pattern's options; consequently pcre2_substring_get_byname() produces
+# a random value.
/^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<C>d)/I
a bc d\=copy=A,copy=B,copy=C
@@ -1507,7 +1509,7 @@ a random value. /Ix
/^(?P<A>a)?(?(A)a|b)/I
aabc
bc
- ** Failers
+\= Expect no match
abc
/(?:(?(ZZ)a|b)(?P<ZZ>X))+/I
@@ -1539,7 +1541,7 @@ a random value. /Ix
/^abc/Im,newline=lf
xyz\nabc
xyz\r\nabc
- ** Failers
+\= Expect no match
xyz\rabc
xyzabc\r
xyzabc\rpqr
@@ -1548,13 +1550,13 @@ a random value. /Ix
/^abc/Im,newline=crlf
xyz\r\nabclf>
- ** Failers
+\= Expect no match
xyz\nabclf
xyz\rabclf
/^abc/Im,newline=cr
xyz\rabc
- ** Failers
+\= Expect no match
xyz\nabc
xyz\r\nabc
@@ -1612,7 +1614,7 @@ a random value. /Ix
/^a+A\d/IB
aaaA5
- ** Failers
+\= Expect no match
aaaa5
/^a*A\d/IBi
@@ -1784,7 +1786,7 @@ a random value. /Ix
/^(?:(?(ZZ)a|b)(?<ZZ>X))+/
bXaX
bXbX
- ** Failers
+\= Expect no match
aXaX
aXbX
@@ -1805,14 +1807,14 @@ a random value. /Ix
/^((?(abc)a|b)(?<abc>x|y))+/
bxay
bxby
- ** Failers
+\= Expect no match
axby
/^(((?P=abc)|X)(?<abc>x|y))+/
XxXxxx
XxXyyx
XxXyxx
- ** Failers
+\= Expect no match
x
/^(?1)(abc)/
@@ -1845,7 +1847,7 @@ a random value. /Ix
Satan, oscillate my metallic sonatas!
A man, a plan, a canal: Panama!
Able was I ere I saw Elba.
- *** Failers
+\= Expect no match
The quick brown fox
/(?=(\w+))\1:/I
@@ -1856,14 +1858,14 @@ a random value. /Ix
/(?'abc'a|b)(?<abc>d|e)\k<abc>{2}/dupnames
adaa
- ** Failers
+\= Expect no match
addd
adbb
/(?'abc'a|b)(?<abc>d|e)(?&abc){2}/dupnames
bdaa
bdab
- ** Failers
+\= Expect no match
bddd
/(?(<bc))/
@@ -1885,26 +1887,27 @@ a random value. /Ix
/(?(DEFINE) abc) xyz/Ix
/(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=ovector=0
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\=ovector=0
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=ovector=0
/^a.b/newline=lf
a\rb
- ** Failers
+\= Expect no match
a\nb
/^a.b/newline=cr
a\nb
- ** Failers
+\= Expect no match
a\rb
/^a.b/newline=anycrlf
a\x85b
- ** Failers
+\= Expect no match
a\rb
/^a.b/newline=any
- ** Failers
+\= Expect no match
a\nb
a\rb
a\x85b
@@ -1922,7 +1925,7 @@ a random value. /Ix
a\x0bb
a\x0cb
a\x85b
- ** Failers
+\= Expect no match
a\n\rb
/^a\R*b/bsr=unicode
@@ -1945,7 +1948,7 @@ a random value. /Ix
a\x85b
a\n\rb
a\n\r\x85\x0cb
- ** Failers
+\= Expect no match
ab
/^a\R{1,3}b/bsr=unicode
@@ -1956,7 +1959,7 @@ a random value. /Ix
a\r\n\r\n\r\nb
a\n\r\n\rb
a\n\n\r\nb
- ** Failers
+\= Expect no match
a\n\n\n\rb
a\r
@@ -1980,12 +1983,14 @@ a random value. /Ix
123axbaxbaxbx456
/(abc)(?i:(?1))/
- defabcabcxyz
- DEFabcABCXYZ
+ defabcabcxyz
+\= Expect no match
+ DEFabcABCXYZ
/(abc)(?:(?i)(?1))/
- defabcabcxyz
- DEFabcABCXYZ
+ defabcabcxyz
+\= Expect no match
+ DEFabcABCXYZ
/^(a)\g-2/
@@ -1999,24 +2004,24 @@ a random value. /Ix
/^a.b/newline=lf
a\rb
- *** Failers
+\= Expect no match
a\nb
/.+foo/
afoo
- ** Failers
+\= Expect no match
\r\nfoo
\nfoo
/.+foo/newline=crlf
afoo
\nfoo
- ** Failers
+\= Expect no match
\r\nfoo
/.+foo/newline=any
afoo
- ** Failers
+\= Expect no match
\nfoo
\r\nfoo
@@ -2028,7 +2033,7 @@ a random value. /Ix
/^$/gm,newline=any
abc\r\rxyz
abc\n\rxyz
- ** Failers
+\= Expect no match
abc\r\nxyz
/(?m)^$/g,newline=any,aftertext
@@ -2045,7 +2050,7 @@ a random value. /Ix
/^X/m
XABC
- ** Failers
+\= Expect no match
XABC\=notbol
/(ab|c)(?-1)/B
@@ -2053,7 +2058,7 @@ a random value. /Ix
/xy(?+1)(abc)/B
xyabcabc
- ** Failers
+\= Expect no match
xyabc
/x(?-0)y/
@@ -2067,13 +2072,13 @@ a random value. /Ix
/^(abc)?(?(-1)X|Y)/B
abcX
Y
- ** Failers
+\= Expect no match
abcY
/^((?(+1)X|Y)(abc))+/B
YabcXabc
YabcXabcXabc
- ** Failers
+\= Expect no match
XabcXabc
/(?(-1)a)/B
@@ -2088,7 +2093,7 @@ a random value. /Ix
/(?<A>tom|bon)-\k{A}/
tom-tom
bon-bon
- ** Failers
+\= Expect no match
tom-bon
/\g{A/
@@ -2106,7 +2111,7 @@ a random value. /Ix
xxyzx
/\H++X/B
- ** Failers
+\= Expect no match
XXXX
/\H+\hY/B
@@ -2162,21 +2167,27 @@ a random value. /Ix
/A(*PRUNE)B(*SKIP)C(*THEN)D(*COMMIT)E(*F)F(*FAIL)G(?!)H(*ACCEPT)I/B
/^a+(*FAIL)/auto_callout
+\= Expect no match
aaaaaa
/a+b?c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
/a+b?(*PRUNE)c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
/a+b?(*COMMIT)c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
/a+b?(*SKIP)c+(*FAIL)/auto_callout
+\= Expect no match
aaabcccaaabccc
/a+b?(*THEN)c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
/a(*MARK)b/
@@ -2190,6 +2201,7 @@ a random value. /Ix
/(?1)\c[/
/.+A/newline=crlf
+\= Expect no match
\r\nA
/\nA/newline=crlf
@@ -2205,33 +2217,33 @@ a random value. /Ix
/(*CR)a.b/
a\nb
- ** Failers
+\= Expect no match
a\rb
/(*CR)a.b/newline=lf
a\nb
- ** Failers
+\= Expect no match
a\rb
/(*LF)a.b/newline=CRLF
a\rb
- ** Failers
+\= Expect no match
a\nb
/(*CRLF)a.b/
a\rb
a\nb
- ** Failers
+\= Expect no match
a\r\nb
/(*ANYCRLF)a.b/newline=CR
- ** Failers
+\= Expect no match
a\rb
a\nb
a\r\nb
/(*ANY)a.b/newline=cr
- ** Failers
+\= Expect no match
a\rb
a\nb
a\r\nb
@@ -2250,7 +2262,7 @@ a random value. /Ix
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x85b
a\x0bb
@@ -2265,7 +2277,7 @@ a random value. /Ix
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x85b
a\x0bb
@@ -2280,7 +2292,7 @@ a random value. /Ix
a\r\n\nb
a\n\r\rb
a\r\n\r\n\r\n\r\nb
- ** Failers
+\= Expect no match
a\x85\x85b
a\x0b\x0bb
@@ -2290,7 +2302,7 @@ a random value. /Ix
a\r\n\n\r\rb
a\x85\x85b
a\x0b\x0bb
- ** Failers
+\= Expect no match
a\r\r\r\r\rb
/(*BSR_ANYCRLF)a\Rb/I
@@ -2343,14 +2355,6 @@ a random value. /Ix
/(?P>)/
-/(?!\w)(?R)/
-
-/(?=\w)(?R)/
-
-/(?<!\w)(?R)/
-
-/(?<=\w)(?R)/
-
/[[:foo:]]/
/[[:1234:]]/
@@ -2374,10 +2378,11 @@ a random value. /Ix
/^(?+1)(?<a>x|y){0}z/
xzxx
yzyy
- ** Failers
+\= Expect no match
xxz
/(\3)(\1)(a)/
+\= Expect no match
cat
/(\3)(\1)(a)/alt_bsux,allow_empty_class,match_unset_backref,dupnames
@@ -2397,12 +2402,12 @@ a random value. /Ix
/(?1)[]a()b](abc)/
abcbabc
- ** Failers
+\= Expect no match
abcXabc
/(?1)[^]a()b](abc)/
abcXabc
- ** Failers
+\= Expect no match
abcbabc
/(?2)[]a()b](abc)(xyz)/
@@ -2419,27 +2424,27 @@ a random value. /Ix
/a[^]b/
/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
+\= Expect no match
ab
/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
+\= Expect no match
ab
/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
+\= Expect no match
ab
/a[^]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aXb
a\nb
- ** Failers
+\= Expect no match
ab
/a[^]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aXb
a\nX\nXb
- ** Failers
+\= Expect no match
ab
/a(?!)b/B
@@ -2462,13 +2467,13 @@ a random value. /Ix
/xyz/auto_callout
xyz
abcxyz
- ** Failers
+\= Expect no match
abc
abcxypqr
/xyz/auto_callout,no_start_optimize
abcxyz
- ** Failers
+\= Expect no match
abc
abcxypqr
@@ -2624,10 +2629,12 @@ a random value. /Ix
++++Z1234\=ps
/Z(*F)/
+\= Expect no match
Z\=ps
ZA\=ps
/Z(?!)/
+\= Expect no match
Z\=ps
ZA\=ps
@@ -2680,14 +2687,14 @@ a random value. /Ix
abcdef
abcdef\=notempty_atstart
xyzabcdef\=notempty_atstart
- ** Failers
+\= Expect no match
abcdef\=notempty
xyzabcdef\=notempty
/^(?:(?=abc)|abc\K)/aftertext,startchar
abcdef
abcdef\=notempty_atstart
- ** Failers
+\= Expect no match
abcdef\=notempty
/a?b?/aftertext
@@ -2696,13 +2703,13 @@ a random value. /Ix
xyzabc\=notempty
xyzabc\=notempty_atstart
xyz\=notempty_atstart
- ** Failers
+\= Expect no match
xyz\=notempty
/^a?b?/aftertext
xyz
xyzabc
- ** Failers
+\= Expect no match
xyzabc\=notempty
xyzabc\=notempty_atstart
xyz\=notempty_atstart
@@ -2750,7 +2757,7 @@ a random value. /Ix
/(?i:\g<name>)(?-i:(?<name>a))/
XaaX
- ** Failers
+\= Expect no match
XAAX
/(?-i:\g<+1>)(?i:(a))/
@@ -2835,20 +2842,20 @@ a random value. /Ix
(?('quote')[a-z]+|[0-9]+)/Ix,dupnames
a"aaaaa
b"aaaaa
- ** Failers
+\= Expect no match
b"11111
a"11111
/^(?|(a)(b)(c)(?<D>d)|(?<D>e)) (?('D')X|Y)/IBx,dupnames
abcdX
eX
- ** Failers
+\= Expect no match
abcdY
ey
/(?<A>a) (b)(c) (?<A>d (?(R&A)$ | (?4)) )/IBx,dupnames
abcdd
- ** Failers
+\= Expect no match
abcdde
/abcd*/
@@ -2882,7 +2889,7 @@ a random value. /Ix
XABD
BAD
ABXABD
- ** Failers
+\= Expect no match
ABX
BAXBAD
@@ -2893,6 +2900,7 @@ a random value. /Ix
cat
/(\3)(\1)(a)/I
+\= Expect no match
cat
/i(?(DEFINE)(?<s>a))/I
@@ -2905,7 +2913,7 @@ a random value. /Ix
XabX
XAbX
CcC
- ** Failers
+\= Expect no match
XABX
/(?i)a(?s)b|c/B
@@ -2919,13 +2927,15 @@ a random value. /Ix
/^(?&t)*(?(DEFINE)(?<t>.))$/B
-/ -- This one is here because Perl gives the match as "b" rather than "ab". I
- believe this to be a Perl bug. --/
+# This one is here because Perl gives the match as "b" rather than "ab". I
+# believe this to be a Perl bug.
/(?>a\Kb)z|(ab)/
ab\=startchar
/(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/
+ abcd
+ 0abc
/abc(*MARK:)pqr/
@@ -2937,6 +2947,7 @@ a random value. /Ix
# bug because replacing the B in the pattern by (B|D) does make it fail.
/A(*COMMIT)B/aftertext,mark
+\= Expect no match
ACABX
# These should be different, but in Perl they are not, which I think
@@ -2946,13 +2957,14 @@ a random value. /Ix
AC
/A(*PRUNE)B|A(*PRUNE)C/mark
+\= Expect no match
AC
# Mark names can be duplicated. Perl doesn't give a mark for this one,
# though PCRE2 does.
/^A(*:A)B|^X(*:A)Y/mark
- ** Failers
+\= Expect no match
XAQQ
# COMMIT at the start of a pattern should be the same as an anchor. Perl
@@ -2963,16 +2975,19 @@ a random value. /Ix
ABCDEFG
/(*COMMIT)ABC/no_start_optimize
- ** Failers
+\= Expect no match
DEFGABC
/^(ab (c+(*THEN)cd) | xyz)/x
+\= Expect no match
abcccd
/^(ab (c+(*PRUNE)cd) | xyz)/x
+\= Expect no match
abcccd
/^(ab (c+(*FAIL)cd) | xyz)/x
+\= Expect no match
abcccd
# Perl gets some of these wrong
@@ -2991,20 +3006,20 @@ a random value. /Ix
/A\NB./B
ACBD
- *** Failers
+\= Expect no match
A\nB
ACB\n
/A\NB./Bs
ACBD
ACB\n
- *** Failers
+\= Expect no match
A\nB
/A\NB/newline=crlf
A\nB
A\rB
- ** Failers
+\= Expect no match
A\r\nB
/\R+b/B
@@ -3033,6 +3048,7 @@ a random value. /Ix
X\x0d\x0a
/X\H++\R/B
+\= Expect no match
X\x0d\x0a
/(?<=abc)def/
@@ -3067,17 +3083,21 @@ a random value. /Ix
abc\=ph
/abc\B/
- abc
abc\=ps
abc\=ph
+\= Expect no match
+ abc
/.+/
+\= Bad offsets
+ abc\=offset=4
+ abc\=offset=-4
+\= Valid data
abc\=offset=0
abc\=offset=1
abc\=offset=2
+\= Expect no match
abc\=offset=3
- abc\=offset=4
- abc\=offset=-4
/^\cģ/
@@ -3116,12 +3136,12 @@ a random value. /Ix
/^(a)*+(\w)/
aaaaX
- ** Failers
+\= Expect no match
aaaa
/^(?:a)*+(\w)/
aaaaX
- ** Failers
+\= Expect no match
aaaa
/(a)++1234/IB
@@ -3187,7 +3207,7 @@ a random value. /Ix
/(?1)(?:(b(*ACCEPT))){0}c/
bc
- ** Failers
+\= Expect no match
b
/(?1)(?:((*ACCEPT))){0}c/
@@ -3195,18 +3215,22 @@ a random value. /Ix
c\=notempty
/^.*?(?(?=a)a|b(*THEN)c)/
+\= Expect no match
ba
/^.*?(?(?=a)a|bc)/
ba
/^.*?(?(?=a)a(*THEN)b|c)/
+\= Expect no match
ac
/^.*?(?(?=a)a(*THEN)b)c/
+\= Expect no match
ac
/^.*?(a(*THEN)b)c/
+\= Expect no match
aabc
/^.*? (?1) c (?(DEFINE)(a(*THEN)b))/x
@@ -3223,9 +3247,11 @@ a random value. /Ix
/(*MARK:A)(*SKIP:B)(C|X)/mark
C
+\= Expect no match
D
/(*:A)A+(*SKIP:A)(B|Z)/mark
+\= Expect no match
AAAC
# ----------------------------
@@ -3240,6 +3266,7 @@ a random value. /Ix
/(?>(*ACCEPT)b)c/
c
+\= Expect no match
c\=notempty
/(?:(?>(a)))+a%/allaftertext
@@ -3302,14 +3329,13 @@ a random value. /Ix
/[:a[:abc]b:]/B
-/(a+|(?R)b)/
-
/^(a(*:A)(d|e(*:B))z|aeq)/auto_callout
adz
aez
aeqwerty
/.(*F)/
+\= Expect no match
abc\=ph
/\btype\b\W*?\btext\b\W*?\bjavascript\b/I
@@ -3323,9 +3349,10 @@ a random value. /Ix
ax
'a*(*ACCEPT)b'aftertext
- \=notempty_atstart
abc\=notempty_atstart
bbb\=notempty_atstart
+\= Expect no match
+ \=notempty_atstart
/(*ACCEPT)a/I,aftertext
bax
@@ -3335,7 +3362,7 @@ a random value. /Ix
/^(?>a+)(?>(z+))\w/B
aaaazzzzb
- ** Failers
+\= Expect no match
aazz
/(.)(\1|a(?2))/
@@ -3345,6 +3372,7 @@ a random value. /Ix
cbbbc
/(.)((?(1)c|a)|a(?2))/
+\= Expect no match
baa
/(?P<abn>(?P=abn)xxx)/B
@@ -3353,7 +3381,7 @@ a random value. /Ix
/^a\x41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aAz
- *** Failers
+\= Expect no match
ax41z
/^a[m\x41]z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
@@ -3364,7 +3392,7 @@ a random value. /Ix
/^a\u0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aAz
- *** Failers
+\= Expect no match
au0041z
/^a[m\u0041]z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
@@ -3372,12 +3400,12 @@ a random value. /Ix
/^a\u041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
au041z
- *** Failers
+\= Expect no match
aAz
/^a\U0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aU0041z
- *** Failers
+\= Expect no match
aAz
/(?(?=c)c|d)++Y/B
@@ -3402,7 +3430,7 @@ a random value. /Ix
/(A|P)(*:A)(B|P) | (X|P)(X|P)(*:B)(Y|P)/x,mark
AABC
XXYZ
- ** Failers
+\= Expect no match
XAQQ
XAQQXZZ
AXQQQ
@@ -3413,12 +3441,12 @@ a random value. /Ix
/(b|q)(*:m)f|a(*:n)w/mark
aw
- ** Failers
+\= Expect no match
abc
/(q|b)(*:m)f|a(*:n)w/mark
aw
- ** Failers
+\= Expect no match
abc
# After a partial match, the behaviour is as for a failure.
@@ -3666,8 +3694,9 @@ a random value. /Ix
ad
/^(?!a(*THEN)b|ac)../
- ac
ad
+\= Expect no match
+ ac
/^(?=a(*THEN)b|ac)/
ac
@@ -3694,6 +3723,7 @@ a random value. /Ix
bnn
/(?(?=b(*SKIP)a)bn|bnn)/
+\= Expect no match
bnn
/(?=b(*THEN)a|)bn|bnn/
@@ -3712,41 +3742,40 @@ a random value. /Ix
/[bcd]*a/B
-# A complete set of tests for auto-possessification of character types.
-
-/\D+\D \D+\d \D+\S \D+\s \D+\W \D+\w \D+. \D+\C \D+\R \D+\H \D+\h \D+\V \D+\v \D+\Z \D+\z \D+$/Bx
+# A complete set of tests for auto-possessification of character types, but
+# omitting \C because it might be disabled (it has its own tests).
-/\d+\D \d+\d \d+\S \d+\s \d+\W \d+\w \d+. \d+\C \d+\R \d+\H \d+\h \d+\V \d+\v \d+\Z \d+\z \d+$/Bx
+/\D+\D \D+\d \D+\S \D+\s \D+\W \D+\w \D+. \D+\R \D+\H \D+\h \D+\V \D+\v \D+\Z \D+\z \D+$/Bx
-/\S+\D \S+\d \S+\S \S+\s \S+\W \S+\w \S+. \S+\C \S+\R \S+\H \S+\h \S+\V \S+\v \S+\Z \S+\z \S+$/Bx
+/\d+\D \d+\d \d+\S \d+\s \d+\W \d+\w \d+. \d+\R \d+\H \d+\h \d+\V \d+\v \d+\Z \d+\z \d+$/Bx
-/\s+\D \s+\d \s+\S \s+\s \s+\W \s+\w \s+. \s+\C \s+\R \s+\H \s+\h \s+\V \s+\v \s+\Z \s+\z \s+$/Bx
+/\S+\D \S+\d \S+\S \S+\s \S+\W \S+\w \S+. \S+\R \S+\H \S+\h \S+\V \S+\v \S+\Z \S+\z \S+$/Bx
-/\W+\D \W+\d \W+\S \W+\s \W+\W \W+\w \W+. \W+\C \W+\R \W+\H \W+\h \W+\V \W+\v \W+\Z \W+\z \W+$/Bx
+/\s+\D \s+\d \s+\S \s+\s \s+\W \s+\w \s+. \s+\R \s+\H \s+\h \s+\V \s+\v \s+\Z \s+\z \s+$/Bx
-/\w+\D \w+\d \w+\S \w+\s \w+\W \w+\w \w+. \w+\C \w+\R \w+\H \w+\h \w+\V \w+\v \w+\Z \w+\z \w+$/Bx
+/\W+\D \W+\d \W+\S \W+\s \W+\W \W+\w \W+. \W+\R \W+\H \W+\h \W+\V \W+\v \W+\Z \W+\z \W+$/Bx
-/\C+\D \C+\d \C+\S \C+\s \C+\W \C+\w \C+. \C+\C \C+\R \C+\H \C+\h \C+\V \C+\v \C+\Z \C+\z \C+$/Bx
+/\w+\D \w+\d \w+\S \w+\s \w+\W \w+\w \w+. \w+\R \w+\H \w+\h \w+\V \w+\v \w+\Z \w+\z \w+$/Bx
-/\R+\D \R+\d \R+\S \R+\s \R+\W \R+\w \R+. \R+\C \R+\R \R+\H \R+\h \R+\V \R+\v \R+\Z \R+\z \R+$/Bx
+/\R+\D \R+\d \R+\S \R+\s \R+\W \R+\w \R+. \R+\R \R+\H \R+\h \R+\V \R+\v \R+\Z \R+\z \R+$/Bx
-/\H+\D \H+\d \H+\S \H+\s \H+\W \H+\w \H+. \H+\C \H+\R \H+\H \H+\h \H+\V \H+\v \H+\Z \H+\z \H+$/Bx
+/\H+\D \H+\d \H+\S \H+\s \H+\W \H+\w \H+. \H+\R \H+\H \H+\h \H+\V \H+\v \H+\Z \H+\z \H+$/Bx
-/\h+\D \h+\d \h+\S \h+\s \h+\W \h+\w \h+. \h+\C \h+\R \h+\H \h+\h \h+\V \h+\v \h+\Z \h+\z \h+$/Bx
+/\h+\D \h+\d \h+\S \h+\s \h+\W \h+\w \h+. \h+\R \h+\H \h+\h \h+\V \h+\v \h+\Z \h+\z \h+$/Bx
-/\V+\D \V+\d \V+\S \V+\s \V+\W \V+\w \V+. \V+\C \V+\R \V+\H \V+\h \V+\V \V+\v \V+\Z \V+\z \V+$/Bx
+/\V+\D \V+\d \V+\S \V+\s \V+\W \V+\w \V+. \V+\R \V+\H \V+\h \V+\V \V+\v \V+\Z \V+\z \V+$/Bx
-/\v+\D \v+\d \v+\S \v+\s \v+\W \v+\w \v+. \v+\C \v+\R \v+\H \v+\h \v+\V \v+\v \v+\Z \v+\z \v+$/Bx
+/\v+\D \v+\d \v+\S \v+\s \v+\W \v+\w \v+. \v+\R \v+\H \v+\h \v+\V \v+\v \v+\Z \v+\z \v+$/Bx
-/ a+\D a+\d a+\S a+\s a+\W a+\w a+. a+\C a+\R a+\H a+\h a+\V a+\v a+\Z a+\z a+$/Bx
+/ a+\D a+\d a+\S a+\s a+\W a+\w a+. a+\R a+\H a+\h a+\V a+\v a+\Z a+\z a+$/Bx
-/\n+\D \n+\d \n+\S \n+\s \n+\W \n+\w \n+. \n+\C \n+\R \n+\H \n+\h \n+\V \n+\v \n+\Z \n+\z \n+$/Bx
+/\n+\D \n+\d \n+\S \n+\s \n+\W \n+\w \n+. \n+\R \n+\H \n+\h \n+\V \n+\v \n+\Z \n+\z \n+$/Bx
-/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\C .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bx
+/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bx
-/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\C .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bsx
+/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bsx
-/\D+$ \d+$ \S+$ \s+$ \W+$ \w+$ \C+$ \R+$ \H+$ \h+$ \V+$ \v+$ a+$ \n+$ .+$ .+$/Bmx
+/ \D+$ \d+$ \S+$ \s+$ \W+$ \w+$ \R+$ \H+$ \h+$ \V+$ \v+$ a+$ \n+$ .+$ .+$/Bmx
/(?=a+)a(a+)++a/B
@@ -3889,7 +3918,7 @@ a random value. /Ix
a /red/ thing
red is a colour
put it all on red
- ** Failers
+\= Expect no match
no reduction
Alfred Winifred
@@ -3899,6 +3928,7 @@ a random value. /Ix
abcd\=startchar
/abcd/newline=lf,firstline
+\= Expect no match
xx\nxabcd
# Test stack guard external calls.
@@ -3937,7 +3967,7 @@ a random value. /Ix
/^(?(?=abc)\w{3}:|\d\d)$/
abc:
12
- *** Failers
+\= Expect no match
123
xyz
@@ -3975,13 +4005,13 @@ a random value. /Ix
/(?(VERSION=8)yes|no){3}/I
yesnononoyes
- ** Failers
+\= Expect no match
yesno
/(?:(?<VERSION>abc)|xyz)(?(VERSION)yes|no)/I
abcyes
xyzno
- ** Failers
+\= Expect no match
abcno
xyzyes
@@ -3991,6 +4021,8 @@ a random value. /Ix
/(?(VERSION>=10.0.0)yes|no)/
+/(?(VERSION=10.101)yes|no)/
+
/abcd/I
/abcd/I,no_start_optimize
@@ -4008,8 +4040,6 @@ a random value. /Ix
/(((((a)))))/parens_nest_limit=2
-# Tests for pcre2_substitute()
-
/abc/replace=XYZ
123123
123abc123
@@ -4087,13 +4117,58 @@ a random value. /Ix
/(.)(.)/g,replace=$2$1
abcdefgh
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=${*MARK}
+ apple lemon blackberry
+ apple strudel
+ fruitless
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/replace=${*MARK} sauce,
+ apple lemon blackberry
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARK>
+ apple lemon blackberry
+ apple strudel
+ fruitless
+
+/(*:pear)apple/g,replace=${*MARKING}
+ apple lemon blackberry
+
+/(*:pear)apple/g,replace=${*MARK-time
+ apple lemon blackberry
+
+/(*:pear)apple/g,replace=${*mark}
+ apple lemon blackberry
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARKET>
+ apple lemon blackberry
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[22]${*MARK}
+ apple lemon blackberry
+ apple lemon blackberry\=substitute_overflow_length
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[23]${*MARK}
+ apple lemon blackberry
-# End of substitute tests
+/abc/
+ 123abc123\=replace=[9]XYZ
+ 123abc123\=substitute_overflow_length,replace=[9]XYZ
+ 123abc123\=substitute_overflow_length,replace=[6]XYZ
+ 123abc123\=substitute_overflow_length,replace=[1]XYZ
+ 123abc123\=substitute_overflow_length,replace=[0]XYZ
+
+/a(b)c/
+ 123abc123\=replace=[9]x$1z
+ 123abc123\=substitute_overflow_length,replace=[9]x$1z
+ 123abc123\=substitute_overflow_length,replace=[6]x$1z
+ 123abc123\=substitute_overflow_length,replace=[1]x$1z
+ 123abc123\=substitute_overflow_length,replace=[0]x$1z
"((?=(?(?=(?(?=(?(?=()))))))))"
a
"(?(?=)==)(((((((((?=)))))))))"
+\= Expect no match
a
/(a)(b)|(c)/
@@ -4117,9 +4192,11 @@ a random value. /Ix
/^abc/info,no_dotstar_anchor
/.*\d/info,auto_callout
+\= Expect no match
aaa
/.*\d/info,no_dotstar_anchor,auto_callout
+\= Expect no match
aaa
/.*\d/dotall,info
@@ -4161,7 +4238,7 @@ a random value. /Ix
/(?(?=0)(?=00)?00765|(?!3).56)/
00765
456
- ** Failers
+\= Expect no match
356
'^(a)*+(\w)'
@@ -4233,7 +4310,7 @@ a random value. /Ix
/(?(?!)a|b)/
bbb
- ** Failers
+\= Expect no match
aaa
# JIT gives a different error message for the infinite recursion
@@ -4265,9 +4342,8 @@ a random value. /Ix
/((?2){73}(?2))((?1))/info
-/ab\Cde/never_backslash_c
-
/abc/
+\= Expect no match
\[9x!xxx(]{9999}
/(abc)*/
@@ -4327,4 +4403,401 @@ a random value. /Ix
/^(?:(?(1)x|)+)+$()/B
+/[[:>:]](?<)/
+
+/((?x)(*:0))#(?'/
+
+/(?C$[$)(?<]/
+
+/(?C$)$)(?<]/
+
+/(?(R))*+/B
+ abcd
+
+/((?x)(?#))#(?'/
+
+/((?x)(?#))#(?'abc')/I
+
+/[[:\\](?<[::]/
+
+/[[:\\](?'abc')[a:]/I
+
+"[[[.\xe8Nq\xffq\xff\xe0\x2|||::Nq\xffq\xff\xe0\x6\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[:::::::::::::::::[[.\xe8Nq\xffq\xff\xe0\x2|||::Nq\xffq\xff\xe0\x6\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[[[:::E[[[:[:[[:[:::[[:::E[[[:[:[[:'[:::::E[[[:[::::::[[[:[[[[[[[::E[[[:[::::::[[[:[[[[[[[[:[[::[::::[[:::::::[[:[[[[[[[:[[::[:[[:[~"
+
+/()(?(R)0)*+/B
+
+/(?R-:(?</
+
+/(?(?C{\Q})(?!(?'/
+
+/(?(?C{\Q})(?!(?'abc')))/I
+
+/(?1){3918}(((((0(\k'R'))))(?J)(?'R'(?'R'\3){99})))/I
+
+/(?|(aaa)|(b))\g{1}/I
+
+/(?|(aaa)|(b))(?1)/I
+
+/(?|(aaa)|(b))/I
+
+/(?|(?'a'aaa)|(?'a'b))\k'a'/I
+
+/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/I,dupnames
+
+/ab{3cd/
+ ab{3cd
+
+/ab{3,cd/
+ ab{3,cd
+
+/ab{3,4a}cd/
+ ab{3,4a}cd
+
+/{4,5a}bc/
+ {4,5a}bc
+
+/\x0{ab}/
+ \0{ab}
+
+/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
+ ababababbbabZXXXX
+
+/.*?a(*PRUNE)b/
+ aab
+
+/.*?a(*PRUNE)b/s
+ aab
+
+/^a(*PRUNE)b/s
+\= Expect no match
+ aab
+
+/.*?a(*SKIP)b/
+ aab
+
+/(?(8000000000/
+
+/((?(R8000000000)))/
+
+/0(?0)|(1)(*THEN)(*SKIP:0)(*FAIL)/
+\= Expect no match
+ 01
+
+/(?(1)()\983040\2)/
+
+/(*LIMIT_MATCH=)abc/
+
+/(*CRLF)(*LIMIT_MATCH=)abc/
+
+/(?:ab)?(?:ab)(?:ab)/
+ abab
+ ababab
+\= Expect no match
+ aba
+
+/((*MARK:A))++a(*SKIP:B)b/
+\= Expect no match
+ aacb
+
+/(*MARK:a\zb)z/alt_verbnames
+
+/(*:ab\t(d\)c)xxx/
+
+/(*:ab\t(d\)c)xxx/alt_verbnames,mark
+ cxxxz
+
+/(*:A\Qxx)x\EB)x/alt_verbnames,mark
+ x
+
+/(*:A\ExxxB)x/alt_verbnames,mark
+ x
+
+/(*: A \ and #comment
+ \ B)x/x,alt_verbnames,mark
+ x
+
+/(*:A
+B)x/alt_verbnames,mark
+ x
+
+/(*:abc\Qpqr)/alt_verbnames
+
+/abc/use_offset_limit
+ 1234abcde\=offset_limit=100
+ 1234abcde\=offset_limit=9
+ 1234abcde\=offset_limit=4
+ 1234abcde\=offset_limit=4,offset=4
+\= Expect no match
+ 1234abcde\=offset_limit=4,offset=5
+ 1234abcde\=offset_limit=3
+
+/(?<=abc)/use_offset_limit
+ 1234abc\=offset_limit=7
+\= Expect no match
+ 1234abc\=offset_limit=6
+
+/A/g,replace=-,use_offset_limit
+ XAXAXAXAXA\=offset_limit=4
+
+/abc/
+\= Expect error
+ 1234abcde\=offset_limit=4
+
+/^\w/m,use_offset_limit
+ \n..\naa\=offset_limit=3
+ \n..\naa\=offset_limit=4
+
+/abcd/null_context
+ abcd\=null_context
+\= Expect error
+ abcd\=null_context,find_limits
+ abcd\=allusedtext,startchar
+
+/abcd/replace=w\rx\x82y\o{333}z(\Q12\$34$$\x34\E5$$),substitute_extended
+ abcd
+
+/a(bc)(DE)/replace=a\u$1\U$1\E$1\l$2\L$2\Eab\Uab\LYZ\EDone,substitute_extended
+ abcDE
+
+/abcd/replace=xy\kz,substitute_extended
+ abcd
+
+/a(?:(b)|(c))/substitute_extended,replace=X${1:+1:-1}X${2:+2:-2}
+ ab
+ ac
+ ab\=replace=${1:+$1\:$1:$2}
+ ac\=replace=${1:+$1\:$1:$2}
+
+/a(?:(b)|(c))/substitute_extended,replace=X${1:-1:-1}X${2:-2:-2}
+ ab
+ ac
+
+/(a)/substitute_extended,replace=>${1:+\Q$1:{}$$\E+\U$1}<
+ a
+
+/X(b)Y/substitute_extended
+ XbY\=replace=x${1:+$1\U$1}y
+ XbY\=replace=\Ux${1:+$1$1}y
+
+/a/substitute_extended,replace=${*MARK:+a:b}
+ a
+
+/(abcd)/replace=${1:+xy\kz},substitute_extended
+ abcd
+
+/(abcd)/
+ abcd\=replace=${1:+xy\kz},substitute_extended
+
+/abcd/substitute_extended,replace=>$1<
+ abcd
+
+/abcd/substitute_extended,replace=>xxx${xyz}<<<
+ abcd
+
+/(?J)(?:(?<A>a)|(?<A>b))/replace=<$A>
+ [a]
+ [b]
+\= Expect error
+ (a)\=ovector=1
+
+/(a)|(b)/replace=<$1>
+\= Expect error
+ b
+
+/(aa)(BB)/substitute_extended,replace=\U$1\L$2\E$1..\U$1\l$2$1
+ aaBB
+
+/^(o(\1{72}{\"{\\{00000059079}\d*){74}}){19}/I
+
+/((p(?'K/
+
+/((p(?'K/no_auto_capture
+
+/abc/replace=A$3123456789Z
+ abc
+
+/(?<!a{65535}a{5})x/I
+
+/(?<!a{65535})x/I
+
+/(?=a\K)/replace=z
+ BaCaD
+
+/(?'abcdefghijklmnopqrstuvwxyzABCDEFG'toolong)/
+
+/(?'abcdefghijklmnopqrstuvwxyzABCDEF'justright)/
+
+# These two use zero-termination
+/abcd/max_pattern_length=3
+
+/abc/max_pattern_length=3
+
+# These two, being hex, pass the length
+/abcdefab/hex,max_pattern_length=3
+
+/abcdef/hex,max_pattern_length=3
+
+# These two patterns used to take a long time to compile
+
+"(.*)
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))"xI
+
+"(?<=a()
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+a)"xI
+
+# When (?| is used and groups of the same number may be different,
+# we have to rely on a count to catch overly complicated patterns.
+
+"(?|()|())(.*)
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))"xI
+
+"(?|()|())(?<=a()
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+a)"xI
+
+# Test the use of malloc for caching group information when there are more
+# groups than fit into the on-stack workspace.
+
+/\[()]{1024}/I,expand
+
+# Test minlength capped at 65535
+
+/(A{65000})\1{65000}/I
+
+# Test group scans when numbers are not unique
+
+/(?|()+|(a)+)/BI
+
+/(?|(a)+|()+)/BI
+
+/(?|()|(a))/BI
+
+/(?|(a)|())/BI
+
+# Test CRLF handling in empty string substitutions
+
+/^$/gm,newline=anycrlf,replace=-
+ X\r\n\r\nY
+
+/^$/gm,newline=crlf,replace=-
+ X\r\n\r\nY
+
+/^$/gm,newline=any,replace=-
+ X\r\n\r\nY
+
+"(*ANYCRLF)(?m)^(.*[^0-9\r\n].*|)$"g,replace=NaN
+ 15\r\nfoo\r\n20\r\nbar\r\nbaz\r\n\r\n20
+
+/a[[:punct:]b]/bincode
+
+/a[b[:punct:]]/bincode
+
+/L(?#(|++<!(2)?/B
+
+/L(?#(|++<!(2)?/B,no_auto_possess
+
+/L(?#(|++<!(2)?/B,auto_callout
+
+/L(?#(|++<!(2)?/B,no_auto_possess,auto_callout
+
+/(A*)\E+/B,auto_callout
+
+/()\Q\E*]/B,auto_callout
+ a[bc]d
+
+/\x8a+f|;T?(*:;.'?`(\xeap ){![^()!y*''C*(?';]{1;(\x08)/B,alt_verbnames,dupnames,extended
+
+# Tests for NULL characters in comments and verb "names" and callouts
+
+# /A#B\x00C\x0aZ/
+/41 23 42 00 43 0a 5a/Bx,hex
+
+# /A+#B\x00C\x0a+/
+/41 2b 23 42 00 43 0a 2b/Bx,hex
+
+# /A(*:B\x00W#X\00Y\x0aC)Z/
+/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex,alt_verbnames
+
+# /A(*:B\x00W#X\00Y\x0aC)Z/
+/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex
+
+# /A(?C{X\x00Y})B/
+/41 28 3f 43 7b 58 00 59 7d 29 42/B,hex
+
+# /A(?#X\x00Y)B/
+/41 28 3f 23 7b 00 7d 29 42/B,hex
+
+# Tests for leading comment in extended patterns
+
+/ (?-x):?/extended
+
+/ (?-x):?/extended
+
+/0b 28 3f 2d 78 29 3a/hex,extended
+
+/#comment
+(?-x):?/extended
+
+/(8(*:6^\x09x\xa6l\)6!|\xd0:[^:|)\x09d\Z\d{85*m(?'(?<1!)*\W[*\xff]!!h\w]*\xbe;/alt_bsux,alt_verbnames,allow_empty_class,dollar_endonly,extended,multiline,never_utf,no_dotstar_anchor,no_start_optimize
+
+/a|(b)c/replace=>$1<,substitute_unset_empty
+ cat
+ xbcom
+
+/a|(b)c/
+ cat\=replace=>$1<
+ cat\=replace=>$1<,substitute_unset_empty
+ xbcom\=replace=>$1<,substitute_unset_empty
+
+/a|(b)c/substitute_extended
+ cat\=replace=>${2:-xx}<
+ cat\=replace=>${2:-xx}<,substitute_unknown_unset
+ cat\=replace=>${X:-xx}<,substitute_unknown_unset
+
+/a|(?'X'b)c/replace=>$X<,substitute_unset_empty
+ cat
+ xbcom
+
+/a|(?'X'b)c/replace=>$Y<,substitute_unset_empty
+ cat
+ cat\=substitute_unknown_unset
+ cat\=substitute_unknown_unset,-substitute_unset_empty
+
+/a|(b)c/replace=>$2<,substitute_unset_empty
+ cat
+ cat\=substitute_unknown_unset
+ cat\=substitute_unknown_unset,-substitute_unset_empty
+
+/()()()/use_offset_limit
+ \=ovector=11000000000
+ \=callout_fail=11000000000
+ \=callout_fail=1:11000000000
+ \=callout_data=11000000000
+ \=callout_data=-11000000000
+ \=offset_limit=1100000000000000000000
+ \=copy=11000000000
+
+/(*MARK:A\x00b)/mark
+ abc
+
+/(*MARK:A\x00b)/mark,alt_verbnames
+ abc
+
+# /(*MARK:A\x00b)/
+/28 2a 4d 41 52 4b 3a 41 00 62 29/mark,hex
+ abc
+
+# /(*MARK:A\x00b)/
+/28 2a 4d 41 52 4b 3a 41 00 62 29/mark,hex,alt_verbnames
+ abc
+
# End of testinput2
diff --git a/testdata/testinput20 b/testdata/testinput20
new file mode 100644
index 0000000..9ec3174
--- /dev/null
+++ b/testdata/testinput20
@@ -0,0 +1,63 @@
+# This set of tests exercises the serialization/deserialization functions in
+# the library. It does not use UTF or JIT.
+
+#forbid_utf
+
+# Compile several patterns, push them onto the stack, and then write them
+# all to a file.
+
+#pattern push
+
+/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\d+)
+ )/x
+/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
+
+#save testsaved1
+
+# Do it again for some more patterns.
+
+/(*MARK:A)(*SKIP:B)(C|X)/mark
+/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
+
+#save testsaved2
+#pattern -push
+
+# Reload the patterns, then pop them one by one and check them.
+
+#load testsaved1
+#load testsaved2
+
+#pop info
+ foofoo
+ barbar
+
+#pop mark
+ C
+\= Expect no match
+ D
+
+#pop
+ AmanaplanacanalPanama
+
+#pop info
+ metcalfe 33
+
+# Check for an error when different tables are used.
+
+/abc/push,tables=1
+/xyz/push,tables=2
+#save testsaved1
+
+#pop
+ xyz
+
+#pop
+ abc
+
+#pop should give an error
+ pqr
+
+# End of testinput20
diff --git a/testdata/testinput21 b/testdata/testinput21
new file mode 100644
index 0000000..1d1fbed
--- /dev/null
+++ b/testdata/testinput21
@@ -0,0 +1,16 @@
+# These are tests of \C that do not involve UTF. They are not run when \C is
+# disabled by compiling with --enable-never-backslash-C.
+
+/\C+\D \C+\d \C+\S \C+\s \C+\W \C+\w \C+. \C+\R \C+\H \C+\h \C+\V \C+\v \C+\Z \C+\z \C+$/Bx
+
+/\D+\C \d+\C \S+\C \s+\C \W+\C \w+\C .+\C \R+\C \H+\C \h+\C \V+\C \v+\C a+\C \n+\C \C+\C/Bx
+
+/ab\Cde/never_backslash_c
+
+/ab\Cde/info
+ abXde
+
+/(?<=ab\Cde)X/
+ abZdeX
+
+# End of testinput21
diff --git a/testdata/testinput22 b/testdata/testinput22
new file mode 100644
index 0000000..f684cf4
--- /dev/null
+++ b/testdata/testinput22
@@ -0,0 +1,95 @@
+# Tests of \C when Unicode support is available. Note that \C is not supported
+# for DFA matching in UTF mode, so this test is not run with -dfa. The output
+# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match
+# in some widths and not in others.
+
+/ab\Cde/utf,info
+ abXde
+
+# This should produce an error diagnostic (\C in UTF lookbehind)
+
+/(?<=ab\Cde)X/utf
+
+# Autopossessification tests
+
+/\C+\X \X+\C/Bx
+
+/\C+\X \X+\C/Bx,utf
+
+/\C\X*TӅ;
+{0,6}\v+ F
+/utf
+\= Expect no match
+ Ӆ\x0a
+
+/\C(\W?ſ)'?{{/utf
+\= Expect no match
+ \\C(\\W?ſ)'?{{
+
+/X(\C{3})/utf
+ X\x{1234}
+ X\x{11234}Y
+ X\x{11234}YZ
+
+/X(\C{4})/utf
+ X\x{1234}YZ
+ X\x{11234}YZ
+ X\x{11234}YZW
+
+/X\C*/utf
+ XYZabcdce
+
+/X\C*?/utf
+ XYZabcde
+
+/X\C{3,5}/utf
+ Xabcdefg
+ X\x{1234}
+ X\x{1234}YZ
+ X\x{1234}\x{512}
+ X\x{1234}\x{512}YZ
+ X\x{11234}Y
+ X\x{11234}YZ
+ X\x{11234}\x{512}
+ X\x{11234}\x{512}YZ
+ X\x{11234}\x{512}\x{11234}Z
+
+/X\C{3,5}?/utf
+ Xabcdefg
+ X\x{1234}
+ X\x{1234}YZ
+ X\x{1234}\x{512}
+ X\x{11234}Y
+ X\x{11234}YZ
+ X\x{11234}\x{512}YZ
+ X\x{11234}
+
+/a\Cb/utf
+ aXb
+ a\nb
+ a\x{100}b
+
+/a\C\Cb/utf
+ a\x{100}b
+ a\x{12257}b
+ a\x{12257}\x{11234}b
+
+/ab\Cde/utf
+ abXde
+
+# This one is here not because it's different to Perl, but because the way
+# the captured single code unit is displayed. (In Perl it becomes a character,
+# and you can't tell the difference.)
+
+/X(\C)(.*)/utf
+ X\x{1234}
+ X\nabc
+
+# This one is here because Perl gives out a grumbly error message (quite
+# correctly, but that messes up comparisons).
+
+/a\Cb/utf
+\= Expect no match in 8-bit mode
+ a\x{100}b
+
+# End of testinput22
diff --git a/testdata/testinput23 b/testdata/testinput23
new file mode 100644
index 0000000..d0a9bc4
--- /dev/null
+++ b/testdata/testinput23
@@ -0,0 +1,7 @@
+# This test is run when PCRE2 has been built with --enable-never-backslash-C,
+# which disables the use of \C. All we can do is check that it gives the
+# correct error message.
+
+/a\Cb/
+
+# End of testinput23
diff --git a/testdata/testinput3 b/testdata/testinput3
index 2e1fbf5..71e95fe 100644
--- a/testdata/testinput3
+++ b/testdata/testinput3
@@ -8,35 +8,35 @@
#forbid_utf
/^[\w]+/
- *** Failers
+\= Expect no match
cole
/^[\w]+/locale=fr_FR
cole
/^[\w]+/
- *** Failers
+\= Expect no match
cole
/^[\W]+/
cole
/^[\W]+/locale=fr_FR
- *** Failers
+\= Expect no match
cole
/[\b]/
\b
- *** Failers
+\= Expect no match
a
/[\b]/locale=fr_FR
\b
- *** Failers
+\= Expect no match
a
/^\w+/
- *** Failers
+\= Expect no match
cole
/^\w+/locale=fr_FR
@@ -46,12 +46,12 @@
cole
/(.+)\b(.+)/locale=fr_FR
- *** Failers
+\= Expect no match
cole
/cole/i
cole
- *** Failers
+\= Expect no match
cole
/cole/i,locale=fr_FR
@@ -72,7 +72,7 @@
/^[\xc8-\xc9]/
cole
- *** Failers
+\= Expect no match
cole
/\W+/
diff --git a/testdata/testinput4 b/testdata/testinput4
index 421b3fb..ce9145d 100644
--- a/testdata/testinput4
+++ b/testdata/testinput4
@@ -3,20 +3,21 @@
# some of the property tests may differ because of different versions of
# Unicode in use by PCRE2 and Perl.
+#newline_default lf anycrlf any
#perltest
/a.b/utf
acb
a\x7fb
a\x{100}b
- *** Failers
+\= Expect no match
a\nb
/a(.{3})b/utf
a\x{4000}xyb
a\x{4000}\x7fyb
a\x{4000}\x{100}yb
- *** Failers
+\= Expect no match
a\x{4000}b
ac\ncb
@@ -54,7 +55,7 @@
a\x{1234}xyb
a\x{1234}\x{4321}yb
a\x{1234}\x{4321}\x{3412}b
- *** Failers
+\= Expect no match
a\x{1234}b
ac\ncb
@@ -64,7 +65,7 @@
a\x{1234}\x{4321}\x{3412}b
axxxxbcdefghijb
a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
+\= Expect no match
a\x{1234}b
/a(.{3,}?)b/utf
@@ -73,7 +74,7 @@
a\x{1234}\x{4321}\x{3412}b
axxxxbcdefghijb
a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
+\= Expect no match
a\x{1234}b
/a(.{3,5})b/utf
@@ -84,7 +85,7 @@
a\x{1234}\x{4321}\x{3412}\x{3421}b
axbxxbcdefghijb
axxxxxbcdefghijb
- *** Failers
+\= Expect no match
a\x{1234}b
axxxxxxbcdefghijb
@@ -96,12 +97,12 @@
a\x{1234}\x{4321}\x{3412}\x{3421}b
axbxxbcdefghijb
axxxxxbcdefghijb
- *** Failers
+\= Expect no match
a\x{1234}b
axxxxxxbcdefghijb
/^[a\x{c0}]/utf
- *** Failers
+\= Expect no match
\x{100}
/(?<=aXb)cd/utf
@@ -115,19 +116,19 @@
/(?:\x{100}){3}b/utf
\x{100}\x{100}\x{100}b
- *** Failers
+\= Expect no match
\x{100}\x{100}b
/\x{ab}/utf
\x{ab}
\xc2\xab
- *** Failers
+\= Expect no match
\x00{ab}
/(?<=(.))X/utf
WXYZ
\x{256}XYZ
- *** Failers
+\= Expect no match
XYZ
/[^a]+/g,utf
@@ -214,199 +215,185 @@
/\D+/utf
12abcd34
- *** Failers
+\= Expect no match
1234
/\D{2,3}/utf
12abcd34
12ab34
- *** Failers
+\= Expect no match
1234
12a34
/\D{2,3}?/utf
12abcd34
12ab34
- *** Failers
+\= Expect no match
1234
12a34
/\d+/utf
12abcd34
- *** Failers
/\d{2,3}/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
1.4
/\d{2,3}?/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
1.4
/\S+/utf
12abcd34
- *** Failers
+\= Expect no match
\ \
/\S{2,3}/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
\ \
/\S{2,3}?/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
\ \
/>\s+</utf,aftertext
12> <34
- *** Failers
/>\s{2,3}</utf,aftertext
ab> <cd
ab> <ce
- *** Failers
+\= Expect no match
ab> <cd
/>\s{2,3}?</utf,aftertext
ab> <cd
ab> <ce
- *** Failers
+\= Expect no match
ab> <cd
/\w+/utf
12 34
- *** Failers
+\= Expect no match
+++=*!
/\w{2,3}/utf
ab cd
abcd ce
- *** Failers
+\= Expect no match
a.b.c
/\w{2,3}?/utf
ab cd
abcd ce
- *** Failers
+\= Expect no match
a.b.c
/\W+/utf
12====34
- *** Failers
+\= Expect no match
abcd
/\W{2,3}/utf
ab====cd
ab==cd
- *** Failers
+\= Expect no match
a.b.c
/\W{2,3}?/utf
ab====cd
ab==cd
- *** Failers
+\= Expect no match
a.b.c
/[\x{100}]/utf
\x{100}
Z\x{100}
\x{100}Z
- *** Failers
/[Z\x{100}]/utf
Z\x{100}
\x{100}
\x{100}Z
- *** Failers
/[\x{100}\x{200}]/utf
- ab\x{100}cd
- ab\x{200}cd
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
/[\x{100}-\x{200}]/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{111}cd
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{111}cd
/[z-\x{200}]/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{111}cd
- abzcd
- ab|cd
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{111}cd
+ abzcd
+ ab|cd
/[Q\x{100}\x{200}]/utf
- ab\x{100}cd
- ab\x{200}cd
- Q?
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ Q?
/[Q\x{100}-\x{200}]/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{111}cd
- Q?
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{111}cd
+ Q?
/[Qz-\x{200}]/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{111}cd
- abzcd
- ab|cd
- Q?
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{111}cd
+ abzcd
+ ab|cd
+ Q?
/[\x{100}\x{200}]{1,3}/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
/[\x{100}\x{200}]{1,3}?/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
/[Q\x{100}\x{200}]{1,3}/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
/[Q\x{100}\x{200}]{1,3}?/utf
- ab\x{100}cd
- ab\x{200}cd
- ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
+ ab\x{100}cd
+ ab\x{200}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
/(?<=[\x{100}\x{200}])X/utf
abc\x{200}X
abc\x{100}X
- *** Failers
+\= Expect no match
X
/(?<=[Q\x{100}\x{200}])X/utf
abc\x{200}X
abc\x{100}X
abQX
- *** Failers
+\= Expect no match
X
/(?<=[\x{100}\x{200}]{3})X/utf
abc\x{100}\x{200}\x{100}X
- *** Failers
+\= Expect no match
abc\x{200}X
X
@@ -414,7 +401,7 @@
AX
\x{150}X
\x{500}X
- *** Failers
+\= Expect no match
\x{100}X
\x{200}X
@@ -422,7 +409,7 @@
AX
\x{150}X
\x{500}X
- *** Failers
+\= Expect no match
\x{100}X
\x{200}X
QX
@@ -430,7 +417,7 @@
/[^\x{100}-\x{200}]X/utf
AX
\x{500}X
- *** Failers
+\= Expect no match
\x{100}X
\x{150}X
\x{200}X
@@ -439,7 +426,7 @@
z
Z
\x{100}
- *** Failers
+\= Expect no match
\x{102}
y
@@ -457,18 +444,23 @@
\x{123}
/^[ac]*b/utf
+\= Expect no match
xb
/^[ac\x{100}]*b/utf
+\= Expect no match
xb
/^[^x]*b/i,utf
+\= Expect no match
xb
/^[^x]*b/utf
+\= Expect no match
xb
/^\d*b/utf
+\= Expect no match
xb
/(|a)/g,utf
@@ -613,9 +605,11 @@
AAB\x{123}BAA
/(abc)\1/i,utf
+\= Expect no match
abc
/(abc)\1/utf
+\= Expect no match
abc
/a(*:a\x{1234}b)/utf,mark
@@ -696,22 +690,27 @@
/^\d*\w{4}/utf
1234
+\= Expect no match
123
/^[^b]*\w{4}/utf
aaaa
+\= Expect no match
aaa
/^[^b]*\w{4}/i,utf
aaaa
+\= Expect no match
aaa
/^\x{100}*.{4}/utf
\x{100}\x{100}\x{100}\x{100}
+\= Expect no match
\x{100}\x{100}\x{100}
/^\x{100}*.{4}/i,utf
\x{100}\x{100}\x{100}\x{100}
+\= Expect no match
\x{100}\x{100}\x{100}
/^a+[a\x{200}]/utf
@@ -728,74 +727,74 @@
/^\pC\pL\pM\pN\pP\pS\pZ</utf
\x7f\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
\np\x{300}9!\$ <
- ** Failers
+\= Expect no match
ap\x{300}9!\$ <
/^\PC/utf
X
- ** Failers
+\= Expect no match
\x7f
/^\PL/utf
9
- ** Failers
+\= Expect no match
\x{c0}
/^\PM/utf
X
- ** Failers
+\= Expect no match
\x{30f}
/^\PN/utf
X
- ** Failers
+\= Expect no match
\x{660}
/^\PP/utf
X
- ** Failers
+\= Expect no match
\x{66c}
/^\PS/utf
X
- ** Failers
+\= Expect no match
\x{f01}
/^\PZ/utf
X
- ** Failers
+\= Expect no match
\x{1680}
/^\p{Cc}/utf
\x{017}
\x{09f}
- ** Failers
+\= Expect no match
\x{0600}
/^\p{Cf}/utf
\x{601}
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Cn}/utf
\x{e0000}
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Co}/utf
\x{f8ff}
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Ll}/utf
a
- ** Failers
+\= Expect no match
Z
\x{e000}
/^\p{Lm}/utf
\x{2b0}
- ** Failers
+\= Expect no match
a
/^\p{Lo}/utf
@@ -805,38 +804,38 @@
\x{4d00}
\x{4db4}
\x{4db5}
- ** Failers
+\= Expect no match
a
\x{2b0}
\x{4db6}
/^\p{Lt}/utf
\x{1c5}
- ** Failers
+\= Expect no match
a
\x{2b0}
/^\p{Lu}/utf
A
- ** Failers
+\= Expect no match
\x{2b0}
/^\p{Mc}/utf
\x{903}
- ** Failers
+\= Expect no match
X
\x{300}
/^\p{Me}/utf
\x{488}
- ** Failers
+\= Expect no match
X
\x{903}
\x{300}
/^\p{Mn}/utf
\x{300}
- ** Failers
+\= Expect no match
X
\x{903}
@@ -844,26 +843,26 @@
0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}\x{669}\x{66a}
\x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}\x{6fa}
\x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}\x{970}
- ** Failers
+\= Expect no match
X
/^\p{Nl}/utf
\x{16ee}
- ** Failers
+\= Expect no match
X
\x{966}
/^\p{No}/utf
\x{b2}
\x{b3}
- ** Failers
+\= Expect no match
X
\x{16ee}
/^\p{Pc}/utf
\x5f
\x{203f}
- ** Failers
+\= Expect no match
X
-
\x{58a}
@@ -871,7 +870,7 @@
/^\p{Pd}/utf
-
\x{58a}
- ** Failers
+\= Expect no match
X
\x{203f}
@@ -880,7 +879,7 @@
]
}
\x{f3b}
- ** Failers
+\= Expect no match
X
\x{203f}
(
@@ -891,21 +890,21 @@
/^\p{Pf}/utf
\x{bb}
\x{2019}
- ** Failers
+\= Expect no match
X
\x{203f}
/^\p{Pi}/utf
\x{ab}
\x{2018}
- ** Failers
+\= Expect no match
X
\x{203f}
/^\p{Po}/utf
!
\x{37e}
- ** Failers
+\= Expect no match
X
\x{203f}
@@ -914,7 +913,7 @@
[
{
\x{f3c}
- ** Failers
+\= Expect no match
X
)
]
@@ -923,83 +922,83 @@
/^\p{Sk}/utf
\x{2c2}
- ** Failers
+\= Expect no match
X
\x{9f2}
/^\p{Sm}+/utf
+<|~\x{ac}\x{2044}
- ** Failers
+\= Expect no match
X
\x{9f2}
/^\p{So}/utf
\x{a6}
\x{482}
- ** Failers
+\= Expect no match
X
\x{9f2}
/^\p{Zl}/utf
\x{2028}
- ** Failers
+\= Expect no match
X
\x{2029}
/^\p{Zp}/utf
\x{2029}
- ** Failers
+\= Expect no match
X
\x{2028}
/\p{Nd}+(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}+?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}{2,}(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}{2,}?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}*(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}*?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}{2}(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}{2,3}(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}{2,3}?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}??(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}*+(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}*+(...)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
/\p{Nd}*+(....)/utf
- ** Failers
- \x{660}\x{661}\x{662}ABC
+\= Expect no match
+ \x{660}\x{661}\x{662}ABC
/(?<=A\p{Nd})XYZ/utf
A2XYZ
123A5XYZPQR
ABA\x{660}XYZpqr
- ** Failers
+\= Expect no match
AXYZ
XYZ
@@ -1007,33 +1006,38 @@
1XYZ
AB=XYZ..
XYZ
- ** Failers
+\= Expect no match
WXYZ
/[\P{Nd}]+/utf
abcd
- ** Failers
+\= Expect no match
1234
/\D+/utf
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/\P{Nd}+/utf
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/[\D]+/utf
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/[\P{Nd}]+/utf
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/[\D\P{Nd}]+/utf
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/\pL/utf
a
@@ -1046,18 +1050,18 @@
/\p{Lu}/utf
A
aZ
- ** Failers
+\= Expect no match
abc
/\p{Ll}/utf
a
Az
- ** Failers
+\= Expect no match
ABC
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- ** Failers
+\= Expect no match
a\x{391}\x{10427}\x{ff3a}\x{1fb0}
A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
@@ -1104,7 +1108,7 @@
A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
/^\X(.)/utf
- *** Failers
+\= Expect no match
A\x{300}\x{301}\x{302}
/^\X{2,3}(.)/utf
@@ -1127,46 +1131,46 @@
/^\p{Han}+/utf
\x{2e81}\x{3007}\x{2f804}\x{31a0}
- ** Failers
+\= Expect no match
\x{2e7f}
/^\P{Katakana}+/utf
\x{3105}
- ** Failers
+\= Expect no match
\x{30ff}
/^[\p{Arabic}]/utf
\x{06e9}
\x{060b}
- ** Failers
+\= Expect no match
X\x{06e9}
/^[\P{Yi}]/utf
\x{2f800}
- ** Failers
+\= Expect no match
\x{a014}
\x{a4c6}
/^\p{Any}X/utf
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
X
/^\P{Any}X/utf
- ** Failers
+\= Expect no match
AX
/^\p{Any}?X/utf
XYZ
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
ABXYZ
/^\P{Any}?X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
ABXYZ
@@ -1175,11 +1179,11 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
+\= Expect no match
XYZ
/^\P{Any}+X/utf
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1190,11 +1194,10 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
/^\P{Any}*X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1202,23 +1205,23 @@
/^[\p{Any}]X/utf
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
X
/^[\P{Any}]X/utf
- ** Failers
+\= Expect no match
AX
/^[\p{Any}]?X/utf
XYZ
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
ABXYZ
/^[\P{Any}]?X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
ABXYZ
@@ -1227,11 +1230,11 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
+\= Expect no match
XYZ
/^[\P{Any}]+X/utf
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1242,11 +1245,10 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
/^[\P{Any}]*X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1260,7 +1262,7 @@
\x{1234}\n\r\x{3456}xyz
/^\P{Any}{3,5}?/utf
- ** Failers
+\= Expect no match
abcdefgh
\x{1234}\n\r\x{3456}xyz
@@ -1268,79 +1270,79 @@
AXY
aXY
\x{1c5}XY
- ** Failers
- \x{1bb}XY
- \x{2b0}XY
- !XY
+\= Expect no match
+ \x{1bb}XY
+ \x{2b0}XY
+ !XY
/^[\p{L&}]X/utf
- AXY
- aXY
+ AXY
+ aXY
\x{1c5}XY
- ** Failers
- \x{1bb}XY
- \x{2b0}XY
- !XY
+\= Expect no match
+ \x{1bb}XY
+ \x{2b0}XY
+ !XY
/^\p{L&}+X/utf
- AXY
- aXY
- AbcdeXyz
- \x{1c5}AbXY
- abcDEXypqreXlmn
- ** Failers
- \x{1bb}XY
- \x{2b0}XY
- !XY
+ AXY
+ aXY
+ AbcdeXyz
+ \x{1c5}AbXY
+ abcDEXypqreXlmn
+\= Expect no match
+ \x{1bb}XY
+ \x{2b0}XY
+ !XY
/^[\p{L&}]+X/utf
- AXY
- aXY
- AbcdeXyz
- \x{1c5}AbXY
- abcDEXypqreXlmn
- ** Failers
- \x{1bb}XY
- \x{2b0}XY
- !XY
+ AXY
+ aXY
+ AbcdeXyz
+ \x{1c5}AbXY
+ abcDEXypqreXlmn
+\= Expect no match
+ \x{1bb}XY
+ \x{2b0}XY
+ !XY
/^\p{L&}+?X/utf
- AXY
- aXY
- AbcdeXyz
- \x{1c5}AbXY
- abcDEXypqreXlmn
- ** Failers
- \x{1bb}XY
- \x{2b0}XY
- !XY
+ AXY
+ aXY
+ AbcdeXyz
+ \x{1c5}AbXY
+ abcDEXypqreXlmn
+\= Expect no match
+ \x{1bb}XY
+ \x{2b0}XY
+ !XY
/^[\p{L&}]+?X/utf
- AXY
- aXY
- AbcdeXyz
- \x{1c5}AbXY
- abcDEXypqreXlmn
- ** Failers
- \x{1bb}XY
- \x{2b0}XY
- !XY
+ AXY
+ aXY
+ AbcdeXyz
+ \x{1c5}AbXY
+ abcDEXypqreXlmn
+\= Expect no match
+ \x{1bb}XY
+ \x{2b0}XY
+ !XY
/^\P{L&}X/utf
- !XY
- \x{1bb}XY
- \x{2b0}XY
- ** Failers
- \x{1c5}XY
- AXY
+ !XY
+ \x{1bb}XY
+ \x{2b0}XY
+\= Expect no match
+ \x{1c5}XY
+ AXY
/^[\P{L&}]X/utf
- !XY
- \x{1bb}XY
- \x{2b0}XY
- ** Failers
- \x{1c5}XY
- AXY
+ !XY
+ \x{1bb}XY
+ \x{2b0}XY
+\= Expect no match
+ \x{1c5}XY
+ AXY
/^(\p{Z}[^\p{C}\p{Z}]+)*$/
\xa0!
@@ -1361,13 +1363,16 @@
123abc\xc4\xc5zz
/\X{1,3}\d/
- \x8aBCD
+\= Expect no match
+ \x8aBCD
/\X?\d/
- \x8aBCD
+\= Expect no match
+ \x8aBCD
/\P{L}?\d/
- \x8aBCD
+\= Expect no match
+ \x8aBCD
/[\PPP\x8a]{1,}\x80/
A\x80
@@ -1389,7 +1394,7 @@
\x{6e9}
\x{6ef}
\x{6fa}
- ** Failers
+\= Expect no match
\x{650}
\x{651}
\x{652}
@@ -1412,7 +1417,7 @@
\x{654}
\x{655}
\x{200c}
- ** Failers
+\= Expect no match
\x{64a}
\x{656}
@@ -1429,7 +1434,7 @@
\x{1049d}
\x{104a0}
\x{104a9}
- ** Failers
+\= Expect no match
\x{1049e}
\x{1049f}
\x{104aa}
@@ -1443,7 +1448,7 @@
/\x{a77d}\x{1d79}/utf
\x{a77d}\x{1d79}
- ** Failers
+\= Expect no match
\x{1d79}\x{a77d}
/(A)\1/i,utf
@@ -1512,11 +1517,11 @@
.+\x{a1}\x{a0}
/\p{Zs}*?\R/
- ** Failers
+\= Expect no match
a\xFCb
/\p{Zs}*\R/
- ** Failers
+\= Expect no match
a\xFCb
/ⱥ/i,utf
@@ -1596,10 +1601,11 @@
\x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
/\X*Z/utf,no_start_optimize
- A\x{300}
+\= Expect no match
+ A\x{300}
/\X*(.)/utf,no_start_optimize
- A\x{1111}\x{ae4c}\x{1169}
+ A\x{1111}\x{ae4c}\x{1169}
# --------------------------------------------
@@ -2036,10 +2042,12 @@
/^\p{Any}*\d{4}/utf
1234
+\= Expect no match
123
/^\X*\w{4}/utf
1234
+\= Expect no match
123
/^A\s+Z/utf,ucp
@@ -2067,7 +2075,7 @@
\x{1d173}\x{1d174}\x{1d175}\x{1d176}\x{1d177}\x{1d178}\x{1d179}\x{1d17a}
\x{e0001}
\x{e0020}\x{e0030}\x{e0040}\x{e0050}\x{e0060}\x{e0070}\x{e007f}
- ** Failers
+\= Expect no match
\x{09}
\x{0a}
\x{1D}
@@ -2107,7 +2115,7 @@
\x{1d173}\x{1d174}\x{1d175}\x{1d176}\x{1d177}\x{1d178}\x{1d179}\x{1d17a}
\x{e0001}
\x{e0020}\x{e0030}\x{e0040}\x{e0050}\x{e0060}\x{e0070}\x{e007f}
- ** Failers
+\= Expect no match
\x{09}
\x{1D}
\x{85}
@@ -2123,14 +2131,14 @@
!\"#%&'()*,-./:;?@[\\]_{}
\x{a1}\x{a7}
\x{37e}
- ** Failers
+\= Expect no match
abcde
/^[[:^graph:]]+$/utf,ucp
\x{09}\x{0a}\x{1D}\x{20}\x{85}\x{a0}\x{1680}
\x{2028}\x{2029}\x{202f}\x{2065}
\x{3000}\x{e0002}\x{e001f}\x{e0080}
- ** Failers
+\= Expect no match
Letter:ABC
Mark:\x{300}\x{1d172}\x{1d17b}
Number:9\x{660}
@@ -2151,7 +2159,7 @@
/^[[:^print:]]+$/utf,ucp
\x{09}\x{1D}\x{85}\x{2028}\x{2029}\x{2065}
\x{e0002}\x{e001f}\x{e0080}
- ** Failers
+\= Expect no match
Space: \x{a0}
\x{1680}\x{2000}\x{2001}\x{2002}\x{2003}\x{2004}\x{2005}
\x{2006}\x{2007}\x{2008}\x{2009}\x{200a}
@@ -2177,7 +2185,7 @@
/^[[:^punct:]]+$/utf,ucp
abcde
- ** Failers
+\= Expect no match
\$+<=>^`|~
!\"#%&'()*,-./:;?@[\\]_{}
\x{a1}\x{a7}
@@ -2213,6 +2221,7 @@
\x{23a}\x{23a}\x{2c65}\x{23a}
/^(\x{23a})\1*(....)/i,utf
+\= Expect no match
\x{23a}\x{2c65}\x{2c65}\x{2c65}
\x{23a}\x{23a}\x{2c65}\x{23a}
@@ -2221,12 +2230,56 @@
"[\S\V\H]"utf
-/\C\X*TӅ;
-{0,6}\v+ F
-/utf
- Ӆ\x0a
+/[^\p{Any}]*+x/utf
+ x
-/\C(\W?ſ)'?{{/utf
- \\C(\\W?ſ)'?{{
+/[[:punct:]]/utf,ucp
+ \x{b4}
+
+/[[:^ascii:]]/utf,ucp
+ \x{100}
+ \x{200}
+ \x{300}
+ \x{37e}
+\= Expect no match
+ aa
+ 99
+
+/[[:^ascii:]\w]/utf,ucp
+ aa
+ 99
+ gg
+ \x{100}
+ \x{200}
+ \x{300}
+ \x{37e}
+
+/[\w[:^ascii:]]/utf,ucp
+ aa
+ 99
+ gg
+ \x{100}
+ \x{200}
+ \x{300}
+ \x{37e}
+
+/[^[:ascii:]\W]/utf,ucp
+ \x{100}
+ \x{200}
+\= Expect no match
+ aa
+ 99
+ gg
+ \x{37e}
+
+/[^[:^ascii:]\d]/utf,ucp
+ a
+ ~
+ \a
+ \x{7f}
+\= Expect no match
+ 0
+ \x{389}
+ \x{20ac}
# End of testinput4
diff --git a/testdata/testinput5 b/testdata/testinput5
index 7e2ba45..2e13a7c 100644
--- a/testdata/testinput5
+++ b/testdata/testinput5
@@ -11,11 +11,11 @@
# test 4.
/^[\p{Arabic}]/utf
- ** Failers
+\= Expect no match
\x{061c}
/^[[:graph:]]+$/utf,ucp
- ** Failers
+\= Expect no match
\x{61c}
\x{2066}
\x{2067}
@@ -23,7 +23,7 @@
\x{2069}
/^[[:print:]]+$/utf,ucp
- ** Failers
+\= Expect no match
\x{61c}
\x{2066}
\x{2067}
@@ -54,6 +54,7 @@
A\x{85}\x{2005}Z
/^[[:graph:]]+$/utf,ucp
+\= Expect no match
\x{180e}
/^[[:print:]]+$/utf,ucp
@@ -63,6 +64,7 @@
\x{09}\x{0a}\x{1D}\x{20}\x{85}\x{a0}\x{61c}\x{1680}\x{180e}
/^[[:^print:]]+$/utf,ucp
+\= Expect no match
\x{180e}
# End of U+180E tests.
@@ -109,12 +111,9 @@
/.{3,5}?/IB,utf
\x{212ab}\x{212ab}\x{212ab}\x{861}
-/(?<=\C)X/utf
- Should produce an error diagnostic
-
/^[ab]/IB,utf
bar
- *** Failers
+\= Expect no match
c
\x{ff}
\x{100}
@@ -123,7 +122,7 @@
c
\x{ff}
\x{100}
- *** Failers
+\= Expect no match
aaa
/\x{100}*(\d+|"(?1)")/utf
@@ -133,7 +132,7 @@
"\x{100}1234"
\x{100}\x{100}12ab
\x{100}\x{100}"12"
- *** Failers
+\= Expect no match
\x{100}\x{100}abcd
/\x{100}*/IB,utf
@@ -147,7 +146,7 @@
/[Ā-Ą]/utf
\x{100}
\x{104}
- *** Failers
+\= Expect no match
\x{105}
\x{ff}
@@ -217,7 +216,7 @@
a\x{85}b
a\x{2028}b
a\x{2029}b
- ** Failers
+\= Expect no match
a\n\rb
/^a\R*b/bsr=unicode,utf
@@ -240,7 +239,7 @@
a\x{85}b
a\n\rb
a\n\r\x{85}\x0cb
- ** Failers
+\= Expect no match
ab
/^a\R{1,3}b/bsr=unicode,utf
@@ -251,34 +250,34 @@
a\r\n\r\n\r\nb
a\n\r\n\rb
a\n\n\r\nb
- ** Failers
+\= Expect no match
a\n\n\n\rb
a\r
/\H\h\V\v/utf
X X\x0a
X\x09X\x0b
- ** Failers
+\= Expect no match
\x{a0} X\x0a
/\H*\h+\V?\v{3,4}/utf
\x09\x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
\x09\x20\x{a0}\x0a\x0b\x0c\x0d\x0a
\x09\x20\x{a0}\x0a\x0b\x0c
- ** Failers
+\= Expect no match
\x09\x20\x{a0}\x0a\x0b
/\H\h\V\v/utf
\x{3001}\x{3000}\x{2030}\x{2028}
X\x{180e}X\x{85}
- ** Failers
+\= Expect no match
\x{2009} X\x0a
/\H*\h+\V?\v{3,4}/utf
\x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x0c\x0d\x0a
\x09\x{205f}\x{a0}\x0a\x{2029}\x0c\x{2028}\x0a
\x09\x20\x{202f}\x0a\x0b\x0c
- ** Failers
+\= Expect no match
\x09\x{200a}\x{a0}\x{2028}\x0b
/[\h]/B,utf
@@ -300,7 +299,7 @@
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x{85}b
a\x0bb
@@ -315,7 +314,7 @@
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x{85}b
a\x0bb
@@ -325,11 +324,10 @@
a\r\nb
a\x{85}b
a\x0bb
- ** Failers
/.*a.*=.b.*/utf,newline=any
QQQ\x{2029}ABCaXYZ=!bPQR
- ** Failers
+\= Expect no match
a\x{2029}b
\x61\xe2\x80\xa9\x62
@@ -338,13 +336,13 @@
/a[^]b/utf,alt_bsux,allow_empty_class,match_unset_backref
a\x{1234}b
a\nb
- ** Failers
+\= Expect no match
ab
/a[^]+b/utf,alt_bsux,allow_empty_class,match_unset_backref
aXb
a\nX\nX\x{1234}b
- ** Failers
+\= Expect no match
ab
/(\x{de})\1/
@@ -396,6 +394,7 @@
X\x{123}\x{123}\x{123}\x{123}\=ps
/X\x{123}{2,4}b/utf
+\= Expect no match
Xx\=ps
X\x{123}x\=ps
X\x{123}\x{123}x\=ps
@@ -403,6 +402,7 @@
X\x{123}\x{123}\x{123}\x{123}x\=ps
/X\x{123}{2,4}?b/utf
+\= Expect no match
Xx\=ps
X\x{123}x\=ps
X\x{123}\x{123}x\=ps
@@ -410,6 +410,7 @@
X\x{123}\x{123}\x{123}\x{123}x\=ps
/X\x{123}{2,4}+b/utf
+\= Expect no match
Xx\=ps
X\x{123}x\=ps
X\x{123}\x{123}x\=ps
@@ -804,6 +805,7 @@
/(?<=\x{1234}\x{1234})\bxy/I,utf
/(?<!^)ETA/utf
+\= Expect no match
ETA
/\u0100/B,utf,alt_bsux,allow_empty_class,match_unset_backref
@@ -834,7 +836,7 @@
1234
12-34
12+\x{661}-34
- ** Failers
+\= Expect no match
abcd
/(?:[\PPa*]*){8,}/
@@ -901,7 +903,7 @@
/^\p{Cs}/utf
\x{dfff}\=no_utf_check
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Mn}/utf
@@ -918,7 +920,7 @@
/^\p{Sc}+/utf
$\x{a2}\x{a3}\x{a4}\x{a5}\x{a6}
\x{9f2}
- ** Failers
+\= Expect no match
X
\x{2c2}
@@ -928,7 +930,7 @@
\x{1680}
\x{2000}
\x{2001}
- ** Failers
+\= Expect no match
\x{2028}
\x{200d}
@@ -937,31 +939,31 @@
/\p{^Lu}/i,utf
1234
- ** Failers
+\= Expect no match
ABC
/\P{Lu}/i,utf
1234
- ** Failers
+\= Expect no match
ABC
/\p{Ll}/i,utf
a
Az
- ** Failers
+\= Expect no match
ABC
/\p{Lu}/i,utf
A
a\x{10a0}B
- ** Failers
+\= Expect no match
a
\x{1d00}
/\p{Lu}/i,utf
A
aZ
- ** Failers
+\= Expect no match
abc
/[\x{c0}\x{391}]/i,utf
@@ -1018,12 +1020,12 @@
\x{6ca}
\x{a6c}
\x{10a7}
- ** Failers
+\= Expect no match
_ABC
/^\p{Xan}+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
- ** Failers
+\= Expect no match
_ABC
/^\p{Xan}+?/utf
@@ -1044,18 +1046,18 @@
\x{6ca}
\x{a6c}
\x{10a7}
- ** Failers
+\= Expect no match
_ABC
/^[\p{Xan}]+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
- ** Failers
+\= Expect no match
_ABC
/^>\p{Xsp}/utf
>\x{1680}\x{2028}\x{0b}
>\x{a0}
- ** Failers
+\= Expect no match
\x{0b}
/^>\p{Xsp}+/utf
@@ -1082,7 +1084,7 @@
/^>\p{Xps}/utf
>\x{1680}\x{2028}\x{0b}
>\x{a0}
- ** Failers
+\= Expect no match
\x{0b}
/^>\p{Xps}+/utf
@@ -1113,7 +1115,7 @@
\x{a6c}
\x{10a7}
_ABC
- ** Failers
+\= Expect no match
[]
/^\p{Xwd}+/utf
@@ -1138,7 +1140,7 @@
\x{a6c}
\x{10a7}
_ABC
- ** Failers
+\= Expect no match
[]
/^[\p{Xwd}]+/utf
@@ -1232,7 +1234,7 @@
/\b...\B/utf
abc_
- ** Failers
+\= Expect no match
\x{37e}abc\x{376}
\x{37e}\x{376}\x{371}\x{393}\x{394}
!\x{c0}++\x{c1}\x{c2}
@@ -1288,9 +1290,11 @@
# These behaved oddly in Perl, so they are kept in this test
/(\x{23a}\x{23a}\x{23a})?\1/i,utf
+\= Expect no match
\x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
/(ȺȺȺ)?\1/i,utf
+\= Expect no match
ȺȺȺⱥⱥ
/(\x{23a}\x{23a}\x{23a})?\1/i,utf
@@ -1300,9 +1304,11 @@
ȺȺȺⱥⱥⱥ
/(\x{23a}\x{23a}\x{23a})\1/i,utf
+\= Expect no match
\x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
/(ȺȺȺ)\1/i,utf
+\= Expect no match
ȺȺȺⱥⱥ
/(\x{23a}\x{23a}\x{23a})\1/i,utf
@@ -1328,19 +1334,19 @@
/^[\p{Batak}]/utf
\x{1bc0}
\x{1bff}
- ** Failers
+\= Expect no match
\x{1bf4}
/^[\p{Brahmi}]/utf
\x{11000}
\x{1106f}
- ** Failers
+\= Expect no match
\x{1104e}
/^[\p{Mandaic}]/utf
\x{840}
\x{85e}
- ** Failers
+\= Expect no match
\x{85c}
\x{85d}
@@ -1355,11 +1361,9 @@
/^a\X41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aX41z
- *** Failers
+\= Expect no match
aAz
-/(?<=ab\Cde)X/utf
-
/\X/
a\=ps
a\=ph
@@ -1453,7 +1457,7 @@
\x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
/\x{3a3}++./i,utf,aftertext
- ** Failers
+\= Expect no match
\x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
/\x{3a3}*\x{3c2}/Bi,utf
@@ -1463,19 +1467,24 @@
/[^a]*\x{3c2}/Bi,utf
/ist/Bi,utf
+\= Expect no match
ikt
/is+t/i,utf
iSs\x{17f}t
+\= Expect no match
ikt
/is+?t/i,utf
+\= Expect no match
ikt
/is?t/i,utf
+\= Expect no match
ikt
/is{2}t/i,utf
+\= Expect no match
iskt
# This property is a PCRE special
@@ -1485,52 +1494,52 @@
@abc
`abc
\x{1234}abc
- ** Failers
+\= Expect no match
abc
/^\p{Xuc}+/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}+?/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}+?\*/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}++/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}{3,5}/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}{3,5}?/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^[\p{Xuc}]/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^[\p{Xuc}]+/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\P{Xuc}/utf
abc
- ** Failers
+\= Expect no match
$abc
@abc
`abc
@@ -1538,7 +1547,7 @@
/^[\P{Xuc}]/utf
abc
- ** Failers
+\= Expect no match
$abc
@abc
`abc
@@ -1603,13 +1612,13 @@
/[\p{L}ab]{2,3}+/B,no_auto_possess
-/\D+\X \d+\X \S+\X \s+\X \W+\X \w+\X \C+\X \R+\X \H+\X \h+\X \V+\X \v+\X a+\X \n+\X .+\X/Bx
+/\D+\X \d+\X \S+\X \s+\X \W+\X \w+\X \R+\X \H+\X \h+\X \V+\X \v+\X a+\X \n+\X .+\X/Bx
/.+\X/Bsx
/\X+$/Bmx
-/\X+\D \X+\d \X+\S \X+\s \X+\W \X+\w \X+. \X+\C \X+\R \X+\H \X+\h \X+\V \X+\v \X+\X \X+\Z \X+\z \X+$/Bx
+/\X+\D \X+\d \X+\S \X+\s \X+\W \X+\w \X+. \X+\R \X+\H \X+\h \X+\V \X+\v \X+\X \X+\Z \X+\z \X+$/Bx
/\d+\s{0,5}=\s*\S?=\w{0,4}\W*/B,utf,ucp
@@ -1634,9 +1643,7 @@
123ábc123
/(?<=abc)(|def)/g,utf,replace=<$0>
- 123abcáyzabcdef789abcሴqr
-
-/[^\xff]((?1))/utf,debug
+ 123abcáyzabcdef789abcሴqr
/[A-`]/iB,utf
abcdefghijklmno
@@ -1651,4 +1658,62 @@
/$(&.+[\p{Me}].\s\xdcC*?(?(<y>))(?<!^)$C((;*?(R))+(?(R)){0,6}?|){12\x8a\X*?\x8a\x0b\xd1^9\3*+(\xc1,\k'P'\xb4)\xcc(z\z(?JJ)(?'X'8};(\x0b\xd1^9\?'3*+(\xc1.]k+\x0b'Pm'\xb4\xcc4'\xd1'(?'X'))?-%--\x95$9*\4'|\xd1(''%\x95*$9)#(?'R')3\x07?('P\xed')\\x16:;()\x1e\x10*:(?<y>)\xd1+!~:(?)''(d'E:yD!\s(?'R'\x1e;\x10:U))|')g!\xb0*){29+))#(?'P'})*?/
+"(*UTF)(*UCP)(.UTF).+X(\V+;\^(\D|)!999}(?(?C{7(?C')\H*\S*/^\x5\xa\\xd3\x85n?(;\D*(?m).[^mH+((*UCP)(*U:F)})(?!^)(?'"
+
+/[\pS#moq]/
+ =
+
+/(*:a\x{12345}b\t(d\)c)xxx/utf,alt_verbnames,mark
+ cxxxz
+
+/abcd/utf,replace=x\x{824}y\o{3333}z(\Q12\$34$$\x34\E5$$),substitute_extended
+ abcd
+
+/a(\x{e0}\x{101})(\x{c0}\x{102})/utf,replace=a\u$1\U$1\E$1\l$2\L$2\Eab\U\x{e0}\x{101}\L\x{d0}\x{160}\EDone,substitute_extended
+ a\x{e0}\x{101}\x{c0}\x{102}
+
+/((?<digit>\d)|(?<letter>\p{L}))/g,substitute_extended,replace=<${digit:+digit; :not digit; }${letter:+letter:not a letter}>
+ ab12cde
+
+/[\W\p{Any}]/B
+ abc
+ 123
+
+/[\W\pL]/B
+ abc
+\= Expect no match
+ 123
+
+/(*UCP)(*UTF)[[:>:]]X/B
+
+/abc/utf,replace=xyz
+ abc\=zero_terminate
+
+/a[[:punct:]b]/ucp,bincode
+
+/a[[:punct:]b]/utf,ucp,bincode
+
+/a[b[:punct:]]/utf,ucp,bincode
+
+/[[:^ascii:]]/utf,ucp,bincode
+
+/[[:^ascii:]\w]/utf,ucp,bincode
+
+/[\w[:^ascii:]]/utf,ucp,bincode
+
+/[^[:ascii:]\W]/utf,ucp,bincode
+ \x{de}
+ \x{200}
+\= Expect no match
+ \x{300}
+ \x{37e}
+
+/[[:^ascii:]a]/utf,ucp,bincode
+
+/L(?#(|++<!(2)?/B,utf,no_auto_possess,auto_callout
+
+/L(?#(|++<!(2)?/B,utf,ucp,auto_callout
+
+/(*UTF)C\x09((?<!'(?x)!*H? #\xcc\x9a[^$]/
+
# End of testinput5
diff --git a/testdata/testinput6 b/testdata/testinput6
index 2651c91..c24b40f 100644
--- a/testdata/testinput6
+++ b/testdata/testinput6
@@ -4,6 +4,7 @@
#forbid_utf
#subject dfa
+#newline_default lf anycrlf any
/abc/
abc
@@ -16,7 +17,7 @@
/ab+c/
abc
abbbbbbc
- *** Failers
+\= Expect no match
ac
ab
@@ -33,59 +34,59 @@
/^abc/
abcdef
- *** Failers
+\= Expect no match
xyzabc
xyz\nabc
/^abc/m
abcdef
xyz\nabc
- *** Failers
+\= Expect no match
xyzabc
/\Aabc/
abcdef
- *** Failers
+\= Expect no match
xyzabc
xyz\nabc
/\Aabc/m
abcdef
- *** Failers
+\= Expect no match
xyzabc
xyz\nabc
/\Gabc/
abcdef
xyzabc\=offset=3
- *** Failers
+\= Expect no match
xyzabc
xyzabc\=offset=2
/x\dy\Dz/
x9yzz
x0y+z
- *** Failers
+\= Expect no match
xyz
xxy0z
/x\sy\Sz/
x yzz
x y+z
- *** Failers
+\= Expect no match
xyz
xxyyz
/x\wy\Wz/
xxy+z
- *** Failers
+\= Expect no match
xxy0z
x+y+z
/x.y/
x+y
x-y
- *** Failers
+\= Expect no match
x\ny
/x.y/s
@@ -97,46 +98,45 @@
a+bc+dp+q
a+bc\ndp+q
x\nyp+q
- *** Failers
+\= Expect no match
a\nbc\ndp+q
a+bc\ndp\nq
x\nyp\nq
/a\d\z/
ba0
- *** Failers
+\= Expect no match
ba0\n
ba0\ncd
/a\d\z/m
ba0
- *** Failers
+\= Expect no match
ba0\n
ba0\ncd
/a\d\Z/
ba0
ba0\n
- *** Failers
+\= Expect no match
ba0\ncd
/a\d\Z/m
ba0
ba0\n
- *** Failers
+\= Expect no match
ba0\ncd
/a\d$/
ba0
ba0\n
- *** Failers
+\= Expect no match
ba0\ncd
/a\d$/m
ba0
ba0\n
ba0\ncd
- *** Failers
/abc/i
abc
@@ -157,14 +157,14 @@
axxyz
axxxyzq
axxxxyzq
- *** Failers
+\= Expect no match
ax
axx
/x{3}yz/
axxxyzq
axxxxyzq
- *** Failers
+\= Expect no match
ax
axx
ayzq
@@ -175,7 +175,7 @@
axxyz
axxxyzq
axxxxyzq
- *** Failers
+\= Expect no match
ax
axx
ayzq
@@ -184,13 +184,12 @@
/[^a]+/no_auto_possess
bac
bcdefax
- *** Failers
+\= Expect no match
aaaaa
/[^a]*/no_auto_possess
bac
bcdefax
- *** Failers
aaaaa
/[^a]{3,5}/no_auto_possess
@@ -198,7 +197,7 @@
awxyza
abcdefa
abcdefghijk
- *** Failers
+\= Expect no match
axya
axa
aaaaa
@@ -213,25 +212,24 @@
/\d+/
ab1234c56
- *** Failers
+\= Expect no match
xyz
/\D+/
ab123c56
- *** Failers
+\= Expect no match
789
/\d?A/
045ABC
ABC
- *** Failers
+\= Expect no match
XYZ
/\D?A/
ABC
BAC
9ABC
- *** Failers
/a+/
aaaa
@@ -243,7 +241,7 @@
/^.+xyz/
abcdxyz
axyz
- *** Failers
+\= Expect no match
xyz
/^.?xyz/
@@ -253,7 +251,7 @@
/^\d{2,3}X/
12X
123X
- *** Failers
+\= Expect no match
X
1X
1234X
@@ -263,7 +261,7 @@
b93
c99z
d04
- *** Failers
+\= Expect no match
e45
abcd
abcd1234
@@ -276,7 +274,7 @@
d04
abcd1234
1234
- *** Failers
+\= Expect no match
e45
abcd
@@ -286,7 +284,7 @@
c99z
d04
abcd1234
- *** Failers
+\= Expect no match
1234
e45
abcd
@@ -301,14 +299,14 @@
c99z
d04
1234
- *** Failers
+\= Expect no match
abcd1234
e45
/^[abcd]{2,3}\d/
ab45
bcd93
- *** Failers
+\= Expect no match
1234
a36
abcd1234
@@ -318,24 +316,23 @@
abc45
abcabcabc45
42xyz
- *** Failers
/^(abc)+\d/
abc45
abcabcabc45
- *** Failers
+\= Expect no match
42xyz
/^(abc)?\d/
abc45
42xyz
- *** Failers
+\= Expect no match
abcabcabc45
/^(abc){2,3}\d/
abcabc45
abcabcabc45
- *** Failers
+\= Expect no match
abcabcabcabc45
abc45
42xyz
@@ -354,7 +351,7 @@
abc
a(b)c
a(b(c))d
- *** Failers)
+\= Expect no match)
a(b(c)d
/^>abc>([^()]|\((?1)*\))*<xyz<$/
@@ -364,7 +361,7 @@
/^(?>a*)\d/
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
- *** Failers
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/< (?: (?(R) \d++ | [^<>]*+) | (?R)) * >/x
@@ -374,33 +371,33 @@
<abc <def> hij>
<abc<>def>
<abc<>
- *** Failers
+\= Expect no match
<abc
/^(?(?=abc)\w{3}:|\d\d)$/
abc:
12
- *** Failers
+\= Expect no match
123
xyz
/^(?(?!abc)\d\d|\w{3}:)$/
abc:
12
- *** Failers
+\= Expect no match
123
xyz
/^(?=abc)\w{5}:$/
abcde:
- *** Failers
+\= Expect no match
abc..
123
vwxyz
/^(?!abc)\d\d$/
12
- *** Failers
+\= Expect no match
abcde:
abc..
123
@@ -409,13 +406,13 @@
/(?<=abc|xy)123/
abc12345
wxy123z
- *** Failers
+\= Expect no match
123abc
/(?<!abc|xy)123/
123abc
mno123456
- *** Failers
+\= Expect no match
abc12345
wxy123z
@@ -430,7 +427,7 @@
/^abc/
abcdef
- *** Failers
+\= Expect no match
abcdef\=notbol
/^(a*|xyz)/
@@ -438,13 +435,13 @@
aaabcd
xyz
xyz\=notempty
- *** Failers
+\= Expect no match
bcd\=notempty
/xyz$/
xyz
xyz\n
- *** Failers
+\= Expect no match
xyz\=noteol
xyz\n\=noteol
@@ -454,20 +451,20 @@
abcxyz\npqr
abcxyz\npqr\=noteol
xyz\n\=noteol
- *** Failers
+\= Expect no match
xyz\=noteol
/\Gabc/
abcdef
defabcxyz\=offset=3
- *** Failers
+\= Expect no match
defabcxyz
/^abcdef/
ab\=ps
abcde\=ps
abcdef\=ps
- *** Failers
+\= Expect no match
abx\=ps
/^a{2,4}\d+z/
@@ -479,7 +476,7 @@
aaaa12345\=ps
aa0z\=ps
aaaa4444444444444z\=ps
- *** Failers
+\= Expect no match
az\=ps
aaaaa\=ps
a56\=ps
@@ -489,26 +486,26 @@
def\=dfa_restart
/(?<=foo)bar/
- xyzfo\=ps
foob\=ps,offset=2
foobar...\=ps,dfa_restart,offset=4
- xyzfo\=ps
foobar\=offset=2
- *** Failers
+\= Expect no match
xyzfo\=ps
obar\=dfa_restart
/(ab*(cd|ef))+X/
- adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=ps,notbol,noteol
cdabbbbbbbb\=ps,notbol,dfa_restart,noteol
efabbbbbbbbbbbbbbbb\=ps,notbol,dfa_restart,noteol
bbbbbbbbbbbbcdXyasdfadf\=ps,notbol,dfa_restart,noteol
+\= Expect no match
+ adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
/the quick brown fox/
the quick brown fox
- The quick brown FOX
What do you know about the quick brown fox?
+\= Expect no match
+ The quick brown FOX
What do you know about THE QUICK BROWN FOX?
/The quick brown fox/i
@@ -551,7 +548,7 @@
>>>aaabxyzpqrrrabbxyyyypqAzz
>aaaabxyzpqrrrabbxyyyypqAzz
>>>>abcxyzpqrrrabbxyyyypqAzz
- *** Failers
+\= Expect no match
abxyzpqrrabbxyyyypqAzz
abxyzpqrrrrabbxyyyypqAzz
abxyzpqrrrabxyyyypqAzz
@@ -562,7 +559,7 @@
/^(abc){1,2}zz/
abczz
abcabczz
- *** Failers
+\= Expect no match
zz
abcabcabczz
>>abczz
@@ -576,7 +573,7 @@
aac
abbbbbbbbbbbc
bbbbbbbbbbbac
- *** Failers
+\= Expect no match
aaac
abbbbbbbbbbbac
@@ -589,7 +586,7 @@
aac
abbbbbbbbbbbc
bbbbbbbbbbbac
- *** Failers
+\= Expect no match
aaac
abbbbbbbbbbbac
@@ -600,7 +597,7 @@
babc
bbabc
bababc
- *** Failers
+\= Expect no match
bababbc
babababc
@@ -608,7 +605,7 @@
babc
bbabc
bababc
- *** Failers
+\= Expect no match
bababbc
babababc
@@ -622,7 +619,7 @@
cthing
dthing
ething
- *** Failers
+\= Expect no match
fthing
[thing
\\thing
@@ -632,7 +629,7 @@
cthing
dthing
ething
- *** Failers
+\= Expect no match
athing
fthing
@@ -640,7 +637,7 @@
fthing
[thing
\\thing
- *** Failers
+\= Expect no match
athing
bthing
]thing
@@ -651,7 +648,7 @@
/^[^]cde]/
athing
fthing
- *** Failers
+\= Expect no match
]thing
cthing
dthing
@@ -676,7 +673,7 @@
9
10
100
- *** Failers
+\= Expect no match
abc
/^.*nter/
@@ -687,28 +684,28 @@
/^xxx[0-9]+$/
xxx0
xxx1234
- *** Failers
+\= Expect no match
xxx
/^.+[0-9][0-9][0-9]$/
x123
xx123
123456
- *** Failers
- 123
x1234
+\= Expect no match
+ 123
/^.+?[0-9][0-9][0-9]$/
x123
xx123
123456
- *** Failers
- 123
x1234
+\= Expect no match
+ 123
/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
abc!pqr=apquxz.ixr.zzz.ac.uk
- *** Failers
+\= Expect no match
!pqr=apquxz.ixr.zzz.ac.uk
abc!=apquxz.ixr.zzz.ac.uk
abc!pqr=apquxz:ixr.zzz.ac.uk
@@ -716,7 +713,8 @@
/:/
Well, we need a colon: somewhere
- *** Fail if we don't
+\= Expect no match
+ No match without a colon
/([\da-f:]+)$/i
0abc
@@ -727,7 +725,7 @@
5f03:12C0::932e
fed def
Any old stuff
- *** Failers
+\= Expect no match
0zzz
gzzz
fed\x20
@@ -736,7 +734,7 @@
/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
.1.2.3
A.12.123.0
- *** Failers
+\= Expect no match
.1.2.3333
1.2.3
1234.2.3
@@ -744,7 +742,7 @@
/^(\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
+\= Expect no match
1IN SOA non-sp1 non-sp2(
/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
@@ -754,7 +752,7 @@
ab-c.pq-r.
sxk.zzz.ac.uk.
x-.y-.
- *** Failers
+\= Expect no match
-abc.peq.
/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
@@ -762,7 +760,7 @@
*.b0-a
*.c3-b.c
*.c-a.b-c
- *** Failers
+\= Expect no match
*.0
*.a-
*.a-b.c-
@@ -786,29 +784,28 @@
\"1234\"
\"abcd\" ;
\"\" ; rhubarb
- *** Failers
+\= Expect no match
\"1234\" : things
/^$/
\
- *** Failers
/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
ab c
- *** Failers
+\= Expect no match
abc
ab cde
/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
ab c
- *** Failers
+\= Expect no match
abc
ab cde
/^ a\ b[c ]d $/x
a bcd
a b d
- *** Failers
+\= Expect no match
abcd
ab d
@@ -862,7 +859,7 @@
1234567890
12345678ab
12345678__
- *** Failers
+\= Expect no match
1234567
/^[aeiou\d]{4,5}$/
@@ -870,7 +867,7 @@
1234
12345
aaaaa
- *** Failers
+\= Expect no match
123456
/^[aeiou\d]{4,5}?/
@@ -886,7 +883,7 @@
/^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
+\= Expect no match
From abcd Sep 01 12:33:02 1997
/^12.34/s
@@ -907,7 +904,7 @@
/^(\D*)(?=\d)(?!123)/
abc456
- *** Failers
+\= Expect no match
abc123
/^1234(?# test newlines
@@ -927,12 +924,12 @@
/(?!^)abc/
the abc
- *** Failers
+\= Expect no match
abc
/(?=^)abc/
abc
- *** Failers
+\= Expect no match
the abc
/^[ab]{1,3}(ab*|b)/no_auto_possess
@@ -1148,7 +1145,7 @@
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
+\= Expect no match
The quick brown fox
/[\040\t]* # Nab whitespace.
@@ -1740,7 +1737,7 @@
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
+\= Expect no match
The quick brown fox
/abc\0def\00pqr\000xyz\0000AB/
@@ -1762,7 +1759,7 @@
/A\x0{2,3}Z/
The A\x0\x0Z
An A\0\x0\0Z
- *** Failers
+\= Expect no match
A\0Z
A\0\x0\0\x0Z
@@ -1772,7 +1769,7 @@
\nabc
\rabc
\tabc
- *** Failers
+\= Expect no match
abc
/^a b
@@ -1783,7 +1780,7 @@
abbbbc
abbbc
abbc
- *** Failers
+\= Expect no match
abc
abbbbbc
@@ -1798,7 +1795,7 @@
/^[W-c]+$/
WXY_^abc
- *** Failers
+\= Expect no match
wxy
/^[W-c]+$/i
@@ -1817,7 +1814,7 @@
/^abc$/
abc
- *** Failers
+\= Expect no match
qqq\nabc
abc\nzzz
qqq\nabc\nzzz
@@ -1825,7 +1822,7 @@
/\Aabc\Z/m
abc
abc\n
- *** Failers
+\= Expect no match
qqq\nabc
abc\nzzz
qqq\nabc\nzzz
@@ -1834,7 +1831,7 @@
abc\ndef
/\A(.)*\Z/m
- *** Failers
+\= Expect no match
abc\ndef
/(?:b)|(?::+)/
@@ -1843,17 +1840,17 @@
/[-az]+/
az-
- *** Failers
+\= Expect no match
b
/[az-]+/
za-
- *** Failers
+\= Expect no match
b
/[a\-z]+/
a-z
- *** Failers
+\= Expect no match
b
/[a-z]+/
@@ -1861,12 +1858,12 @@
/[\d-]+/
12-34
- *** Failers
+\= Expect no match
aaa
/[\d-z]+/
12-34z
- *** Failers
+\= Expect no match
aaa
/\x5c/
@@ -1874,7 +1871,7 @@
/\x20Z/
the Zoo
- *** Failers
+\= Expect no match
Zulu
/ab{3cd/
@@ -1891,13 +1888,13 @@
/^a.b/newline=lf
a\rb
- *** Failers
+\= Expect no match
a\nb
/abc$/
abc
abc\n
- *** Failers
+\= Expect no match
abc\ndef
/(abc)\123/
@@ -1947,7 +1944,7 @@
baNOTcccd
baNOTccd
bacccd
- *** Failers
+\= Expect no match
anything
b\bc
baccd
@@ -1969,14 +1966,14 @@
/[^k]$/
abc
- *** Failers
+\= Expect no match
abk
/[^k]{2,3}$/
abc
kbc
kabc
- *** Failers
+\= Expect no match
abk
akb
akk
@@ -1984,7 +1981,7 @@
/^\d{8,}\@.+[^k]$/
12345678\@a.b.c.d
123456789\@x.y.z
- *** Failers
+\= Expect no match
12345678\@x.y.uk
1234567\@a.b.c.d
@@ -2021,7 +2018,7 @@
/(\.\d\d((?=0)|\d(?=\d)))/
1.230003938
1.875000282
- *** Failers
+\= Expect no match
1.235
/a(?)b/
@@ -2065,13 +2062,13 @@
/^(\D*)(?=\d)(?!123)/
ABC445
- *** Failers
+\= Expect no match
ABC123
/^[W-]46]/
W46]789
-46]789
- *** Failers
+\= Expect no match
Wall
Zebra
42
@@ -2087,7 +2084,7 @@
[abcd]
]abcd[
\\backslash
- *** Failers
+\= Expect no match
-46]789
well
@@ -2096,9 +2093,11 @@
/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
word cat dog elephant mussel cow horse canary baboon snake shark otherword
+\= Expect no match
word cat dog elephant mussel cow horse canary baboon snake shark
/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+\= Expect no match
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}/
@@ -2130,27 +2129,31 @@
aaaaaaaa
/^(a){1,1}/
- bcd
abc
aab
+\= Expect no match
+ bcd
/^(a){1,2}/
- bcd
abc
aab
+\= Expect no match
+ bcd
/^(a){1,3}/
- bcd
abc
aab
aaa
+\= Expect no match
+ bcd
/^(a){1,}/
- bcd
abc
aab
aaa
aaaaaaaa
+\= Expect no match
+ bcd
/.*\.gif/
borfle\nbib.gif\nno
@@ -2194,7 +2197,7 @@
/(.*X|^B)/
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/(.*X|^B)/m
@@ -2205,7 +2208,7 @@
/(.*X|^B)/s
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/(.*X|^B)/ms
@@ -2216,17 +2219,17 @@
/(?s)(.*X|^B)/
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/(?s:.*X|^B)/
abcde\n1234Xyz
BarFoo
- *** Failers
+\= Expect no match
abcde\nBar
/^.*B/
- **** Failers
+\= Expect no match
abc\nB
/(?s)^.*B/
@@ -2264,34 +2267,34 @@
/^[abcdefghijklmnopqrstuvwxy0123456789]/
n
- *** Failers
+\= Expect no match
z
/abcde{0,0}/
abcd
- *** Failers
+\= Expect no match
abce
/ab[cd]{0,0}e/
abe
- *** Failers
+\= Expect no match
abcde
/ab(c){0,0}d/
abd
- *** Failers
+\= Expect no match
abcd
/a(b*)/
a
ab
abbbb
- *** Failers
+\= Expect no match
bbbbb
/ab\d{0}e/
abe
- *** Failers
+\= Expect no match
ab1e
/"([^\\"]+|\\.)*"/
@@ -2319,7 +2322,7 @@
/a.b/
acb
- *** Failers
+\= Expect no match
a\nb
/a[^a]b/s
@@ -2345,8 +2348,9 @@
bbbbbac
/(?!\A)x/m
- x\nb\n
a\bx\n
+\= Expect no match
+ x\nb\n
/\x0{ab}/
\0{ab}
@@ -2362,32 +2366,33 @@
catfood
arfootle
rfoosh
- *** Failers
+\= Expect no match
barfoo
towbarfoo
/\w{3}(?<!bar)foo/
catfood
- *** Failers
+\= Expect no match
foo
barfoo
towbarfoo
/(?<=(foo)a)bar/
fooabar
- *** Failers
+\= Expect no match
bar
foobbar
/\Aabc\z/m
abc
- *** Failers
+\= Expect no match
abc\n
qqq\nabc
abc\nzzz
qqq\nabc\nzzz
"(?>.*/)foo"
+\= Expect no match
/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
"(?>.*/)foo"
@@ -2396,12 +2401,12 @@
/(?>(\.\d\d[1-9]?))\d+/
1.230003938
1.875000282
- *** Failers
+\= Expect no match
1.235
/^((?>\w+)|(?>\s+))*$/
now is the time for all good men to come to the aid of the party
- *** Failers
+\= Expect no match
this is not a line with only words and spaces!
/(\d+)(\w)/
@@ -2410,7 +2415,7 @@
/((?>\d+))(\w)/
12345a
- *** Failers
+\= Expect no match
12345+
/(?>a+)b/
@@ -2437,32 +2442,32 @@
/\(((?>[^()]+)|\([^()]+\))+\)/
(abc)
(abc(def)xyz)
- *** Failers
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/a(?-i)b/i
ab
Ab
- *** Failers
+\= Expect no match
aB
AB
/(a (?x)b c)d e/
a bcd e
- *** Failers
+\= Expect no match
a b cd e
abcd e
a bcde
/(a b(?x)c d (?-x)e f)/
a bcde f
- *** Failers
+\= Expect no match
abcdef
/(a(?i)b)c/
abc
aBc
- *** Failers
+\= Expect no match
abC
aBC
Abc
@@ -2473,7 +2478,7 @@
/a(?i:b)c/
abc
aBc
- *** Failers
+\= Expect no match
ABC
abC
aBC
@@ -2481,14 +2486,14 @@
/a(?i:b)*c/
aBc
aBBc
- *** Failers
+\= Expect no match
aBC
aBBC
/a(?=b(?i)c)\w\wd/
abcd
abCd
- *** Failers
+\= Expect no match
aBCd
abcD
@@ -2496,7 +2501,7 @@
more than million
more than MILLION
more \n than Million
- *** Failers
+\= Expect no match
MORE THAN MILLION
more \n than \n million
@@ -2504,7 +2509,7 @@
more than million
more than MILLION
more \n than Million
- *** Failers
+\= Expect no match
MORE THAN MILLION
more \n than \n million
@@ -2512,7 +2517,7 @@
abc
aBbc
aBBc
- *** Failers
+\= Expect no match
Abc
abAb
abbC
@@ -2520,7 +2525,7 @@
/(?=a(?i)b)\w\wc/
abc
aBc
- *** Failers
+\= Expect no match
Ab
abC
aBC
@@ -2528,7 +2533,7 @@
/(?<=a(?i)b)(\w\w)c/
abxxc
aBxxc
- *** Failers
+\= Expect no match
Abxxc
ABxxc
abxxC
@@ -2536,14 +2541,14 @@
/^(?(?=abc)\w{3}:|\d\d)$/
abc:
12
- *** Failers
+\= Expect no match
123
xyz
/^(?(?!abc)\d\d|\w{3}:)$/
abc:
12
- *** Failers
+\= Expect no match
123
xyz
@@ -2552,7 +2557,7 @@
cat
fcat
focat
- *** Failers
+\= Expect no match
foocat
/(?(?<!foo)cat|bar)/
@@ -2560,7 +2565,7 @@
cat
fcat
focat
- *** Failers
+\= Expect no match
foocat
/(?>a*)*/
@@ -2629,7 +2634,7 @@
/(?(?=[^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
+\= Expect no match
sep-12-98
/(?i:saturday|sunday)/
@@ -2646,7 +2651,7 @@
aBCx
bbx
BBx
- *** Failers
+\= Expect no match
abcX
aBCX
bbX
@@ -2660,7 +2665,7 @@
Europe
frog
France
- *** Failers
+\= Expect no match
Africa
/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
@@ -2670,13 +2675,13 @@
xY
zebra
Zambesi
- *** Failers
+\= Expect no match
aCD
XY
/(?<=foo\n)^bar/m
foo\nbar
- *** Failers
+\= Expect no match
bar
baz\nbar
@@ -2684,18 +2689,18 @@
barbaz
barbarbaz
koobarbaz
- *** Failers
+\= Expect no match
baz
foobarbaz
-/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./
+# 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
+\= Expect no match
xbc
axc
abx
@@ -2719,7 +2724,7 @@
/ab+bc/
abbc
- *** Failers
+\= Expect no match
abc
abq
@@ -2736,7 +2741,7 @@
abbbbc
/ab{4,5}bc/
- *** Failers
+\= Expect no match
abq
abbbbc
@@ -2757,7 +2762,7 @@
/^abc$/
abc
- *** Failers
+\= Expect no match
abbbbc
abcc
@@ -2768,8 +2773,8 @@
/abc$/
aabc
- *** Failers
aabc
+\= Expect no match
aabcd
/^/
@@ -2787,7 +2792,7 @@
/a[bc]d/
abd
- *** Failers
+\= Expect no match
axyzd
abc
@@ -2811,7 +2816,7 @@
/a[^bc]d/
aed
- *** Failers
+\= Expect no match
abd
abd
@@ -2820,8 +2825,8 @@
/a[^]b]c/
adc
- *** Failers
a-c
+\= Expect no match
a]c
/\ba\b/
@@ -2830,13 +2835,13 @@
-a-
/\by\b/
- *** Failers
+\= Expect no match
xy
yz
xyz
/\Ba\B/
- *** Failers
+\= Expect no match
a-
-a
-a-
@@ -2855,8 +2860,7 @@
/\W/
-
- *** Failers
- -
+\= Expect no match
a
/a\sb/
@@ -2864,8 +2868,7 @@
/a\Sb/
a-b
- *** Failers
- a-b
+\= Expect no match
a b
/\d/
@@ -2873,8 +2876,7 @@
/\D/
-
- *** Failers
- -
+\= Expect no match
1
/[\w]/
@@ -2882,8 +2884,7 @@
/[\W]/
-
- *** Failers
- -
+\= Expect no match
a
/a[\s]b/
@@ -2891,8 +2892,7 @@
/a[\S]b/
a-b
- *** Failers
- a-b
+\= Expect no match
a b
/[\d]/
@@ -2900,8 +2900,7 @@
/[\D]/
-
- *** Failers
- -
+\= Expect no match
1
/ab|cd/
@@ -2921,6 +2920,8 @@
a((b
/a\\b/
+ a\\b
+\= Expect no match
a\b
/((a))/
@@ -2960,12 +2961,10 @@
cde
/abc/
- *** Failers
+\= Expect no match
b
-
/a*/
-
/([abc])*d/
abbbcd
@@ -3019,7 +3018,7 @@
adcdcde
/a[bcd]+dcdcde/
- *** Failers
+\= Expect no match
abcde
adcdcde
@@ -3039,7 +3038,7 @@
effgz
ij
reffgz
- *** Failers
+\= Expect no match
effg
bcdd
@@ -3050,7 +3049,7 @@
a
/multiple words of text/
- *** Failers
+\= Expect no match
aa
uh-uh
@@ -3078,7 +3077,7 @@
ABC
XABCY
ABABC
- *** Failers
+\= Expect no match
aaxabxbaxbbx
XBC
AXC
@@ -3101,7 +3100,7 @@
ABBC
/ab+bc/i
- *** Failers
+\= Expect no match
ABC
ABQ
@@ -3120,7 +3119,7 @@
ABBBBC
/ab{4,5}?bc/i
- *** Failers
+\= Expect no match
ABQ
ABBBBC
@@ -3141,7 +3140,7 @@
/^abc$/i
ABC
- *** Failers
+\= Expect no match
ABBBBC
ABCC
@@ -3167,8 +3166,8 @@
AXYZC
/a.*c/i
- *** Failers
AABC
+\= Expect no match
AXYZD
/a[bc]d/i
@@ -3176,7 +3175,7 @@
/a[b-d]e/i
ACE
- *** Failers
+\= Expect no match
ABC
ABD
@@ -3200,7 +3199,7 @@
/a[^-b]c/i
ADC
- *** Failers
+\= Expect no match
ABD
A-C
@@ -3215,7 +3214,7 @@
DEF
/$b/i
- *** Failers
+\= Expect no match
A]C
B
@@ -3227,6 +3226,7 @@
A((B
/a\\b/i
+\= Expect no match
A\=notbol
/((a))/i
@@ -3277,7 +3277,6 @@
/abc/i
/a*/i
-
/([abc])*d/i
ABBBCD
@@ -3305,6 +3304,7 @@
HIJ
/^(ab|cd)e/i
+\= Expect no match
ABCDE
/(abc|)ef/i
@@ -3349,7 +3349,7 @@
EFFGZ
IJ
REFFGZ
- *** Failers
+\= Expect no match
ADCDCDE
EFFG
BCDD
@@ -3367,7 +3367,7 @@
C
/multiple words of text/i
- *** Failers
+\= Expect no match
AA
UH-UH
@@ -3460,7 +3460,7 @@
/(?<=a)b/
ab
- *** Failers
+\= Expect no match
cb
b
@@ -3506,7 +3506,7 @@
Ab
/(?:(?i)a)b/
- *** Failers
+\= Expect no match
cb
aB
@@ -3525,7 +3525,7 @@
Ab
/(?i:a)b/
- *** Failers
+\= Expect no match
aB
aB
@@ -3544,8 +3544,8 @@
aB
/(?:(?-i)a)b/i
- *** Failers
aB
+\= Expect no match
Ab
/((?-i)a)b/i
@@ -3557,7 +3557,7 @@
aB
/(?:(?-i)a)b/i
- *** Failers
+\= Expect no match
Ab
AB
@@ -3576,7 +3576,7 @@
aB
/(?-i:a)b/i
- *** Failers
+\= Expect no match
AB
Ab
@@ -3589,14 +3589,14 @@
aB
/(?-i:a)b/i
- *** Failers
+\= Expect no match
Ab
AB
/((?-i:a))b/i
/((?-i:a.))b/i
- *** Failers
+\= Expect no match
AB
a\nB
@@ -3622,7 +3622,7 @@
aaac
/(?<![cd])b/
- *** Failers
+\= Expect no match
B\nB
dbcb
@@ -3638,7 +3638,7 @@
cdaccb
/^(?:a?b?)*$/
- *** Failers
+\= Expect no match
dbcb
a--
@@ -3671,7 +3671,7 @@
/^b/
/()^b/
- *** Failers
+\= Expect no match
a\nb\nc\n
a\nb\nc\n
@@ -3684,7 +3684,7 @@
a
/(?(?=a)b|a)/
- *** Failers
+\= Expect no match
a
a
@@ -3710,7 +3710,7 @@
/([\w:]+::)?(\w+)$/
abcd
xy:z:::abcd
- *** Failers
+\= Expect no match
abcd:
abcd:
@@ -3741,7 +3741,7 @@
((abc(ade)ufh()()x
/a\Z/
- *** Failers
+\= Expect no match
aaab
a\nb\n
@@ -3755,43 +3755,44 @@
/b\z/
a\nb
- *** Failers
/(?>.*)(?<=(abcd|wxyz))/
alphabetabcd
endingwxyz
- *** Failers
+\= Expect no match
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
+\= Expect no match
word cat dog elephant mussel cow horse canary baboon snake shark
/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
+\= Expect no match
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
+\= Expect no match
123abcfoo
/(?<=(?!...999)\d{3})foo/
999foo
123999foo
- *** Failers
+\= Expect no match
123abcfoo
/(?<=\d{3}(?!999)...)foo/
123abcfoo
123456foo
- *** Failers
+\= Expect no match
123999foo
/(?<=\d{3}...)(?<!999)foo/
123abcfoo
123456foo
- *** Failers
+\= Expect no match
123999foo
/((Z)+|A)*/
@@ -3816,7 +3817,7 @@
abcde
-things
0digit
- *** Failers
+\= Expect no match
bcdef
/[[:space:]]+/
@@ -3838,7 +3839,8 @@
a\nxb\n
/(?!^)x/m
- a\nxb\n
+\= Expect no match
+ a\nxb\n
/abc\Qabc\Eabc/
abcabcabc
@@ -3848,7 +3850,7 @@
/ abc\Q abc\Eabc/x
abc abcabc
- *** Failers
+\= Expect no match
abcabcabc
/abc#comment
@@ -3880,7 +3882,7 @@
/\Gabc/
abc
- *** Failers
+\= Expect no match
xyzabc
/\Gabc./g
@@ -3891,7 +3893,7 @@
/a(?x: b c )d/
XabcdY
- *** Failers
+\= Expect no match
Xa b c d Y
/((?x)x y z | a b c)/
@@ -3900,13 +3902,13 @@
/(?i)AB(?-i)C/
XabCY
- *** Failers
+\= Expect no match
XabcY
/((?i)AB(?-i)C|D)E/
abCE
DE
- *** Failers
+\= Expect no match
abcE
abCe
dE
@@ -3918,10 +3920,11 @@
-
d
]
- *** Failers
+\= Expect no match
b
/(a+)*b/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?i)reg(?:ul(?:[a]|ae)r|ex)/
@@ -3952,16 +3955,17 @@
/line\nbreak/firstline
this is a line\nbreak
- ** Failers
+\= Expect no match
line one\nthis is a line\nbreak in the second line
/line\nbreak/m,firstline
this is a line\nbreak
- ** Failers
+\= Expect no match
line one\nthis is a line\nbreak in the second line
/1234/
123\=ps
+\= Expect no match
a4\=ps,dfa_restart
/1234/
@@ -4006,7 +4010,7 @@
/^abc/Im,newline=lf
xyz\nabc
xyz\r\nabc
- ** Failers
+\= Expect no match
xyz\rabc
xyzabc\r
xyzabc\rpqr
@@ -4015,13 +4019,13 @@
/^abc/Im,newline=crlf
xyz\r\nabclf>
- ** Failers
+\= Expect no match
xyz\nabclf
xyz\rabclf
/^abc/Im,newline=cr
xyz\rabc
- ** Failers
+\= Expect no match
xyz\nabc
xyz\r\nabc
@@ -4066,34 +4070,37 @@
aaaa
/(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?>a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/(?:a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
/^a.b/newline=lf
a\rb
- ** Failers
+\= Expect no match
a\nb
/^a.b/newline=cr
a\nb
- ** Failers
+\= Expect no match
a\rb
/^a.b/newline=anycrlf
a\x85b
- ** Failers
+\= Expect no match
a\rb
/^a.b/newline=any
- ** Failers
+\= Expect no match
a\nb
a\rb
a\x85b
@@ -4111,7 +4118,7 @@
a\x0bb
a\x0cb
a\x85b
- ** Failers
+\= Expect no match
a\n\rb
/^a\R*b/bsr=unicode
@@ -4134,7 +4141,7 @@
a\x85b
a\n\rb
a\n\r\x85\x0cb
- ** Failers
+\= Expect no match
ab
/^a\R{1,3}b/bsr=unicode
@@ -4145,25 +4152,25 @@
a\r\n\r\n\r\nb
a\n\r\n\rb
a\n\n\r\nb
- ** Failers
+\= Expect no match
a\n\n\n\rb
a\r
/.+foo/
afoo
- ** Failers
+\= Expect no match
\r\nfoo
\nfoo
/.+foo/newline=crlf
afoo
\nfoo
- ** Failers
+\= Expect no match
\r\nfoo
/.+foo/newline=any
afoo
- ** Failers
+\= Expect no match
\nfoo
\r\nfoo
@@ -4175,12 +4182,12 @@
/^$/gm,newline=any
abc\r\rxyz
abc\n\rxyz
- ** Failers
+\= Expect no match
abc\r\nxyz
/^X/m
XABC
- ** Failers
+\= Expect no match
XABC\=notbol
/(?m)^$/g,newline=any,aftertext
@@ -4207,20 +4214,20 @@
/(?|(abc)|(xyz))(?1)/
abcabc
xyzabc
- ** Failers
+\= Expect no match
xyzxyz
/\H\h\V\v/
X X\x0a
X\x09X\x0b
- ** Failers
+\= Expect no match
\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
+\= Expect no match
\x09\x20\xa0\x0a\x0b
/\H{3,4}/
@@ -4233,7 +4240,7 @@
/\h*X\h?\H+Y\H?Z/
>XNNNYZ
> X NYQZ
- ** Failers
+\= Expect no match
>XYZ
> X NY Z
@@ -4242,6 +4249,7 @@
>\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
/.+A/newline=crlf
+\= Expect no match
\r\nA
/\nA/newline=crlf
@@ -4257,7 +4265,7 @@
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x85b
a\x0bb
@@ -4272,7 +4280,7 @@
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x85b
a\x0bb
@@ -4287,49 +4295,49 @@
a\r\n\nb
a\n\r\rb
a\r\n\r\n\r\n\r\nb
- ** Failers
+\= Expect no match
+ a\x0b\x0bb
a\x85\x85b
- 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\x85b
- a\x0b\0bb
- ** Failers
+ a\x0b\x0bb
+\= Expect no match
a\r\r\r\r\rb
/a(?!)|\wbc/
abc
/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
+\= Expect no match
ab
/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
+\= Expect no match
ab
/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
+\= Expect no match
ab
/a[^]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aXb
a\nb
- ** Failers
+\= Expect no match
ab
/a[^]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aXb
a\nX\nXb
- ** Failers
+\= Expect no match
ab
/X$/dollar_endonly
X
- ** Failers
+\= Expect no match
X\n
/X$/
@@ -4339,13 +4347,13 @@
/xyz/auto_callout
xyz
abcxyz
- ** Failers
+\= Expect no match
abc
abcxypqr
/xyz/auto_callout,no_start_optimize
abcxyz
- ** Failers
+\= Expect no match
abc
abcxypqr
@@ -4369,10 +4377,12 @@
++++123999Y\=ps
/Z(*F)/
+\= Expect no match
Z\=ps
ZA\=ps
/Z(?!)/
+\= Expect no match
Z\=ps
ZA\=ps
@@ -4394,6 +4404,7 @@
/Z(*F)Q|ZXY/
Z\=ps
+\= Expect no match
ZA\=ps
X\=ps
@@ -4432,13 +4443,13 @@
/(abc|def|xyz)/I
terhjk;abcdaadsfe
the quick xyz brown fox
- ** Failers
+\= Expect no match
thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
/(abc|def|xyz)/I,no_start_optimize
terhjk;abcdaadsfe
the quick xyz brown fox
- ** Failers
+\= Expect no match
thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
/abcd*/aftertext
@@ -4465,13 +4476,13 @@
/(?:(?1)|B)(A(*F)|C)/
ABCD
CCD
- ** Failers
+\= Expect no match
CAD
/^(?:(?1)|B)(A(*F)|C)/
CCD
BCD
- ** Failers
+\= Expect no match
ABCD
CAD
BAD
@@ -4480,7 +4491,6 @@
ac
/^(?=a(*SKIP)b|ac)/
- ** Failers
ac
/^(?=a(*THEN)b|ac)/
@@ -4488,8 +4498,6 @@
/^(?=a(*PRUNE)b)/
ab
- ** Failers
- ac
/^(?(?!a(*SKIP)b))/
ac
@@ -4526,68 +4534,71 @@
abc\=ph
/abc\B/
- abc
abc\=ps
abc\=ph
+\= Expect no match
+ abc
/.+/
abc\=offset=0
abc\=offset=1
abc\=offset=2
- abc\=offset=3
+\= Bad offsets
abc\=offset=4
abc\=offset=-4
+\= Expect no match
+ abc\=offset=3
/^(?:a)++\w/
aaaab
- ** Failers
+\= Expect no match
aaaa
bbb
/^(?:aa|(?:a)++\w)/
aaaab
aaaa
- ** Failers
+\= Expect no match
bbb
/^(?:a)*+\w/
aaaab
bbb
- ** Failers
+\= Expect no match
aaaa
/^(a)++\w/
aaaab
- ** Failers
+\= Expect no match
aaaa
bbb
/^(a|)++\w/
aaaab
- ** Failers
+\= Expect no match
aaaa
bbb
/(?=abc){3}abc/aftertext
abcabcabc
- ** Failers
+\= Expect no match
xyz
/(?=abc)+abc/aftertext
abcabcabc
- ** Failers
+\= Expect no match
xyz
/(?=abc)++abc/aftertext
abcabcabc
- ** Failers
+\= Expect no match
xyz
/(?=abc){0}xyz/
xyz
/(?=abc){1}xyz/
- ** Failers
+\= Expect no match
xyz
/(?=(a))?./
@@ -4634,12 +4645,6 @@
aaaa\=ovector=3
aaaa\=ovector=4
-/ab\Cde/
- abXde
-
-/(?<=ab\Cde)X/
- abZdeX
-
/^\R/
\r\=ps
\r\=ph
@@ -4848,6 +4853,7 @@
/(?(?!)a|b)/
bbb
+\= Expect no match
aaa
/^/gm
@@ -4856,4 +4862,21 @@
/^/gm,alt_circumflex
\n\n\n
+/abc/use_offset_limit
+ 1234abcde\=offset_limit=100
+ 1234abcde\=offset_limit=9
+ 1234abcde\=offset_limit=4
+ 1234abcde\=offset_limit=4,offset=4
+\= Expect no match
+ 1234abcde\=offset_limit=4,offset=5
+ 1234abcde\=offset_limit=3
+
+/(?<=abc)/use_offset_limit
+ 1234abc\=offset_limit=7
+\= Expect no match
+ 1234abc\=offset_limit=6
+
+/abcd/null_context
+ abcd\=null_context
+
# End of testinput6
diff --git a/testdata/testinput7 b/testdata/testinput7
index 879a414..ef30223 100644
--- a/testdata/testinput7
+++ b/testdata/testinput7
@@ -3,6 +3,7 @@
# used to force DFA matching for all tests.
#subject dfa
+#newline_default LF any anyCRLF
/\x{100}ab/utf
\x{100}ab
@@ -15,19 +16,19 @@
/a\x{100}+b/utf
a\x{100}b
a\x{100}\x{100}b
- *** Failers
+\= Expect no match
ab
/\bX/utf
Xoanon
+Xoanon
\x{300}Xoanon
- *** Failers
+\= Expect no match
YXoanon
/\BX/utf
YXoanon
- *** Failers
+\= Expect no match
Xoanon
+Xoanon
\x{300}Xoanon
@@ -36,12 +37,12 @@
X+oanon
ZX\x{300}oanon
FAX
- *** Failers
+\= Expect no match
Xoanon
/X\B/utf
Xoanon
- *** Failers
+\= Expect no match
X+oanon
ZX\x{300}oanon
FAX
@@ -54,7 +55,7 @@
ab99
\x{123}\x{123}45
\x{400}\x{401}\x{402}6
- *** Failers
+\= Expect no match
d99
\x{123}\x{122}4
\x{400}\x{403}6
@@ -64,14 +65,14 @@
acb
a\x7fb
a\x{100}b
- *** Failers
+\= Expect no match
a\nb
/a(.{3})b/utf
a\x{4000}xyb
a\x{4000}\x7fyb
a\x{4000}\x{100}yb
- *** Failers
+\= Expect no match
a\x{4000}b
ac\ncb
@@ -109,7 +110,7 @@
a\x{1234}xyb
a\x{1234}\x{4321}yb
a\x{1234}\x{4321}\x{3412}b
- *** Failers
+\= Expect no match
a\x{1234}b
ac\ncb
@@ -119,7 +120,7 @@
a\x{1234}\x{4321}\x{3412}b
axxxxbcdefghijb
a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
+\= Expect no match
a\x{1234}b
/a(.{3,}?)b/utf
@@ -128,7 +129,7 @@
a\x{1234}\x{4321}\x{3412}b
axxxxbcdefghijb
a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
+\= Expect no match
a\x{1234}b
/a(.{3,5})b/utf
@@ -139,7 +140,7 @@
a\x{1234}\x{4321}\x{3412}\x{3421}b
axbxxbcdefghijb
axxxxxbcdefghijb
- *** Failers
+\= Expect no match
a\x{1234}b
axxxxxxbcdefghijb
@@ -151,12 +152,12 @@
a\x{1234}\x{4321}\x{3412}\x{3421}b
axbxxbcdefghijb
axxxxxbcdefghijb
- *** Failers
+\= Expect no match
a\x{1234}b
axxxxxxbcdefghijb
/^[a\x{c0}]/utf
- *** Failers
+\= Expect no match
\x{100}
/(?<=aXb)cd/utf
@@ -170,19 +171,19 @@
/(?:\x{100}){3}b/utf
\x{100}\x{100}\x{100}b
- *** Failers
+\= Expect no match
\x{100}\x{100}b
/\x{ab}/utf
\x{ab}
\xc2\xab
- *** Failers
+\= Expect no match
\x00{ab}
/(?<=(.))X/utf
WXYZ
\x{256}XYZ
- *** Failers
+\= Expect no match
XYZ
/[^a]+/g,utf
@@ -269,128 +270,122 @@
/\D+/utf
12abcd34
- *** Failers
+\= Expect no match
1234
/\D{2,3}/utf
12abcd34
12ab34
- *** Failers
+\= Expect no match
1234
12a34
/\D{2,3}?/utf
12abcd34
12ab34
- *** Failers
+\= Expect no match
1234
12a34
/\d+/utf
12abcd34
- *** Failers
/\d{2,3}/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
1.4
/\d{2,3}?/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
1.4
/\S+/utf
12abcd34
- *** Failers
+\= Expect no match
\ \
/\S{2,3}/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
\ \
/\S{2,3}?/utf
12abcd34
1234abcd
- *** Failers
+\= Expect no match
\ \
/>\s+</utf
12> <34
- *** Failers
/>\s{2,3}</utf
ab> <cd
ab> <ce
- *** Failers
+\= Expect no match
ab> <cd
/>\s{2,3}?</utf
ab> <cd
ab> <ce
- *** Failers
+\= Expect no match
ab> <cd
/\w+/utf
12 34
- *** Failers
+\= Expect no match
+++=*!
/\w{2,3}/utf
ab cd
abcd ce
- *** Failers
+\= Expect no match
a.b.c
/\w{2,3}?/utf
ab cd
abcd ce
- *** Failers
+\= Expect no match
a.b.c
/\W+/utf
12====34
- *** Failers
+\= Expect no match
abcd
/\W{2,3}/utf
ab====cd
ab==cd
- *** Failers
+\= Expect no match
a.b.c
/\W{2,3}?/utf
ab====cd
ab==cd
- *** Failers
+\= Expect no match
a.b.c
/[\x{100}]/utf
\x{100}
Z\x{100}
\x{100}Z
- *** Failers
/[Z\x{100}]/utf
Z\x{100}
\x{100}
\x{100}Z
- *** Failers
/[\x{100}\x{200}]/utf
ab\x{100}cd
ab\x{200}cd
- *** Failers
/[\x{100}-\x{200}]/utf
ab\x{100}cd
ab\x{200}cd
ab\x{111}cd
- *** Failers
/[z-\x{200}]/utf
ab\x{100}cd
@@ -398,20 +393,17 @@
ab\x{111}cd
abzcd
ab|cd
- *** Failers
/[Q\x{100}\x{200}]/utf
ab\x{100}cd
ab\x{200}cd
Q?
- *** Failers
/[Q\x{100}-\x{200}]/utf
ab\x{100}cd
ab\x{200}cd
ab\x{111}cd
Q?
- *** Failers
/[Qz-\x{200}]/utf
ab\x{100}cd
@@ -420,48 +412,43 @@
abzcd
ab|cd
Q?
- *** Failers
/[\x{100}\x{200}]{1,3}/utf
ab\x{100}cd
ab\x{200}cd
ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
/[\x{100}\x{200}]{1,3}?/utf
ab\x{100}cd
ab\x{200}cd
ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
/[Q\x{100}\x{200}]{1,3}/utf
ab\x{100}cd
ab\x{200}cd
ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
/[Q\x{100}\x{200}]{1,3}?/utf
ab\x{100}cd
ab\x{200}cd
ab\x{200}\x{100}\x{200}\x{100}cd
- *** Failers
/(?<=[\x{100}\x{200}])X/utf
abc\x{200}X
abc\x{100}X
- *** Failers
+\= Expect no match
X
/(?<=[Q\x{100}\x{200}])X/utf
abc\x{200}X
abc\x{100}X
abQX
- *** Failers
+\= Expect no match
X
/(?<=[\x{100}\x{200}]{3})X/utf
abc\x{100}\x{200}\x{100}X
- *** Failers
+\= Expect no match
abc\x{200}X
X
@@ -469,7 +456,7 @@
AX
\x{150}X
\x{500}X
- *** Failers
+\= Expect no match
\x{100}X
\x{200}X
@@ -477,7 +464,7 @@
AX
\x{150}X
\x{500}X
- *** Failers
+\= Expect no match
\x{100}X
\x{200}X
QX
@@ -485,7 +472,7 @@
/[^\x{100}-\x{200}]X/utf
AX
\x{500}X
- *** Failers
+\= Expect no match
\x{100}X
\x{150}X
\x{200}X
@@ -494,7 +481,7 @@
z
Z
\x{100}
- *** Failers
+\= Expect no match
\x{102}
y
@@ -512,19 +499,24 @@
\x{123}
/^[ac]*b/utf
- xb
+\= Expect no match
+ xb
/^[ac\x{100}]*b/utf
- xb
+\= Expect no match
+ xb
/^[^x]*b/i,utf
- xb
+\= Expect no match
+ xb
/^[^x]*b/utf
- xb
+\= Expect no match
+ xb
/^\d*b/utf
- xb
+\= Expect no match
+ xb
/(|a)/g,utf
catac
@@ -548,7 +540,7 @@
a\x{85}b
a\x{2028}b
a\x{2029}b
- ** Failers
+\= Expect no match
a\n\rb
/^a\R*b/bsr=unicode,utf
@@ -571,7 +563,7 @@
a\x{85}b
a\n\rb
a\n\r\x{85}\x0cb
- ** Failers
+\= Expect no match
ab
/^a\R{1,3}b/bsr=unicode,utf
@@ -582,7 +574,7 @@
a\r\n\r\n\r\nb
a\n\r\n\rb
a\n\n\r\nb
- ** Failers
+\= Expect no match
a\n\n\n\rb
a\r
@@ -601,34 +593,34 @@
/\H\h\V\v/utf
X X\x0a
X\x09X\x0b
- ** Failers
+\= Expect no match
\x{a0} X\x0a
/\H*\h+\V?\v{3,4}/utf,no_auto_possess
\x09\x20\x{a0}X\x0a\x0b\x0c\x0d\x0a
\x09\x20\x{a0}\x0a\x0b\x0c\x0d\x0a
\x09\x20\x{a0}\x0a\x0b\x0c
- ** Failers
+\= Expect no match
\x09\x20\x{a0}\x0a\x0b
/\H\h\V\v/utf
\x{3001}\x{3000}\x{2030}\x{2028}
X\x{180e}X\x{85}
- ** Failers
+\= Expect no match
\x{2009} X\x0a
/\H*\h+\V?\v{3,4}/utf,no_auto_possess
\x{1680}\x{180e}\x{2007}X\x{2028}\x{2029}\x0c\x0d\x0a
\x09\x{205f}\x{a0}\x0a\x{2029}\x0c\x{2028}\x0a
\x09\x20\x{202f}\x0a\x0b\x0c
- ** Failers
+\= Expect no match
\x09\x{200a}\x{a0}\x{2028}\x0b
/a\Rb/I,bsr=anycrlf,utf
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x{85}b
a\x0bb
@@ -643,7 +635,7 @@
a\rb
a\nb
a\r\nb
- ** Failers
+\= Expect no match
a\x{85}b
a\x0bb
@@ -679,11 +671,6 @@
the cat\=ps
the cat\=ph
-/ab\Cde/utf
- abXde
-
-/(?<=ab\Cde)X/utf
-
/./newline=crlf,utf
\r\=ps
\r\=ph
@@ -712,7 +699,7 @@
/\pL\P{Nd}/utf
AB
- *** Failers
+\= Expect no match
A0
00
@@ -720,25 +707,24 @@
AB
A\x{300}BC
A\x{300}\x{301}\x{302}BC
- *** Failers
+\= Expect no match
\x{300}
/\X\X/utf
ABC
A\x{300}B\x{300}\x{301}C
A\x{300}\x{301}\x{302}BC
- *** Failers
+\= Expect no match
\x{300}
/^\pL+/utf
abcd
a
- *** Failers
/^\PL+/utf
1234
=
- *** Failers
+\= Expect no match
abcd
/^\X+/utf
@@ -746,7 +732,6 @@
A\x{300}\x{301}\x{302}
A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}
a
- *** Failers
\x{300}\x{301}\x{302}
/\X?abc/utf
@@ -754,46 +739,43 @@
A\x{300}abc
A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
\x{300}abc
- *** Failers
/^\X?abc/utf
abc
A\x{300}abc
- *** Failers
- A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
\x{300}abc
+\= Expect no match
+ A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
/\X*abc/utf
abc
A\x{300}abc
A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
\x{300}abc
- *** Failers
/^\X*abc/utf
abc
A\x{300}abc
A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
- *** Failers
\x{300}abc
/^\pL?=./utf
A=b
=c
- *** Failers
+\= Expect no match
1=2
AAAA=b
/^\pL*=./utf
AAAA=b
=c
- *** Failers
+\= Expect no match
1=2
/^\X{2,3}X/utf
A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
- *** Failers
+\= Expect no match
X
A\x{300}\x{301}\x{302}X
A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
@@ -801,48 +783,48 @@
/^\pC\pL\pM\pN\pP\pS\pZ</utf
\x7f\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
\np\x{300}9!\$ <
- ** Failers
+\= Expect no match
ap\x{300}9!\$ <
/^\PC/utf
X
- ** Failers
+\= Expect no match
\x7f
/^\PL/utf
9
- ** Failers
+\= Expect no match
\x{c0}
/^\PM/utf
X
- ** Failers
+\= Expect no match
\x{30f}
/^\PN/utf
X
- ** Failers
+\= Expect no match
\x{660}
/^\PP/utf
X
- ** Failers
+\= Expect no match
\x{66c}
/^\PS/utf
X
- ** Failers
+\= Expect no match
\x{f01}
/^\PZ/utf
X
- ** Failers
+\= Expect no match
\x{1680}
/^\p{Cc}/utf
\x{017}
\x{09f}
- ** Failers
+\= Expect no match
\x{0600}
/^\p{Cf}/utf
@@ -853,60 +835,60 @@
\x{2067}
\x{2068}
\x{2069}
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Cn}/utf
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Co}/utf
\x{f8ff}
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Cs}/utf
\x{dfff}\=no_utf_check
- ** Failers
+\= Expect no match
\x{09f}
/^\p{Ll}/utf
a
- ** Failers
+\= Expect no match
Z
\x{e000}
/^\p{Lm}/utf
\x{2b0}
- ** Failers
+\= Expect no match
a
/^\p{Lo}/utf
\x{1bb}
- ** Failers
+\= Expect no match
a
\x{2b0}
/^\p{Lt}/utf
\x{1c5}
- ** Failers
+\= Expect no match
a
\x{2b0}
/^\p{Lu}/utf
A
- ** Failers
+\= Expect no match
\x{2b0}
/^\p{Mc}/utf
\x{903}
- ** Failers
+\= Expect no match
X
\x{300}
/^\p{Me}/utf
\x{488}
- ** Failers
+\= Expect no match
X
\x{903}
\x{300}
@@ -914,7 +896,7 @@
/^\p{Mn}/utf
\x{300}
\x{1a1b}
- ** Failers
+\= Expect no match
X
\x{903}
@@ -922,26 +904,26 @@
0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}\x{669}\x{66a}
\x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}\x{6fa}
\x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}\x{970}
- ** Failers
+\= Expect no match
X
/^\p{Nl}/utf
\x{16ee}
- ** Failers
+\= Expect no match
X
\x{966}
/^\p{No}/utf
\x{b2}
\x{b3}
- ** Failers
+\= Expect no match
X
\x{16ee}
/^\p{Pc}/utf
\x5f
\x{203f}
- ** Failers
+\= Expect no match
X
-
\x{58a}
@@ -949,7 +931,7 @@
/^\p{Pd}/utf
-
\x{58a}
- ** Failers
+\= Expect no match
X
\x{203f}
@@ -960,7 +942,7 @@
\x{f3b}
\x{2309}
\x{230b}
- ** Failers
+\= Expect no match
X
\x{203f}
(
@@ -971,21 +953,21 @@
/^\p{Pf}/utf
\x{bb}
\x{2019}
- ** Failers
+\= Expect no match
X
\x{203f}
/^\p{Pi}/utf
\x{ab}
\x{2018}
- ** Failers
+\= Expect no match
X
\x{203f}
/^\p{Po}/utf
!
\x{37e}
- ** Failers
+\= Expect no match
X
\x{203f}
@@ -996,7 +978,7 @@
\x{f3c}
\x{2308}
\x{230a}
- ** Failers
+\= Expect no match
X
)
]
@@ -1006,38 +988,38 @@
/^\p{Sc}+/utf
$\x{a2}\x{a3}\x{a4}\x{a5}\x{a6}
\x{9f2}
- ** Failers
+\= Expect no match
X
\x{2c2}
/^\p{Sk}/utf
\x{2c2}
- ** Failers
+\= Expect no match
X
\x{9f2}
/^\p{Sm}+/utf
+<|~\x{ac}\x{2044}
- ** Failers
+\= Expect no match
X
\x{9f2}
/^\p{So}/utf
\x{a6}
\x{482}
- ** Failers
+\= Expect no match
X
\x{9f2}
/^\p{Zl}/utf
\x{2028}
- ** Failers
+\= Expect no match
X
\x{2029}
/^\p{Zp}/utf
\x{2029}
- ** Failers
+\= Expect no match
X
\x{2028}
@@ -1047,7 +1029,7 @@
\x{1680}
\x{2000}
\x{2001}
- ** Failers
+\= Expect no match
\x{2028}
\x{200d}
@@ -1091,31 +1073,31 @@
\x{660}\x{661}\x{662}ABC
/\p{Nd}*+(....)/utf
- ** Failers
+\= Expect no match
\x{660}\x{661}\x{662}ABC
/\p{Lu}/i,utf
A
a\x{10a0}B
- ** Failers
+\= Expect no match
a
\x{1d00}
/\p{^Lu}/i,utf
1234
- ** Failers
+\= Expect no match
ABC
/\P{Lu}/i,utf
1234
- ** Failers
+\= Expect no match
ABC
/(?<=A\p{Nd})XYZ/utf
A2XYZ
123A5XYZPQR
ABA\x{660}XYZpqr
- ** Failers
+\= Expect no match
AXYZ
XYZ
@@ -1123,7 +1105,7 @@
1XYZ
AB=XYZ..
XYZ
- ** Failers
+\= Expect no match
WXYZ
/[\p{Nd}]/utf
@@ -1133,33 +1115,38 @@
1234
12-34
12+\x{661}-34
- ** Failers
+\= Expect no match
abcd
/[\P{Nd}]+/utf
abcd
- ** Failers
+\= Expect no match
1234
/\D+/utf,no_auto_possess
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/\P{Nd}+/utf,no_auto_possess
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/[\D]+/utf,no_auto_possess
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/[\P{Nd}]+/utf,no_auto_possess
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/[\D\P{Nd}]+/utf,no_auto_possess
- 11111111111111111111111111111111111111111111111111111111111111111111111
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
/\pL/utf
a
@@ -1172,25 +1159,25 @@
/\p{Lu}/utf
A
aZ
- ** Failers
+\= Expect no match
abc
/\p{Lu}/i,utf
A
aZ
- ** Failers
+\= Expect no match
abc
/\p{Ll}/utf
a
Az
- ** Failers
+\= Expect no match
ABC
/\p{Ll}/i,utf
a
Az
- ** Failers
+\= Expect no match
ABC
/^\x{c0}$/i,utf
@@ -1203,7 +1190,7 @@
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- ** Failers
+\= Expect no match
a\x{391}\x{10427}\x{ff3a}\x{1fb0}
A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
@@ -1241,7 +1228,7 @@
\x{104}
\x{105}
\x{109}
- ** Failers
+\= Expect no match
\x{100}
\x{10a}
@@ -1255,7 +1242,7 @@
\x{ff}
\x{100}
\x{101}
- ** Failers
+\= Expect no match
\x{102}
Y
y
@@ -1266,7 +1253,6 @@
A
A\x{300}BC
A\x{300}\x{301}\x{302}BC
- *** Failers
\x{300}
/^(\X*)C/utf
@@ -1286,7 +1272,7 @@
A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
/^\X(.)/utf
- *** Failers
+\= Expect no match
A\x{300}\x{301}\x{302}
/^\X{2,3}(.)/utf
@@ -1304,7 +1290,7 @@
/^\pN{2,3}X/
12X
123X
- *** Failers
+\= Expect no match
X
1X
1234X
@@ -1315,46 +1301,46 @@
/^\p{Han}+/utf
\x{2e81}\x{3007}\x{2f804}\x{31a0}
- ** Failers
+\= Expect no match
\x{2e7f}
/^\P{Katakana}+/utf
\x{3105}
- ** Failers
+\= Expect no match
\x{30ff}
/^[\p{Arabic}]/utf
\x{06e9}
\x{060b}
- ** Failers
+\= Expect no match
X\x{06e9}
/^[\P{Yi}]/utf
\x{2f800}
- ** Failers
+\= Expect no match
\x{a014}
\x{a4c6}
/^\p{Any}X/utf
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
X
/^\P{Any}X/utf
- ** Failers
+\= Expect no match
AX
/^\p{Any}?X/utf
XYZ
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
ABXYZ
/^\P{Any}?X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
ABXYZ
@@ -1363,11 +1349,11 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
+\= Expect no match
XYZ
/^\P{Any}+X/utf
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1378,11 +1364,10 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
/^\P{Any}*X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1390,23 +1375,23 @@
/^[\p{Any}]X/utf
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
X
/^[\P{Any}]X/utf
- ** Failers
+\= Expect no match
AX
/^[\p{Any}]?X/utf
XYZ
AXYZ
\x{1234}XYZ
- ** Failers
+\= Expect no match
ABXYZ
/^[\P{Any}]?X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
ABXYZ
@@ -1415,11 +1400,11 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
+\= Expect no match
XYZ
/^[\P{Any}]+X/utf
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1430,11 +1415,10 @@
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
- ** Failers
/^[\P{Any}]*X/utf
XYZ
- ** Failers
+\= Expect no match
AXYZ
\x{1234}XYZ
A\x{1234}XYZ
@@ -1448,7 +1432,7 @@
\x{1234}\n\r\x{3456}xyz
/^\P{Any}{3,5}?/utf
- ** Failers
+\= Expect no match
abcdefgh
\x{1234}\n\r\x{3456}xyz
@@ -1456,7 +1440,7 @@
AXY
aXY
\x{1c5}XY
- ** Failers
+\= Expect no match
\x{1bb}XY
\x{2b0}XY
!XY
@@ -1465,7 +1449,7 @@
AXY
aXY
\x{1c5}XY
- ** Failers
+\= Expect no match
\x{1bb}XY
\x{2b0}XY
!XY
@@ -1476,7 +1460,7 @@
AbcdeXyz
\x{1c5}AbXY
abcDEXypqreXlmn
- ** Failers
+\= Expect no match
\x{1bb}XY
\x{2b0}XY
!XY
@@ -1487,7 +1471,7 @@
AbcdeXyz
\x{1c5}AbXY
abcDEXypqreXlmn
- ** Failers
+\= Expect no match
\x{1bb}XY
\x{2b0}XY
!XY
@@ -1498,7 +1482,7 @@
AbcdeXyz
\x{1c5}AbXY
abcDEXypqreXlmn
- ** Failers
+\= Expect no match
\x{1bb}XY
\x{2b0}XY
!XY
@@ -1509,7 +1493,7 @@
AbcdeXyz
\x{1c5}AbXY
abcDEXypqreXlmn
- ** Failers
+\= Expect no match
\x{1bb}XY
\x{2b0}XY
!XY
@@ -1518,7 +1502,7 @@
!XY
\x{1bb}XY
\x{2b0}XY
- ** Failers
+\= Expect no match
\x{1c5}XY
AXY
@@ -1526,7 +1510,7 @@
!XY
\x{1bb}XY
\x{2b0}XY
- ** Failers
+\= Expect no match
\x{1c5}XY
AXY
@@ -1542,7 +1526,7 @@
/[\x{c0}\x{116}]+/i,utf
\x{c0}\x{e0}\x{116}\x{117}
-/Check property support in non-UTF-8 mode/
+# Check property support in non-UTF-8 mode
/\p{L}{4}/
123abcdefg
@@ -1557,7 +1541,7 @@
/\x{a77d}\x{1d79}/utf
\x{a77d}\x{1d79}
- ** Failers
+\= Expect no match
\x{1d79}\x{a77d}
/^\p{Xan}/utf
@@ -1566,12 +1550,12 @@
\x{6ca}
\x{a6c}
\x{10a7}
- ** Failers
+\= Expect no match
_ABC
/^\p{Xan}+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
- ** Failers
+\= Expect no match
_ABC
/^\p{Xan}*/utf
@@ -1586,17 +1570,17 @@
\x{6ca}
\x{a6c}
\x{10a7}
- ** Failers
+\= Expect no match
_ABC
/^[\p{Xan}]+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
- ** Failers
+\= Expect no match
_ABC
/^>\p{Xsp}/utf
>\x{1680}\x{2028}\x{0b}
- ** Failers
+\= Expect no match
\x{0b}
/^>\p{Xsp}+/utf,no_auto_possess
@@ -1617,7 +1601,7 @@
/^>\p{Xps}/utf
>\x{1680}\x{2028}\x{0b}
>\x{a0}
- ** Failers
+\= Expect no match
\x{0b}
/^>\p{Xps}+/utf
@@ -1648,7 +1632,7 @@
\x{a6c}
\x{10a7}
_ABC
- ** Failers
+\= Expect no match
[]
/^\p{Xwd}+/utf
@@ -1667,7 +1651,7 @@
\x{a6c}
\x{10a7}
_ABC
- ** Failers
+\= Expect no match
[]
/^[\p{Xwd}]+/utf
@@ -1686,7 +1670,7 @@
/\b...\B/utf
abc_
- ** Failers
+\= Expect no match
\x{37e}abc\x{376}
\x{37e}\x{376}\x{371}\x{393}\x{394}
!\x{c0}++\x{c1}\x{c2}
@@ -1748,7 +1732,7 @@
\x{1100}X
\x{1100}\x{34e}X
\x{1b04}\x{1b04}X
- *These match up to the roman letters
+\= These match up to the roman letters
\x{1111}\x{1111}L,L
\x{1111}\x{1111}\x{1169}L,L,V
\x{1111}\x{ae4c}L, LV
@@ -1759,7 +1743,7 @@
\x{1111}\x{ad89}\x{11fe}L, LVT, T
\x{1111}\x{ad89}\x{11fe}\x{11fe}L, LVT, T, T
\x{ad89}\x{11fe}\x{11fe}LVT, T, T
- *These match just the first codepoint (invalid sequence)
+\= These match just the first codepoint (invalid sequence)
\x{1111}\x{11fe}L, T
\x{ae4c}\x{1111}LV, L
\x{ae4c}\x{ae4c}LV, LV
@@ -1775,18 +1759,18 @@
\x{11fe}\x{1169}T, V
\x{11fe}\x{ae4c}T, LV
\x{11fe}\x{ad89}T, LVT
- *Test extend and spacing mark
+\= Test extend and spacing mark
\x{1111}\x{ae4c}\x{0711}L, LV, extend
\x{1111}\x{ae4c}\x{1b04}L, LV, spacing mark
\x{1111}\x{ae4c}\x{1b04}\x{0711}\x{1b04}L, LV, spacing mark, extend, spacing mark
- *Test CR, LF, and control
+\= Test CR, LF, and control
\x0d\x{0711}CR, extend
\x0d\x{1b04}CR, spacingmark
\x0a\x{0711}LF, extend
\x0a\x{1b04}LF, spacingmark
\x0b\x{0711}Control, extend
\x09\x{1b04}Control, spacingmark
- *There are no Prepend characters, so we can't test Prepend, CR
+\= There are no Prepend characters, so we can't test Prepend, CR
/^(?>\X{2})X/utf,aftertext
\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
@@ -1840,7 +1824,6 @@
/\x{212b}+/i,utf
\x{00c5}\x{00e5}\x{212b}
-
/\x{01c4}+/i,utf
\x{01c4}\x{01c5}\x{01c6}
@@ -1850,7 +1833,6 @@
/\x{01c6}+/i,utf
\x{01c4}\x{01c5}\x{01c6}
-
/\x{01c7}+/i,utf
\x{01c7}\x{01c8}\x{01c9}
@@ -1870,7 +1852,6 @@
/\x{01cc}+/i,utf
\x{01ca}\x{01cb}\x{01cc}
-
/\x{01f1}+/i,utf
\x{01f1}\x{01f2}\x{01f3}
@@ -1880,7 +1861,6 @@
/\x{01f3}+/i,utf
\x{01f1}\x{01f2}\x{01f3}
-
/\x{0345}+/i,utf
\x{0345}\x{0399}\x{03b9}\x{1fbe}
@@ -1893,7 +1873,6 @@
/\x{1fbe}+/i,utf
\x{0345}\x{0399}\x{03b9}\x{1fbe}
-
/\x{0392}+/i,utf
\x{0392}\x{03b2}\x{03d0}
@@ -1913,7 +1892,6 @@
/\x{03f5}+/i,utf
\x{0395}\x{03b5}\x{03f5}
-
/\x{0398}+/i,utf
\x{0398}\x{03b8}\x{03d1}\x{03f4}
@@ -1925,7 +1903,6 @@
/\x{03f4}+/i,utf
\x{0398}\x{03b8}\x{03d1}\x{03f4}
-
/\x{039a}+/i,utf
\x{039a}\x{03ba}\x{03f0}
@@ -1936,7 +1913,6 @@
/\x{03f0}+/i,utf
\x{039a}\x{03ba}\x{03f0}
-
/\x{03a0}+/i,utf
\x{03a0}\x{03c0}\x{03d6}
@@ -1946,7 +1922,6 @@
/\x{03d6}+/i,utf
\x{03a0}\x{03c0}\x{03d6}
-
/\x{03a1}+/i,utf
\x{03a1}\x{03c1}\x{03f1}
@@ -1956,7 +1931,6 @@
/\x{03f1}+/i,utf
\x{03a1}\x{03c1}\x{03f1}
-
/\x{03a3}+/i,utf
\x{03A3}\x{03C2}\x{03C3}
@@ -1965,7 +1939,6 @@
/\x{03c3}+/i,utf
\x{03A3}\x{03C2}\x{03C3}
-
/\x{03a6}+/i,utf
\x{03a6}\x{03c6}\x{03d5}
@@ -1976,7 +1949,6 @@
/\x{03d5}+/i,utf
\x{03a6}\x{03c6}\x{03d5}
-
/\x{03c9}+/i,utf
\x{03c9}\x{03a9}\x{2126}
@@ -1986,7 +1958,6 @@
/\x{2126}+/i,utf
\x{03c9}\x{03a9}\x{2126}
-
/\x{1e60}+/i,utf
\x{1e60}\x{1e61}\x{1e9b}
@@ -1996,14 +1967,12 @@
/\x{1e9b}+/i,utf
\x{1e60}\x{1e61}\x{1e9b}
-
/\x{1e9e}+/i,utf
\x{1e9e}\x{00df}
/\x{00df}+/i,utf
\x{1e9e}\x{00df}
-
/\x{1f88}+/i,utf
\x{1f88}\x{1f80}
@@ -2019,7 +1988,6 @@
/\x{212a}+/i,utf
\x{004b}\x{006b}\x{212a}
-
/\x{0053}+/i,utf
\x{0053}\x{0073}\x{017f}
@@ -2030,19 +1998,24 @@
\x{0053}\x{0073}\x{017f}
/ist/i,utf
+\= Expect no match
ikt
/is+t/i,utf
iSs\x{17f}t
+\= Expect no match
ikt
/is+?t/i,utf
+\= Expect no match
ikt
/is?t/i,utf
+\= Expect no match
ikt
/is{2}t/i,utf
+\= Expect no match
iskt
/^\p{Xuc}/utf
@@ -2050,52 +2023,52 @@
@abc
`abc
\x{1234}abc
- ** Failers
+\= Expect no match
abc
/^\p{Xuc}+/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}+?/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}+?\*/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}++/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}{3,5}/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\p{Xuc}{3,5}?/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^[\p{Xuc}]/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^[\p{Xuc}]+/utf
$@`\x{a0}\x{1234}\x{e000}**
- ** Failers
+\= Expect no match
\x{9f}
/^\P{Xuc}/utf
abc
- ** Failers
+\= Expect no match
$abc
@abc
`abc
@@ -2103,7 +2076,7 @@
/^[\P{Xuc}]/utf
abc
- ** Failers
+\= Expect no match
$abc
@abc
`abc
diff --git a/testdata/testinput8 b/testdata/testinput8
index 545e751..ca3b1b9 100644
--- a/testdata/testinput8
+++ b/testdata/testinput8
@@ -1,8 +1,11 @@
-# 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.
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
#pattern fullbincode,memory
@@ -67,7 +70,7 @@
/\xff/utf
/\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
-
+
/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
/\x{65e5}\x{672c}\x{8a9e}/I,utf
@@ -150,10 +153,33 @@
# Check the absolute limit on nesting (?| etc. This varies with code unit
# width because the workspace is a different number of bytes. It will fail
-# in 8-bit and 16-bit but not in 32-bit.
-
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
/parens_nest_limit=1000,-fullbincode
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+
+/(?(1)(?1)){8,}+()/debug
+ abcd
+
+/(?(1)|a(?1)b){2,}+()/debug
+ abcde
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+
# End of testinput8
diff --git a/testdata/testinput9 b/testdata/testinput9
index eeb5edb..9a26f5f 100644
--- a/testdata/testinput9
+++ b/testdata/testinput9
@@ -2,11 +2,10 @@
# UTF-8 or Unicode property support. */
#forbid_utf
+#newline_default lf any anycrlf
-/a\Cb/
- aXb
- a\nb
- ** Failers (too big char)
+/ab/
+\= Expect error message (too big char) and no match
A\x{123}B
A\o{443}B
@@ -240,9 +239,15 @@
/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark
XX
+/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark,alt_verbnames
+ XX
+
/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark
XX
+/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark,alt_verbnames
+ XX
+
/\u0100/alt_bsux,allow_empty_class,match_unset_backref,dupnames
/[\u0100-\u0200]/alt_bsux,allow_empty_class,match_unset_backref,dupnames
@@ -251,4 +256,6 @@
/[^\s]*\s* [^\W]+\W+ [^\d]*?\d0 [^\d\w]{4,6}?\w*A/B
+/(*MARK:a\x{100}b)z/alt_verbnames
+
# End of testinput9
diff --git a/testdata/testoutput1 b/testdata/testoutput1
index 942dc7d..d28bf91 100644
--- a/testdata/testoutput1
+++ b/testdata/testoutput1
@@ -3,15 +3,17 @@
# 32-bit PCRE libraries, and also using the perltest.pl script.
#forbid_utf
+#newline_default lf any anycrlf
#perltest
/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
+\= Expect no match
+ The quick brown FOX
+No match
What do you know about THE QUICK BROWN FOX?
No match
@@ -90,8 +92,7 @@ No match
0: aaaabxyzpqrrrabbxyyyypqAzz
>>>>abcxyzpqrrrabbxyyyypqAzz
0: abcxyzpqrrrabbxyyyypqAzz
- *** Failers
-No match
+\= Expect no match
abxyzpqrrabbxyyyypqAzz
No match
abxyzpqrrrrabbxyyyypqAzz
@@ -112,8 +113,7 @@ No match
abcabczz
0: abcabczz
1: abc
- *** Failers
-No match
+\= Expect no match
zz
No match
abcabcabczz
@@ -146,8 +146,7 @@ No match
bbbbbbbbbbbac
0: bbbbbbbbbbbac
1: a
- *** Failers
-No match
+\= Expect no match
aaac
No match
abbbbbbbbbbbac
@@ -178,8 +177,7 @@ No match
bbbbbbbbbbbac
0: bbbbbbbbbbbac
1: a
- *** Failers
-No match
+\= Expect no match
aaac
No match
abbbbbbbbbbbac
@@ -200,8 +198,7 @@ No match
bababc
0: bababc
1: ba
- *** Failers
-No match
+\= Expect no match
bababbc
No match
babababc
@@ -217,8 +214,7 @@ No match
bababc
0: bababc
1: ba
- *** Failers
-No match
+\= Expect no match
bababbc
No match
babababc
@@ -241,8 +237,7 @@ No match
0: d
ething
0: e
- *** Failers
-No match
+\= Expect no match
fthing
No match
[thing
@@ -259,8 +254,7 @@ No match
0: d
ething
0: e
- *** Failers
-No match
+\= Expect no match
athing
No match
fthing
@@ -273,8 +267,7 @@ No match
0: [
\\thing
0: \
- *** Failers
- 0: *
+\= Expect no match
athing
No match
bthing
@@ -293,8 +286,7 @@ No match
0: a
fthing
0: f
- *** Failers
- 0: *
+\= Expect no match
]thing
No match
cthing
@@ -337,8 +329,7 @@ No match
0: 10
100
0: 100
- *** Failers
-No match
+\= Expect no match
abc
No match
@@ -355,46 +346,42 @@ No match
0: xxx0
xxx1234
0: xxx1234
- *** Failers
-No match
+\= Expect no match
xxx
No match
/^.+[0-9][0-9][0-9]$/
x123
0: x123
+ x1234
+ 0: x1234
xx123
0: xx123
123456
0: 123456
- *** Failers
-No match
+\= Expect no match
123
No match
- x1234
- 0: x1234
/^.+?[0-9][0-9][0-9]$/
x123
0: x123
+ x1234
+ 0: x1234
xx123
0: xx123
123456
0: 123456
- *** Failers
-No match
+\= Expect 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
+\= Expect no match
!pqr=apquxz.ixr.zzz.ac.uk
No match
abc!=apquxz.ixr.zzz.ac.uk
@@ -407,7 +394,8 @@ No match
/:/
Well, we need a colon: somewhere
0: :
- *** Fail if we don't
+\= Expect no match
+ Fail without a colon
No match
/([\da-f:]+)$/i
@@ -435,8 +423,7 @@ No match
Any old stuff
0: ff
1: ff
- *** Failers
-No match
+\= Expect no match
0zzz
No match
gzzz
@@ -457,8 +444,7 @@ No match
1: 12
2: 123
3: 0
- *** Failers
-No match
+\= Expect no match
.1.2.3333
No match
1.2.3
@@ -477,8 +463,7 @@ No match
1: 1
2: non-sp1
3: non-sp2
- *** Failers
-No match
+\= Expect no match
1IN SOA non-sp1 non-sp2(
No match
@@ -498,8 +483,7 @@ No match
x-.y-.
0: x-.y-.
1: .y-
- *** Failers
-No match
+\= Expect no match
-abc.peq.
No match
@@ -518,8 +502,7 @@ No match
1: -a
2: .b-c
3: -c
- *** Failers
-No match
+\= Expect no match
*.0
No match
*.a-
@@ -570,22 +553,21 @@ No match
\"\" ; rhubarb
0: "" ; rhubarb
1: ; rhubarb
- *** Failers
-No match
+\= Expect no match
\"1234\" : things
No match
/^$/
\
0:
- *** Failers
+\= Expect no match
+ A non-empty line
No match
/ ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
ab c
0: ab c
- *** Failers
-No match
+\= Expect no match
abc
No match
ab cde
@@ -594,8 +576,7 @@ No match
/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
ab c
0: ab c
- *** Failers
-No match
+\= Expect no match
abc
No match
ab cde
@@ -606,8 +587,7 @@ No match
0: a bcd
a b d
0: a b d
- *** Failers
-No match
+\= Expect no match
abcd
No match
ab d
@@ -716,8 +696,7 @@ No match
0: 12345678ab
12345678__
0: 12345678__
- *** Failers
-No match
+\= Expect no match
1234567
No match
@@ -730,8 +709,7 @@ No match
0: 12345
aaaaa
0: aaaaa
- *** Failers
-No match
+\= Expect no match
123456
No match
@@ -756,8 +734,7 @@ No match
0: def=defdefdef
1: def
2: def
- *** Failers
-No match
+\= Expect no match
abc=defdef
No match
@@ -827,8 +804,7 @@ No match
From abcd Mon Sep 1 12:33:02 1997
0: From abcd Mon Sep 1 12:33
1: Sep
- *** Failers
-No match
+\= Expect no match
From abcd Sep 01 12:33:02 1997
No match
@@ -865,8 +841,7 @@ No match
abc456
0: abc
1: abc
- *** Failers
-No match
+\= Expect no match
abc123
No match
@@ -910,16 +885,14 @@ No match
/(?!^)abc/
the abc
0: abc
- *** Failers
-No match
+\= Expect no match
abc
No match
/(?=^)abc/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
the abc
No match
@@ -1151,8 +1124,7 @@ No match
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
+\= Expect no match
The quick brown fox
No match
@@ -1752,8 +1724,7 @@ No match
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
+\= Expect no match
The quick brown fox
No match
@@ -1786,8 +1757,7 @@ No match
0: A\x00\x00Z
An A\0\x0\0Z
0: A\x00\x00\x00Z
- *** Failers
-No match
+\= Expect no match
A\0Z
No match
A\0\x0\0\x0Z
@@ -1802,8 +1772,7 @@ No match
0: bell
1:
2: bell
- *** Failers
-No match
+\= Expect no match
cowbell
No match
@@ -1818,8 +1787,7 @@ No match
0: \x0d
\tabc
0: \x09
- *** Failers
-No match
+\= Expect no match
abc
No match
@@ -1838,8 +1806,7 @@ No match
b
0: b
1:
- *** Failers
-No match
+\= Expect no match
acb
No match
@@ -1853,8 +1820,7 @@ No match
b
0: b
1:
- *** Failers
-No match
+\= Expect no match
ab
No match
@@ -1868,8 +1834,7 @@ No match
b
0: b
1:
- *** Failers
-No match
+\= Expect no match
acb
No match
@@ -1880,8 +1845,7 @@ No match
b
0: b
1:
- *** Failers
-No match
+\= Expect no match
ab
No match
aab
@@ -1899,8 +1863,7 @@ No match
b
0: b
1:
- *** Failers
-No match
+\= Expect no match
ab
No match
aab
@@ -1915,8 +1878,7 @@ No match
0: abbbc
abbc
0: abbc
- *** Failers
-No match
+\= Expect no match
abc
No match
abbbbbc
@@ -1946,8 +1908,7 @@ No match
/^[W-c]+$/
WXY_^abc
0: WXY_^abc
- *** Failers
-No match
+\= Expect no match
wxy
No match
@@ -1976,8 +1937,7 @@ No match
/^abc$/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
qqq\nabc
No match
abc\nzzz
@@ -1990,8 +1950,7 @@ No match
0: abc
abc\n
0: abc
- *** Failers
-No match
+\= Expect no match
qqq\nabc
No match
abc\nzzz
@@ -2005,9 +1964,7 @@ No match
1: f
/\A(.)*\Z/m
- *** Failers
- 0: *** Failers
- 1: s
+\= Expect no match
abc\ndef
No match
@@ -2020,24 +1977,21 @@ No match
/[-az]+/
az-
0: az-
- *** Failers
- 0: a
+\= Expect no match
b
No match
/[az-]+/
za-
0: za-
- *** Failers
- 0: a
+\= Expect no match
b
No match
/[a\-z]+/
a-z
0: a-z
- *** Failers
- 0: a
+\= Expect no match
b
No match
@@ -2048,16 +2002,14 @@ No match
/[\d-]+/
12-34
0: 12-34
- *** Failers
-No match
+\= Expect no match
aaa
No match
/[\d-z]+/
12-34z
0: 12-34z
- *** Failers
-No match
+\= Expect no match
aaa
No match
@@ -2068,8 +2020,7 @@ No match
/\x20Z/
the Zoo
0: Z
- *** Failers
-No match
+\= Expect no match
Zulu
No match
@@ -2084,29 +2035,12 @@ No match
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
+\= Expect no match
abc\ndef
No match
@@ -2169,8 +2103,7 @@ No match
/^[A\8B\9C]+$/
A8B9C
0: A8B9C
- *** Failers
-No match
+\= Expect no match
A8B9C\x00
No match
@@ -2255,12 +2188,7 @@ No match
2: a
3:
4: ccc
- *** Failers
- 0: *** Failers
- 1: *
- 2: *
- 3: * Fail
- 4: ers
+\= Expect no match
anything
No match
b\bc
@@ -2291,8 +2219,7 @@ No match
/[^k]$/
abc
0: c
- *** Failers
- 0: s
+\= Expect no match
abk
No match
@@ -2303,8 +2230,7 @@ No match
0: bc
kabc
0: abc
- *** Failers
- 0: ers
+\= Expect no match
abk
No match
akb
@@ -2317,8 +2243,7 @@ No match
0: 12345678@a.b.c.d
123456789\@x.y.z
0: 123456789@x.y.z
- *** Failers
-No match
+\= Expect no match
12345678\@x.y.uk
No match
1234567\@a.b.c.d
@@ -2331,8 +2256,7 @@ No match
aaaaaaaaaa
0: aaaaaaaaaa
1: a
- *** Failers
-No match
+\= Expect no match
aaaaaaa
No match
@@ -2392,8 +2316,7 @@ No match
0: .875
1: .875
2: 5
- *** Failers
-No match
+\= Expect no match
1.235
No match
@@ -2473,8 +2396,7 @@ No match
ABC445
0: ABC
1: ABC
- *** Failers
-No match
+\= Expect no match
ABC123
No match
@@ -2483,8 +2405,7 @@ No match
0: W46]
-46]789
0: -46]
- *** Failers
-No match
+\= Expect no match
Wall
No match
Zebra
@@ -2513,8 +2434,7 @@ No match
0: ]
\\backslash
0: \
- *** Failers
-No match
+\= Expect no match
-46]789
No match
well
@@ -2525,13 +2445,15 @@ No match
0: 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 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
+\= Expect no match
+ 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
+\= Expect no match
+ 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}/
@@ -2592,28 +2514,28 @@ No match
1: a
/^(a){1,1}/
- bcd
-No match
abc
0: a
1: a
aab
0: a
1: a
-
-/^(a){1,2}/
+\= Expect no match
bcd
No match
+
+/^(a){1,2}/
abc
0: a
1: a
aab
0: aa
1: a
-
-/^(a){1,3}/
+\= Expect no match
bcd
No match
+
+/^(a){1,3}/
abc
0: a
1: a
@@ -2623,10 +2545,11 @@ No match
aaa
0: aaa
1: a
-
-/^(a){1,}/
+\= Expect no match
bcd
No match
+
+/^(a){1,}/
abc
0: a
1: a
@@ -2639,6 +2562,9 @@ No match
aaaaaaaa
0: aaaaaaaa
1: a
+\= Expect no match
+ bcd
+No match
/.*\.gif/
borfle\nbib.gif\nno
@@ -2699,8 +2625,7 @@ No match
BarFoo
0: B
1: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
@@ -2722,8 +2647,7 @@ No match
BarFoo
0: B
1: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
@@ -2745,8 +2669,7 @@ No match
BarFoo
0: B
1: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
@@ -2755,14 +2678,12 @@ No match
0: abcde\x0a1234X
BarFoo
0: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
/^.*B/
- **** Failers
-No match
+\= Expect no match
abc\nB
No match
@@ -2814,32 +2735,28 @@ No match
/^[abcdefghijklmnopqrstuvwxy0123456789]/
n
0: n
- *** Failers
-No match
+\= Expect no match
z
No match
/abcde{0,0}/
abcd
0: abcd
- *** Failers
-No match
+\= Expect no match
abce
No match
/ab[cd]{0,0}e/
abe
0: abe
- *** Failers
-No match
+\= Expect no match
abcde
No match
/ab(c){0,0}d/
abd
0: abd
- *** Failers
-No match
+\= Expect no match
abcd
No match
@@ -2853,17 +2770,14 @@ No match
abbbb
0: abbbb
1: bbbb
- *** Failers
- 0: a
- 1:
+\= Expect no match
bbbbb
No match
/ab\d{0}e/
abe
0: abe
- *** Failers
-No match
+\= Expect no match
ab1e
No match
@@ -2937,8 +2851,7 @@ No match
/a.b/
acb
0: acb
- *** Failers
-No match
+\= Expect no match
a\nb
No match
@@ -2989,15 +2902,14 @@ No match
1: a
/(?!\A)x/m
+ a\bx\n
+ 0: x
+ a\nx\n
+ 0: x
+\= Expect no match
x\nb\n
No match
- a\bx\n
- 0: x
-/\x0{ab}/
- \0{ab}
- 0: \x00{ab}
-
/(A|B)*?CD/
CD
0: CD
@@ -3025,8 +2937,7 @@ No match
0: foo
rfoosh
0: foo
- *** Failers
-No match
+\= Expect no match
barfoo
No match
towbarfoo
@@ -3035,8 +2946,7 @@ No match
/\w{3}(?<!bar)foo/
catfood
0: catfoo
- *** Failers
-No match
+\= Expect no match
foo
No match
barfoo
@@ -3048,8 +2958,7 @@ No match
fooabar
0: bar
1: foo
- *** Failers
-No match
+\= Expect no match
bar
No match
foobbar
@@ -3058,8 +2967,7 @@ No match
/\Aabc\z/m
abc
0: abc
- *** Failers
-No match
+\= Expect no match
abc\n
No match
qqq\nabc
@@ -3070,12 +2978,11 @@ No match
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
+\= Expect no match
+ /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
+No match
/(?>(\.\d\d[1-9]?))\d+/
1.230003938
@@ -3084,8 +2991,7 @@ No match
1.875000282
0: .875000282
1: .875
- *** Failers
-No match
+\= Expect no match
1.235
No match
@@ -3093,8 +2999,7 @@ No match
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
+\= Expect no match
this is not a line with only words and spaces!
No match
@@ -3113,8 +3018,7 @@ No match
0: 12345a
1: 12345
2: a
- *** Failers
-No match
+\= Expect no match
12345+
No match
@@ -3152,8 +3056,7 @@ No match
(abc(def)xyz)
0: (abc(def)xyz)
1: xyz
- *** Failers
-No match
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -3162,8 +3065,7 @@ No match
0: ab
Ab
0: Ab
- *** Failers
-No match
+\= Expect no match
aB
No match
AB
@@ -3173,8 +3075,7 @@ No match
a bcd e
0: a bcd e
1: a bc
- *** Failers
-No match
+\= Expect no match
a b cd e
No match
abcd e
@@ -3186,8 +3087,7 @@ No match
a bcde f
0: a bcde f
1: a bcde f
- *** Failers
-No match
+\= Expect no match
abcdef
No match
@@ -3198,8 +3098,7 @@ No match
aBc
0: aBc
1: aB
- *** Failers
-No match
+\= Expect no match
abC
No match
aBC
@@ -3218,8 +3117,7 @@ No match
0: abc
aBc
0: aBc
- *** Failers
-No match
+\= Expect no match
ABC
No match
abC
@@ -3232,8 +3130,7 @@ No match
0: aBc
aBBc
0: aBBc
- *** Failers
-No match
+\= Expect no match
aBC
No match
aBBC
@@ -3244,8 +3141,7 @@ No match
0: abcd
abCd
0: abCd
- *** Failers
-No match
+\= Expect no match
aBCd
No match
abcD
@@ -3258,8 +3154,7 @@ No match
0: more than MILLION
more \n than Million
0: more \x0a than Million
- *** Failers
-No match
+\= Expect no match
MORE THAN MILLION
No match
more \n than \n million
@@ -3272,8 +3167,7 @@ No match
0: more than MILLION
more \n than Million
0: more \x0a than Million
- *** Failers
-No match
+\= Expect no match
MORE THAN MILLION
No match
more \n than \n million
@@ -3286,8 +3180,7 @@ No match
0: aBbc
aBBc
0: aBBc
- *** Failers
-No match
+\= Expect no match
Abc
No match
abAb
@@ -3300,8 +3193,7 @@ No match
0: abc
aBc
0: aBc
- *** Failers
-No match
+\= Expect no match
Ab
No match
abC
@@ -3316,8 +3208,7 @@ No match
aBxxc
0: xxc
1: xx
- *** Failers
-No match
+\= Expect no match
Abxxc
No match
ABxxc
@@ -3331,8 +3222,7 @@ No match
1: a
bB
0: bB
- *** Failers
-No match
+\= Expect no match
aB
No match
bA
@@ -3346,8 +3236,7 @@ No match
0: b
bb
0: bb
- *** Failers
-No match
+\= Expect no match
ab
No match
@@ -3361,8 +3250,7 @@ No match
0: 12
123
0: 12
- *** Failers
-No match
+\= Expect no match
xyz
No match
@@ -3371,8 +3259,7 @@ No match
0: abc:
12
0: 12
- *** Failers
-No match
+\= Expect no match
123
No match
xyz
@@ -3387,8 +3274,7 @@ No match
0: cat
focat
0: cat
- *** Failers
-No match
+\= Expect no match
foocat
No match
@@ -3401,8 +3287,7 @@ No match
0: cat
focat
0: cat
- *** Failers
-No match
+\= Expect no match
foocat
No match
@@ -3441,8 +3326,7 @@ No match
0: 12aa
1: 1
2: 2
- *** Failers
-No match
+\= Expect no match
1234
No match
@@ -3459,8 +3343,7 @@ No match
blaH blaH
0: blaH blaH
1: blaH
- *** Failers
-No match
+\= Expect no match
blah BLAH
No match
Blah blah
@@ -3628,8 +3511,7 @@ No match
0: 12-sep-98
12-09-98
0: 12-09-98
- *** Failers
-No match
+\= Expect no match
sep-12-98
No match
@@ -3640,8 +3522,7 @@ No match
foobarfootling
0: barfoo
1: foo
- *** Failers
-No match
+\= Expect no match
foobar
No match
barfoo
@@ -3676,8 +3557,7 @@ No match
BBx
0: BBx
1: BB
- *** Failers
-No match
+\= Expect no match
abcX
No match
aBCX
@@ -3709,8 +3589,7 @@ No match
France
0: F
1: F
- *** Failers
-No match
+\= Expect no match
Africa
No match
@@ -3733,8 +3612,7 @@ No match
Zambesi
0: Z
1: Z
- *** Failers
-No match
+\= Expect no match
aCD
No match
XY
@@ -3743,8 +3621,7 @@ No match
/(?<=foo\n)^bar/m
foo\nbar
0: bar
- *** Failers
-No match
+\= Expect no match
bar
No match
baz\nbar
@@ -3757,39 +3634,37 @@ No match
0: baz
koobarbaz
0: baz
- *** Failers
-No match
+\= Expect 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
+# 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
-No match
- aa
-No match
- aaa
-No match
aaaaa
0: aaaaa
1: a
aaaaaaa
0: aaaaaaa
1: a
+ aaaaaaaaaa
+ 0: aaaaaaaaaa
+ 1: aaaa
+\= Expect no match
+ a
+No match
+ aa
+No match
+ aaa
+No match
aaaaaaaa
No match
aaaaaaaaa
No match
- aaaaaaaaaa
- 0: aaaaaaaaaa
- 1: aaaa
aaaaaaaaaaa
No match
aaaaaaaaaaaa
@@ -3800,16 +3675,10 @@ No match
No match
aaaaaaaaaaaaaaa
No match
- aaaaaaaaaaaaaaaa
+ 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
@@ -3834,16 +3703,23 @@ No match
2: aa
3: aaa
4: a
- aaaaaaaa
-No match
- aaaaaaaaa
-No match
aaaaaaaaaa
0: aaaaaaaaaa
1: a
2: aa
3: aaa
4: aaaa
+\= Expect no match
+ a
+No match
+ aa
+No match
+ aaa
+No match
+ aaaaaaaa
+No match
+ aaaaaaaaa
+No match
aaaaaaaaaaa
No match
aaaaaaaaaaaa
@@ -3857,9 +3733,8 @@ 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
+# 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
@@ -3868,8 +3743,7 @@ No match
0: abc
ababc
0: abc
- *** Failers
-No match
+\= Expect no match
xbc
No match
axc
@@ -3904,8 +3778,7 @@ No match
/ab+bc/
abbc
0: abbc
- *** Failers
-No match
+\= Expect no match
abc
No match
abq
@@ -3930,8 +3803,7 @@ No match
0: abbbbc
/ab{4,5}bc/
- *** Failers
-No match
+\= Expect no match
abq
No match
abbbbc
@@ -3960,8 +3832,7 @@ No match
/^abc$/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
abbbbc
No match
abcc
@@ -3976,10 +3847,7 @@ No match
/abc$/
aabc
0: abc
- *** Failers
-No match
- aabc
- 0: abc
+\= Expect no match
aabcd
No match
@@ -4004,8 +3872,7 @@ No match
/a[bc]d/
abd
0: abd
- *** Failers
-No match
+\= Expect no match
axyzd
No match
abc
@@ -4038,8 +3905,7 @@ No match
/a[^bc]d/
aed
0: aed
- *** Failers
-No match
+\= Expect no match
abd
No match
abd
@@ -4052,10 +3918,9 @@ No match
/a[^]b]c/
adc
0: adc
- *** Failers
-No match
a-c
0: a-c
+\= Expect no match
a]c
No match
@@ -4068,8 +3933,7 @@ No match
0: a
/\by\b/
- *** Failers
-No match
+\= Expect no match
xy
No match
yz
@@ -4078,8 +3942,7 @@ No match
No match
/\Ba\B/
- *** Failers
- 0: a
+\= Expect no match
a-
No match
-a
@@ -4106,10 +3969,7 @@ No match
/\W/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
a
No match
@@ -4120,10 +3980,7 @@ No match
/a\Sb/
a-b
0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
+\= Expect no match
a b
No match
@@ -4134,10 +3991,7 @@ No match
/\D/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
1
No match
@@ -4148,10 +4002,7 @@ No match
/[\W]/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
a
No match
@@ -4162,10 +4013,7 @@ No match
/a[\S]b/
a-b
0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
+\= Expect no match
a b
No match
@@ -4176,10 +4024,7 @@ No match
/[\D]/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
1
No match
@@ -4269,14 +4114,13 @@ No match
0: cde
/abc/
- *** Failers
-No match
+\= Expect no match
b
No match
-
/a*/
-
+ \
+ 0:
/([abc])*d/
abbbcd
@@ -4361,8 +4205,7 @@ No match
0: adcdcde
/a[bcd]+dcdcde/
- *** Failers
-No match
+\= Expect no match
abcde
No match
adcdcde
@@ -4400,8 +4243,7 @@ No match
reffgz
0: effgz
1: effgz
- *** Failers
-No match
+\= Expect no match
effg
No match
bcdd
@@ -4449,8 +4291,7 @@ No match
9: a
/multiple words of text/
- *** Failers
-No match
+\= Expect no match
aa
No match
uh-uh
@@ -4501,12 +4342,10 @@ No match
a
0: a
1: a
- *** Failers
- 0: a
- 1: a
ab
0: a
1: a
+\= Expect no match
x
No match
@@ -4543,8 +4382,7 @@ No match
0: ABC
ABABC
0: ABC
- *** Failers
-No match
+\= Expect no match
aaxabxbaxbbx
No match
XBC
@@ -4577,8 +4415,7 @@ No match
0: ABBC
/ab+bc/i
- *** Failers
-No match
+\= Expect no match
ABC
No match
ABQ
@@ -4603,8 +4440,7 @@ No match
0: ABBBBC
/ab{4,5}?bc/i
- *** Failers
-No match
+\= Expect no match
ABQ
No match
ABBBBC
@@ -4633,8 +4469,7 @@ No match
/^abc$/i
ABC
0: ABC
- *** Failers
-No match
+\= Expect no match
ABBBBC
No match
ABCC
@@ -4669,10 +4504,9 @@ No match
0: AXYZC
/a.*c/i
- *** Failers
-No match
AABC
0: AABC
+\= Expect no match
AXYZD
No match
@@ -4683,8 +4517,7 @@ No match
/a[b-d]e/i
ACE
0: ACE
- *** Failers
-No match
+\= Expect no match
ABC
No match
ABD
@@ -4717,8 +4550,7 @@ No match
/a[^-b]c/i
ADC
0: ADC
- *** Failers
-No match
+\= Expect no match
ABD
No match
A-C
@@ -4740,8 +4572,7 @@ No match
1:
/$b/i
- *** Failers
-No match
+\= Expect no match
A]C
No match
B
@@ -4833,11 +4664,6 @@ No match
CDE
0: CDE
-/abc/i
-
-/a*/i
-
-
/([abc])*d/i
ABBBCD
0: ABBBCD
@@ -4877,6 +4703,7 @@ No match
0: HIJ
/^(ab|cd)e/i
+\= Expect no match
ABCDE
No match
@@ -4956,8 +4783,7 @@ No match
REFFGZ
0: EFFGZ
1: EFFGZ
- *** Failers
-No match
+\= Expect no match
ADCDCDE
No match
EFFG
@@ -5017,8 +4843,7 @@ No match
1: C
/multiple words of text/i
- *** Failers
-No match
+\= Expect no match
AA
No match
UH-UH
@@ -5176,8 +5001,7 @@ No match
aaaaaaaaaa
0: aaaaaaaaaa
1: aaaa
- *** Failers
-No match
+\= Expect no match
AB
No match
aaaaaaaaa
@@ -5189,8 +5013,7 @@ No match
aaaaaaaaaa
0: aaaaaaaaaa
1: aaaa
- *** Failers
-No match
+\= Expect no match
aaaaaaaaa
No match
aaaaaaaaaaa
@@ -5209,8 +5032,7 @@ No match
/(?<=a)b/
ab
0: b
- *** Failers
-No match
+\= Expect no match
cb
No match
b
@@ -5286,8 +5108,7 @@ No match
1: A
/(?:(?i)a)b/
- *** Failers
-No match
+\= Expect no match
cb
No match
aB
@@ -5314,8 +5135,7 @@ No match
1: A
/(?i:a)b/
- *** Failers
-No match
+\= Expect no match
aB
No match
aB
@@ -5342,34 +5162,14 @@ No match
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
+\= Expect no match
Ab
No match
AB
No match
-/((?-i)a)b/i
-
/(?-i:a)b/i
ab
0: ab
@@ -5389,8 +5189,7 @@ No match
1: a
/(?-i:a)b/i
- *** Failers
-No match
+\= Expect no match
AB
No match
Ab
@@ -5408,8 +5207,7 @@ No match
1: a
/(?-i:a)b/i
- *** Failers
-No match
+\= Expect no match
Ab
No match
AB
@@ -5418,8 +5216,7 @@ No match
/((?-i:a))b/i
/((?-i:a.))b/i
- *** Failers
-No match
+\= Expect no match
AB
No match
a\nB
@@ -5464,8 +5261,7 @@ No match
0: aaac
/(?<![cd])b/
- *** Failers
-No match
+\= Expect no match
B\nB
No match
dbcb
@@ -5494,8 +5290,7 @@ No match
0: ab
aaa
0: aaa
- *** Failers
-No match
+\= Expect no match
dbcb
No match
a--
@@ -5553,8 +5348,7 @@ No match
/^b/
/()^b/
- *** Failers
-No match
+\= Expect no match
a\nb\nc\n
No match
a\nb\nc\n
@@ -5566,8 +5360,7 @@ No match
1: b
/(x)?(?(1)a|b)/
- *** Failers
-No match
+\= Expect no match
a
No match
a
@@ -5595,8 +5388,7 @@ No match
2: )
blah
0: blah
- *** Failers
-No match
+\= Expect no match
a
No match
blah)
@@ -5611,8 +5403,7 @@ No match
2: )
blah
0: blah
- *** Failers
-No match
+\= Expect no match
blah)
No match
(blah
@@ -5625,8 +5416,7 @@ No match
0: a
/(?(?=a)b|a)/
- *** Failers
-No match
+\= Expect no match
a
No match
a
@@ -5661,8 +5451,7 @@ No match
2: aab
/^(?=(a+?))\1ab/
- *** Failers
-No match
+\= Expect no match
aaab
No match
aaab
@@ -5697,10 +5486,7 @@ No match
0: xy:z:::abcd
1: xy:z:::
2: abcd
- *** Failers
- 0: Failers
- 1: <unset>
- 2: Failers
+\= Expect no match
abcd:
No match
abcd:
@@ -5748,8 +5534,7 @@ No match
1: x
/a\Z/
- *** Failers
-No match
+\= Expect no match
aaab
No match
a\nb\n
@@ -5768,8 +5553,6 @@ No match
/b\z/
a\nb
0: b
- *** Failers
-No match
/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
a
@@ -5799,8 +5582,7 @@ No match
12-ab.1245
0: 12-ab.1245
1:
- *** Failers
-No match
+\= Expect no match
\
No match
.a
@@ -5835,18 +5617,19 @@ No match
endingwxyz
0: endingwxyz
1: wxyz
- *** Failers
-No match
+\= Expect 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
+\= Expect no match
word cat dog elephant mussel cow horse canary baboon snake shark
No match
/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
+\= Expect no match
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
@@ -5855,8 +5638,7 @@ No match
0: foo
123999foo
0: foo
- *** Failers
-No match
+\= Expect no match
123abcfoo
No match
@@ -5865,8 +5647,7 @@ No match
0: foo
123999foo
0: foo
- *** Failers
-No match
+\= Expect no match
123abcfoo
No match
@@ -5875,8 +5656,7 @@ No match
0: foo
123456foo
0: foo
- *** Failers
-No match
+\= Expect no match
123999foo
No match
@@ -5885,8 +5665,7 @@ No match
0: foo
123456foo
0: foo
- *** Failers
-No match
+\= Expect no match
123999foo
No match
@@ -5992,8 +5771,7 @@ No match
0: -
0digit
0: 0
- *** Failers
-No match
+\= Expect no match
bcdef
No match
@@ -6018,11 +5796,12 @@ No match
0: ab
/(?!\A)x/m
- a\nxb\n
+ a\nxb\n
0: x
/(?!^)x/m
- a\nxb\n
+\= Expect no match
+ a\nxb\n
No match
/abc\Qabc\Eabc/
@@ -6036,8 +5815,7 @@ No match
/ abc\Q abc\Eabc/x
abc abcabc
0: abc abcabc
- *** Failers
-No match
+\= Expect no match
abcabcabc
No match
@@ -6077,8 +5855,7 @@ No match
/\Gabc/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
xyzabc
No match
@@ -6096,8 +5873,7 @@ No match
/a(?x: b c )d/
XabcdY
0: abcd
- *** Failers
-No match
+\= Expect no match
Xa b c d Y
No match
@@ -6112,8 +5888,7 @@ No match
/(?i)AB(?-i)C/
XabCY
0: abC
- *** Failers
-No match
+\= Expect no match
XabcY
No match
@@ -6124,8 +5899,7 @@ No match
DE
0: DE
1: D
- *** Failers
-No match
+\= Expect no match
abcE
No match
abCe
@@ -6192,8 +5966,7 @@ No match
a123:ddde:9999:b342::324e:dcba:abcd
0: a123:ddde:9999:b342::324e:dcba:abcd
1:
- *** Failers
-No match
+\= Expect no match
1:2:3:4:5:6:7:8
No match
a123:bce:ddde:9999:b342::324e:dcba:abcd
@@ -6222,12 +5995,12 @@ No match
0: d
]
0: ]
- *** Failers
- 0: a
+\= Expect no match
b
No match
/(a+)*b/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -6262,8 +6035,7 @@ No match
/ab cd(?x) de fg/
ab cddefg
0: ab cddefg
- ** Failers
-No match
+\= Expect no match
abcddefg
No match
@@ -6271,24 +6043,21 @@ No match
foobarX
0: bar
1: bar
- ** Failers
-No match
+\= Expect no match
boobarX
No match
/(?<![^f])X/
offX
0: X
- ** Failers
-No match
+\= Expect no match
onyX
No match
/(?<=[^f])X/
onyX
0: X
- ** Failers
-No match
+\= Expect no match
offX
No match
@@ -6346,16 +6115,14 @@ No match
"(?x)(?-x: \s*#\s*)"
A # B
0: #
- ** Failers
-No match
+\= Expect no match
#
No match
"(?x-is)(?:(?-ixs) \s*#\s*) include"
A #include
0: #include
- ** Failers
-No match
+\= Expect no match
A#include
No match
A #Include
@@ -6433,16 +6200,14 @@ No match
/^[\Eabc]/
a
0: a
- ** Failers
-No match
+\= Expect no match
E
No match
/^[a-\Ec]/
b
0: b
- ** Failers
-No match
+\= Expect no match
-
No match
E
@@ -6451,8 +6216,7 @@ No match
/^[a\E\E-\Ec]/
b
0: b
- ** Failers
-No match
+\= Expect no match
-
No match
E
@@ -6461,8 +6225,7 @@ No match
/^[\E\Qa\E-\Qz\E]+/
b
0: b
- ** Failers
-No match
+\= Expect no match
-
No match
@@ -6514,23 +6277,26 @@ No match
2:
/(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
1:
-
-/(?>a|)*\d/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
+
+/(?>a|)*\d/
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
-
-/(?:a|)*\d/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
+
+/(?:a|)*\d/
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
/\Z/g
abc\n
@@ -6540,18 +6306,21 @@ No match
/^(?s)(?>.*)(?<!\n)/
abc
0: abc
+\= Expect no match
abc\n
No match
/^(?![^\n]*\n\z)/
abc
0:
+\= Expect no match
abc\n
No match
/\z(?<!\n)/
abc
0:
+\= Expect no match
abc\n
No match
@@ -6596,6 +6365,7 @@ No match
0: p
/.*[op][xyz]/
+\= Expect no match
fooabcfoo
No match
@@ -6608,6 +6378,7 @@ No match
/(?(?=^.*b)b|^)/
adc
0:
+\= Expect no match
abc
No match
@@ -6643,8 +6414,7 @@ No match
0: Ab
CcC
0: c
- ** Failers
-No match
+\= Expect no match
XABX
No match
@@ -6653,10 +6423,12 @@ No match
0: \x0a\x0b\x0c\x0d
/(abc)\1/i
+\= Expect no match
abc
No match
/(abc)\1/
+\= Expect no match
abc
No match
@@ -6673,16 +6445,14 @@ No match
0: 12
/[^a]*?X/i
- ** Failers
-No match
+\= Expect no match
12abc
No match
12ABC
No match
/[^a]+?X/i
- ** Failers
-No match
+\= Expect no match
12abc
No match
12ABC
@@ -6807,10 +6577,12 @@ No match
3: aabab
/(?>a+|ab)+?c/
+\= Expect no match
aabc
No match
/(?>a+|ab)+c/
+\= Expect no match
aabc
No match
@@ -6830,10 +6602,12 @@ No match
2: b
/^(?:a|ab)++c/
+\= Expect no match
aaaabc
No match
/^(?>a|ab)++c/
+\= Expect no match
aaaabc
No match
@@ -6845,8 +6619,7 @@ No match
abcabcabc
0: abc
0+ abcabc
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -6854,8 +6627,7 @@ No match
abcabcabc
0: abc
0+ abcabc
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -6863,8 +6635,7 @@ No match
abcabcabc
0: abc
0+ abcabc
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -6873,8 +6644,7 @@ No match
0: xyz
/(?=abc){1}xyz/
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -6913,8 +6683,7 @@ No match
/^[\g<a>]+/
ggg<<<aaa>>>
0: ggg<<<aaa>>>
- ** Failers
-No match
+\= Expect no match
\\ga
No match
@@ -6937,16 +6706,14 @@ No match
/(?<=a{2})b/i
xaabc
0: b
- ** Failers
-No match
+\= Expect no match
xabc
No match
/(?<!a{2})b/i
xabc
0: b
- ** Failers
-No match
+\= Expect no match
xaabc
No match
@@ -6959,16 +6726,14 @@ No match
0: b
aAAbc
0: b
- ** Failers
-No match
+\= Expect no match
xaabc
No match
/(?<=[^a]{2})b/i
axxbc
0: b
- ** Failers
-No match
+\= Expect no match
aAAbc
No match
xaabc
@@ -6998,40 +6763,28 @@ No match
aaaaaaa
0: aaaaaaa
1: aaa
- ** Failers
-No match
+\= Expect no match
aaaaaa
No match
aaaaaaaaa
No match
/^(a{2,3})++a/
- ** Failers
-No match
+\= Expect no match
aaaaaa
No match
/^(a{2,3})*+a/
- ** Failers
-No match
+\= Expect no match
aaaaaa
No match
-/ab\Cde/
- abXde
- 0: abXde
-
-/(?<=ab\Cde)X/
- abZdeX
- 0: X
-
/\H\h\V\v/
X X\x0a
0: X X\x0a
X\x09X\x0b
0: X\x09X\x0b
- ** Failers
-No match
+\= Expect no match
\xa0 X\x0a
No match
@@ -7042,8 +6795,7 @@ No match
0: \x09 \xa0\x0a\x0b\x0c\x0d
\x09\x20\xa0\x0a\x0b\x0c
0: \x09 \xa0\x0a\x0b\x0c
- ** Failers
-No match
+\= Expect no match
\x09\x20\xa0\x0a\x0b
No match
@@ -7062,8 +6814,7 @@ No match
0: XNNNYZ
> X NYQZ
0: X NYQZ
- ** Failers
-No match
+\= Expect no match
>XYZ
No match
> X NY Z
@@ -7120,12 +6871,11 @@ No match
abcdef
0:
0+ def
- ** Failers
-No match
+\= Expect no match
defabcxyz
No match
-/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
+/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-2}Z/
ababababbbabZXXXX
0: ababababbbabZ
1: ab
@@ -7140,6 +6890,7 @@ No match
1: bon
/(^(a|b\g{-1}))/
+\= Expect no match
bacxxx
No match
@@ -7150,8 +6901,7 @@ No match
xyzxyz
0: xyzxyz
1: xyz
- ** Failers
-No match
+\= Expect no match
abcxyz
No match
xyzabc
@@ -7164,8 +6914,7 @@ No match
xyzabc
0: xyzabc
1: xyz
- ** Failers
-No match
+\= Expect no match
xyzxyz
No match
@@ -7207,8 +6956,7 @@ No match
ab:ababxyz
0: ab:abab
1: ab
- ** Failers
-No match
+\= Expect no match
a:axyz
No match
ab:abxyz
@@ -7221,8 +6969,7 @@ No match
ab:ababxyz
0: ab:abab
1: ab
- ** Failers
-No match
+\= Expect no match
a:axyz
No match
ab:abxyz
@@ -7272,8 +7019,7 @@ No match
0: 10.0.0.0
1: <unset>
2: .0
- ** Failers
-No match
+\= Expect no match
10.6
No match
455.3.4.5
@@ -7289,8 +7035,7 @@ No match
10.0.0.0
0: 10.0.0.0
1: .0
- ** Failers
-No match
+\= Expect no match
10.6
No match
455.3.4.5
@@ -7300,8 +7045,7 @@ No match
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
+\= Expect no match
this is not a line with only words and spaces!
No match
@@ -7310,8 +7054,7 @@ No match
0: 12345a
1: 12345
2: a
- *** Failers
-No match
+\= Expect no match
12345+
No match
@@ -7341,8 +7084,7 @@ No match
(abc(def)xyz)
0: (abc(def)xyz)
1: xyz
- *** Failers
-No match
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -7356,8 +7098,7 @@ No match
a(b(c))d
0: a(b(c))d
1: d
- *** Failers)
-No match
+\= Expect no match)
a(b(c)d
No match
@@ -7395,8 +7136,7 @@ No match
2: <unset>
3: AblewasIereIsawElba
4: A
- *** Failers
-No match
+\= Expect no match
Thequickbrownfox
No match
@@ -7411,8 +7151,7 @@ No match
-12
0: -12
1: -12
- *** Failers
-No match
+\= Expect no match
((2+2)*-3)-7)
No match
@@ -7425,8 +7164,7 @@ No match
0: xxyzxyzz
1: xxyzxyzz
2: xyzxyz
- *** Failers
-No match
+\= Expect no match
xxyzz
No match
xxyzxyzxyzz
@@ -7457,28 +7195,32 @@ No match
0: <>
1: <>
2: <>
- *** Failers
-No match
+\= Expect no match
<abc
No match
/^a+(*FAIL)/
+\= Expect no match
aaaaaa
No match
/a+b?c+(*FAIL)/
+\= Expect no match
aaabccc
No match
/a+b?(*PRUNE)c+(*FAIL)/
+\= Expect no match
aaabccc
No match
/a+b?(*COMMIT)c+(*FAIL)/
+\= Expect no match
aaabccc
No match
/a+b?(*SKIP)c+(*FAIL)/
+\= Expect no match
aaabcccaaabccc
No match
@@ -7522,6 +7264,7 @@ No match
1: ddd
/a+b?(*THEN)c+(*FAIL)/
+\= Expect no match
aaabccc
No match
@@ -7544,8 +7287,7 @@ No match
1: ACD
2: C
3: E
- ** Failers
-No match
+\= Expect no match
AD
No match
@@ -7572,8 +7314,7 @@ No match
2: <unset>
3: Able was I ere I saw Elba
4: A
- *** Failers
-No match
+\= Expect no match
The quick brown fox
No match
@@ -7601,6 +7342,7 @@ No match
0: ablewasiereisawelba
1: ablewasiereisawelba
2: a
+\= Expect no match
rhubarb
No match
the quick brown fox
@@ -7610,8 +7352,7 @@ No match
baz
0: a
1: a
- ** Failers
-No match
+\= Expect no match
caz
No match
@@ -7619,8 +7360,7 @@ No match
zbaaz
0: a
1: a
- ** Failers
-No match
+\= Expect no match
aaa
No match
@@ -7636,8 +7376,7 @@ No match
defdef
0: defdef
1: def
- ** Failers
-No match
+\= Expect no match
abcdef
No match
defabc
@@ -7650,8 +7389,7 @@ No match
defabc
0: defabc
1: def
- ** Failers
-No match
+\= Expect no match
defdef
No match
abcdef
@@ -7671,8 +7409,7 @@ No match
4: "
5: <unset>
6: "
- ** Failers
-No match
+\= Expect no match
b\"11111
No match
@@ -7683,8 +7420,7 @@ No match
CCD
0: CC
1: C
- ** Failers
-No match
+\= Expect no match
CAD
No match
@@ -7695,8 +7431,7 @@ No match
BCD
0: BC
1: C
- ** Failers
-No match
+\= Expect no match
ABCD
No match
CAD
@@ -7720,8 +7455,7 @@ No match
BAX
0: BA
1: A
- ** Failers
-No match
+\= Expect no match
ACX
No match
ABC
@@ -7742,16 +7476,14 @@ No match
2: ef
/^(?=a(*SKIP)b|ac)/
- ** Failers
-No match
+\= Expect no match
ac
No match
/^(?=a(*PRUNE)b)/
ab
0:
- ** Failers
-No match
+\= Expect no match
ac
No match
@@ -7825,14 +7557,14 @@ No match
# I think is a Perl bug.
/A(*COMMIT)(B|D)/
+\= Expect no match
ACABX
No match
# Check the use of names for failure
/^(A(*PRUNE:A)B|C(*PRUNE:B)D)/mark
- ** Failers
-No match
+\= Expect no match
AC
No match, mark = A
CB
@@ -7843,20 +7575,22 @@ No match, mark = B
0: C
1: C
MK: A
+\= Expect no match
D
No match, mark = A
/^(A(*THEN:A)B|C(*THEN:B)D)/mark
- ** Failers
-No match
+\= Expect no match
CB
No match, mark = B
/^(?:A(*THEN:A)B|C(*THEN:B)D)/mark
+\= Expect no match
CB
No match, mark = B
/^(?>A(*THEN:A)B|C(*THEN:B)D)/mark
+\= Expect no match
CB
No match, mark = B
@@ -7882,6 +7616,7 @@ No match, mark = B
0: AC
/(*:A)A+(*SKIP:A)(B|Z)/mark
+\= Expect no match
AAAC
No match, mark = A
@@ -7905,8 +7640,7 @@ MK: B
1: A
2: B
3: C
- ** Failers
-No match
+\= Expect no match
DEFGABC
No match
@@ -7918,6 +7652,7 @@ No match
1: a
/(\w+)b(*COMMIT)\w{2}/
+\= Expect no match
abbb
No match
@@ -7930,10 +7665,12 @@ No match
# COMMIT should override THEN.
/(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
+\= Expect no match
yes
No match
/(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
+\= Expect no match
yes
No match
@@ -7944,10 +7681,12 @@ No match
0: bc
/(*SKIP)bc/
+\= Expect no match
a
No match
/(*SKIP)b/
+\= Expect no match
a
No match
@@ -7963,9 +7702,7 @@ No match
aA
0: aA
1: a
- ** Failers
- 0: **
- 1: *
+\= Expect no match
ab
No match
aB
@@ -7978,8 +7715,7 @@ No match
/^(?&t)*+(?(DEFINE)(?<t>a))\w$/
aaaaaaX
0: aaaaaaX
- ** Failers
-No match
+\= Expect no match
aaaaaa
No match
@@ -7998,8 +7734,7 @@ No match
0: Y
1: <unset>
2: Y
- ** Failers
-No match
+\= Expect no match
aaaa
No match
@@ -8010,8 +7745,7 @@ No match
YZ
0: Y
1: Y
- ** Failers
-No match
+\= Expect no match
aaaa
No match
@@ -8020,8 +7754,7 @@ No match
0: aaaaX
1: a
2: X
- ** Failers
-No match
+\= Expect no match
aaaa
No match
YZ
@@ -8031,8 +7764,7 @@ No match
aaaaX
0: aaaaX
1: X
- ** Failers
-No match
+\= Expect no match
aaaa
No match
YZ
@@ -8061,8 +7793,7 @@ No match
0: aaaaX
1: a
2: X
- ** Failers
-No match
+\= Expect no match
aaa
No match
YZ
@@ -8072,8 +7803,7 @@ No match
aaaaX
0: aaaaX
1: X
- ** Failers
-No match
+\= Expect no match
aaa
No match
YZ
@@ -8091,16 +7821,14 @@ No match
1:
/(a)++(?1)b/
- ** Failers
-No match
+\= Expect no match
ab
No match
aab
No match
/(a)*+(?1)b/
- ** Failers
-No match
+\= Expect no match
ab
No match
aab
@@ -8157,6 +7885,7 @@ No match
1: a
/^(a)(?1)++ab/
+\= Expect no match
aaaab
No match
@@ -8229,6 +7958,7 @@ MK: any \x0aname
# Capture
/^.*? (a(*THEN)b) c/x
+\= Expect no match
aabc
No match
@@ -8244,12 +7974,14 @@ No match
2: ab
/^.*? ( (a(*THEN)b) ) c/x
+\= Expect no match
aabc
No match
# Non-capture
/^.*? (?:a(*THEN)b) c/x
+\= Expect no match
aabc
No match
@@ -8262,12 +7994,14 @@ No match
0: aabc
/^.*? (?: (?:a(*THEN)b) ) c/x
+\= Expect no match
aabc
No match
# Atomic
/^.*? (?>a(*THEN)b) c/x
+\= Expect no match
aabc
No match
@@ -8280,12 +8014,14 @@ No match
0: aabc
/^.*? (?> (?>a(*THEN)b) ) c/x
+\= Expect no match
aabc
No match
# Possessive capture
/^.*? (a(*THEN)b)++ c/x
+\= Expect no match
aabc
No match
@@ -8301,12 +8037,14 @@ No match
2: ab
/^.*? ( (a(*THEN)b)++ )++ c/x
+\= Expect no match
aabc
No match
# Possessive non-capture
/^.*? (?:a(*THEN)b)++ c/x
+\= Expect no match
aabc
No match
@@ -8319,6 +8057,7 @@ No match
0: aabc
/^.*? (?: (?:a(*THEN)b)++ )++ c/x
+\= Expect no match
aabc
No match
@@ -8331,6 +8070,7 @@ No match
# Condition
/^.*?(?(?=a)a|b(*THEN)c)/
+\= Expect no match
ba
No match
@@ -8339,6 +8079,7 @@ No match
0: ba
/^.*?(?(?=a)a(*THEN)b|c)/
+\= Expect no match
ac
No match
@@ -8374,8 +8115,7 @@ MK: m
xabcd
0: c
1: ab
- ** Failers
-No match
+\= Expect no match
xacd
No match
@@ -8413,6 +8153,7 @@ MK: N
0: C
1: C
MK: B
+\= Expect no match
D
No match, mark = B
@@ -8421,6 +8162,7 @@ No match, mark = B
0: C
1: C
MK: B
+\= Expect no match
D
No match, mark = B
@@ -8429,6 +8171,7 @@ No match, mark = B
0: C
1: C
MK: B
+\= Expect no match
D
No match, mark = B
@@ -8437,6 +8180,7 @@ No match, mark = B
0: C
1: C
MK: B
+\= Expect no match
D
No match, mark = B
@@ -8445,28 +8189,33 @@ No match, mark = B
0: C
1: C
MK: B
+\= Expect no match
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/x,mark
+\= Expect no match
AAAC
No match, mark = A
# Same
/A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/x,mark
+\= Expect no match
AAAC
No match, mark = B
/A(*:A)A+(*SKIP)(B|Z) | AC/x,mark
+\= Expect no match
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/x,mark
+\= Expect no match
AAAC
No match, mark = A
@@ -8482,8 +8231,7 @@ MK: A
XXYZ
0: XXY
MK: B
- ** Failers
-No match
+\= Expect no match
XAQQ
No match, mark = A
XAQQXZZ
@@ -8502,8 +8250,7 @@ MK: A
0: CD
1: CD
MK: B
- ** Failers
-No match
+\= Expect no match
AC
No match, mark = A
CB
@@ -8518,8 +8265,7 @@ MK: A
0: CD
1: CD
MK: B
- ** Failers
-No match
+\= Expect no match
AC
No match, mark = A
CB
@@ -8558,16 +8304,14 @@ MK: A
aw
0: aw
MK: n
- ** Failers
-No match, mark = n
+\= Expect no match
abc
No match, mark = m
/b(*:m)f|aw/mark
abaw
0: aw
- ** Failers
-No match
+\= Expect no match
abc
No match, mark = m
abax
@@ -8578,14 +8322,12 @@ No match, mark = m
0: AAC
/a(*PRUNE:X)bc|qq/mark,no_start_optimize
- ** Failers
-No match, mark = X
+\= Expect no match
axy
No match, mark = X
/a(*THEN:X)bc|qq/mark,no_start_optimize
- ** Failers
-No match, mark = X
+\= Expect no match
axy
No match, mark = X
@@ -8593,8 +8335,7 @@ No match, mark = X
abxy
0: abx
MK: A
- ** Failers
-No match
+\= Expect no match
abpq
No match
@@ -8602,8 +8343,7 @@ No match
abxy
0: abx
MK: Y
- ** Failers
-No match
+\= Expect no match
abpq
No match
@@ -8611,8 +8351,7 @@ No match
abxy
0: abx
MK: A
- ** Failers
-No match
+\= Expect no match
abpq
No match
@@ -8620,8 +8359,7 @@ No match
abxy
0: abx
MK: Y
- ** Failers
-No match
+\= Expect no match
abpq
No match
@@ -8629,8 +8367,7 @@ No match
abxy
0: abx
MK: A
- ** Failers
-No match
+\= Expect no match
abpq
No match
@@ -8638,8 +8375,7 @@ No match
abxy
0: abx
MK: Y
- ** Failers
-No match
+\= Expect no match
abpq
No match
@@ -8650,6 +8386,7 @@ No match
2:
/(another)?(\1+)test/
+\= Expect no match
hello world test
No match
@@ -8675,22 +8412,6 @@ No match
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
@@ -8700,6 +8421,7 @@ No match
0: ab
/(?>^a)b/s
+\= Expect no match
aab
No match
@@ -8722,6 +8444,7 @@ No match
2: wxyz
"(?>.*)foo"
+\= Expect no match
abcdfooxyz
No match
@@ -8738,6 +8461,7 @@ No match
0: ac
/(?<=(*SKIP)ac)a/
+\= Expect no match
aa
No match
@@ -8827,6 +8551,7 @@ MK: n
# This gives "no match", as expected.
/aaaaa(*COMMIT)b|a+c/
+\= Expect no match
aaaaaac
No match
@@ -8903,6 +8628,7 @@ No match
abc
0: abc
1: ab
+\= Expect no match
abd
No match
@@ -8919,10 +8645,11 @@ No match
0: abd
/a(?=b(*COMMIT)c)[^d]|abd/
+ abc
+ 0: ab
+\= Expect no match
abd
No match
- abc
- 0: ab
/a(?=bc).|abd/
abd
@@ -8931,6 +8658,7 @@ No match
0: ab
/a(?>b(*COMMIT)c)d|abd/
+\= Expect no match
abceabd
No match
@@ -8943,6 +8671,7 @@ No match
0: abd
/(?>a(*COMMIT)c)d|abd/
+\= Expect no match
abd
No match
@@ -8956,8 +8685,7 @@ No match
# made them compatible.
/^(a)?(?(1)a|b)+$/
- *** Failers
-No match
+\= Expect no match
a
No match
@@ -8977,8 +8705,8 @@ No match
abcd
0: abcd
-
/A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/x,mark
+\= Expect no match
AAAC
No match, mark = A
@@ -8986,68 +8714,82 @@ No match, mark = A
abcd
0: abcd
1: abcd
- *** Failers
-No match
+\= Expect no match
abcxy
No match
/^((yes|no)(*THEN)(*F))?/
+\= Expect no match
yes
No match
/(A (.*) C? (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) C? (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) C? (*THEN) | A D) \s* z/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) (?:C|) (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) C{0,6} (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCEBefgBhiBqz
No match
/(A (.*) (CE){0,6} (*THEN) | A D) z/x
+\= Expect no match
AbcdCEBefgBhiBqz
No match
/(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(A (.*) (CE*){0,6} (*THEN) | A D) z/x
+\= Expect no match
AbcdCBefgBhiBqz
No match
/(?=a(*COMMIT)b|ac)ac|ac/
+\= Expect no match
ac
No match
/(?=a(*COMMIT)b|(ac)) ac | (a)c/x
+\= Expect no match
ac
No match
@@ -9082,6 +8824,7 @@ No match
0: bn
/(?=b(*SKIP)a)bn|bnn/
+\= Expect no match
bnn
No match
@@ -9148,30 +8891,35 @@ MK: m(m
/^\d*\w{4}/
1234
0: 1234
+\= Expect no match
123
No match
/^[^b]*\w{4}/
aaaa
0: aaaa
+\= Expect no match
aaa
No match
/^[^b]*\w{4}/i
aaaa
0: aaaa
+\= Expect no match
aaa
No match
/^a*\w{4}/
aaaa
0: aaaa
+\= Expect no match
aaa
No match
/^a*\w{4}/i
aaaa
0: aaaa
+\= Expect no match
aaa
No match
@@ -9194,8 +8942,7 @@ No match
1: A
2: <unset>
3: bar
- ** Failers
-No match
+\= Expect no match
Afoofoo
No match
Abarbar
@@ -9278,6 +9025,7 @@ No match
1: ab
/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
+\= Expect no match
acb
No match
@@ -9337,6 +9085,7 @@ No match
2: b
/(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/g,dupnames
+\= Expect no match
bbbaaaccccaaabbbcc
No match
@@ -9463,4 +9212,49 @@ No match
0:
1:
+/(?|(aaa)|(b))\g{1}/
+ aaaaaa
+ 0: aaaaaa
+ 1: aaa
+ bb
+ 0: bb
+ 1: b
+
+/(?|(aaa)|(b))(?1)/
+ aaaaaa
+ 0: aaaaaa
+ 1: aaa
+ baaa
+ 0: baaa
+ 1: b
+\= Expect no match
+ bb
+No match
+
+/(?|(aaa)|(b))/
+ xaaa
+ 0: aaa
+ 1: aaa
+ xbc
+ 0: b
+ 1: b
+
+/(?|(?'a'aaa)|(?'a'b))\k'a'/
+ aaaaaa
+ 0: aaaaaa
+ 1: aaa
+ bb
+ 0: bb
+ 1: b
+
+/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames
+ aaaccccaaa
+ 0: aaaccccaaa
+ 1: aaa
+ 2: cccc
+ bccccb
+ 0: bccccb
+ 1: b
+ 2: cccc
+
# End of testinput1
diff --git a/testdata/testoutput10 b/testdata/testoutput10
index ef248db..9761f0f 100644
--- a/testdata/testoutput10
+++ b/testdata/testoutput10
@@ -1,70 +1,10 @@
# This set of tests is for UTF-8 support and Unicode property support, with
# relevance only for the 8-bit library.
-/X(\C{3})/utf
- X\x{1234}
- 0: X\x{1234}
- 1: \x{1234}
-
-/X(\C{4})/utf
- X\x{1234}YZ
- 0: X\x{1234}Y
- 1: \x{1234}Y
-
-/X\C*/utf
- XYZabcdce
- 0: XYZabcdce
-
-/X\C*?/utf
- XYZabcde
- 0: X
-
-/X\C{3,5}/utf
- Xabcdefg
- 0: Xabcde
- X\x{1234}
- 0: X\x{1234}
- X\x{1234}YZ
- 0: X\x{1234}YZ
- X\x{1234}\x{512}
- 0: X\x{1234}\x{512}
- X\x{1234}\x{512}YZ
- 0: X\x{1234}\x{512}
-
-/X\C{3,5}?/utf
- Xabcdefg
- 0: Xabc
- X\x{1234}
- 0: X\x{1234}
- X\x{1234}YZ
- 0: X\x{1234}
- X\x{1234}\x{512}
- 0: X\x{1234}
-
-/a\Cb/utf
- aXb
- 0: aXb
- a\nb
- 0: a\x{0a}b
-
-/a\C\Cb/utf
- a\x{100}b
- 0: a\x{100}b
-
-/ab\Cde/utf
- abXde
- 0: abXde
-
-/a\C\Cb/utf
- a\x{100}b
- 0: a\x{100}b
- ** Failers
-No match
- a\x{12257}b
-No match
+# The next 4 patterns have UTF-8 errors
/[]/utf
-Failed: error -8 at offset 0: UTF-8 error: byte 2 top bits not 0x80
+Failed: error -8 at offset 1: UTF-8 error: byte 2 top bits not 0x80
//utf
Failed: error -3 at offset 0: UTF-8 error: 1 byte missing at end
@@ -72,7 +12,13 @@ Failed: error -3 at offset 0: UTF-8 error: 1 byte missing at end
/xxx/utf
Failed: error -8 at offset 0: UTF-8 error: byte 2 top bits not 0x80
+/Â/utf
+Failed: error -22 at offset 2: UTF-8 error: isolated byte with 0x80 bit set
+
+# Now test subjects
+
/badutf/utf
+\= Expect UTF-8 errors
X\xdf
Failed: error -3: UTF-8 error: 1 byte missing at end at offset 1
XX\xef
@@ -146,13 +92,14 @@ Failed: error -20: UTF-8 error: overlong 5-byte sequence at offset 0
\xfc\x80\x80\x80\x80\x8f
Failed: error -21: UTF-8 error: overlong 6-byte sequence at offset 0
\x80
-Failed: error -22: UTF-8 error: isolated 0x80 byte at offset 0
+Failed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 0
\xfe
Failed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0
\xff
Failed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0
/badutf/utf
+\= Expect UTF-8 errors
XX\xfb\x80\x80\x80\x80
Failed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 2
XX\xfd\x80\x80\x80\x80\x80
@@ -161,6 +108,7 @@ Failed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at of
Failed: error -15: UTF-8 error: code points greater than 0x10ffff are not defined at offset 2
/shortutf/utf
+\= Expect UTF-8 errors
XX\xdf\=ph
Failed: error -3: UTF-8 error: 1 byte missing at end at offset 2
XX\xef\=ph
@@ -193,6 +141,7 @@ Failed: error -4: UTF-8 error: 2 bytes missing at end at offset 0
Failed: error -3: UTF-8 error: 1 byte missing at end at offset 0
/anything/utf
+\= Expect UTF-8 errors
X\xc0\x80
Failed: error -17: UTF-8 error: overlong 2-byte sequence at offset 1
XX\xc1\x8f
@@ -209,6 +158,15 @@ Failed: error -21: UTF-8 error: overlong 6-byte sequence at offset 0
Failed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0
\xff\x80\x80\x80\x80\x80
Failed: error -23: UTF-8 error: illegal byte (0xfe or 0xff) at offset 0
+ \xf8\x88\x80\x80\x80
+Failed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0
+ \xf9\x87\x80\x80\x80
+Failed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0
+ \xfc\x84\x80\x80\x80\x80
+Failed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0
+ \xfd\x83\x80\x80\x80\x80
+Failed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0
+\= Expect no match
\xc3\x8f
No match
\xe0\xaf\x80
@@ -219,14 +177,6 @@ No match
No match
\xf1\x8f\x80\x80
No match
- \xf8\x88\x80\x80\x80
-Failed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0
- \xf9\x87\x80\x80\x80
-Failed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0
- \xfc\x84\x80\x80\x80\x80
-Failed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0
- \xfd\x83\x80\x80\x80\x80
-Failed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0
\xf8\x88\x80\x80\x80\=no_utf_check
No match
\xf9\x87\x80\x80\x80\=no_utf_check
@@ -235,7 +185,62 @@ No match
No match
\xfd\x83\x80\x80\x80\x80\=no_utf_check
No match
+
+# Similar tests with offsets
+/badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=1
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+\= Expect no match
+ X\xdfabcd\=offset=2
+No match
+
+/(?<=x)badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=1
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=2
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\xdf\=offset=3
+Failed: error -3: UTF-8 error: 1 byte missing at end at offset 6
+\= Expect no match
+ X\xdfabcd\=offset=3
+No match
+
+/(?<=xx)badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=1
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=2
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=3
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+
+/(?<=xxxx)badutf/utf
+\= Expect UTF-8 errors
+ X\xdfabcd
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=1
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=2
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabcd\=offset=3
+Failed: error -8: UTF-8 error: byte 2 top bits not 0x80 at offset 1
+ X\xdfabc\xdf\=offset=6
+Failed: error -3: UTF-8 error: 1 byte missing at end at offset 5
+ X\xdfabc\xdf\=offset=7
+Failed: error -33: bad offset value
+\= Expect no match
+ X\xdfabcd\=offset=6
+No match
+
/\x{100}/IB,utf
------------------------------------------------------------------
Bra
@@ -448,29 +453,6 @@ First code unit = \xf0
Last code unit = \xab
Subject length lower bound = 1
-# This one is here not because it's different to Perl, but because the way
-# the captured single-byte is displayed. (In Perl it becomes a character, and you
-# can't tell the difference.)
-
-/X(\C)(.*)/utf
- X\x{1234}
- 0: X\x{1234}
- 1: \x{e1}
- 2: \x{88}\x{b4}
- X\nabc
- 0: X\x{0a}abc
- 1: \x{0a}
- 2: abc
-
-# This one is here because Perl gives out a grumbly error message (quite
-# correctly, but that messes up comparisons).
-
-/a\Cb/utf
- *** Failers
-No match
- a\x{100}b
-No match
-
/[^ab\xC0-\xF0]/IB,utf
------------------------------------------------------------------
Bra
@@ -499,8 +481,7 @@ Subject length lower bound = 1
0: \x{100}
\x{1000}
0: \x{1000}
- *** Failers
- 0: *
+\= Expect no match
\x{c0}
No match
\x{f0}
@@ -659,8 +640,6 @@ Subject length lower bound = 1
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[\xff]/IB,utf
------------------------------------------------------------------
@@ -750,33 +729,35 @@ Failed: error 106 at offset 15: missing terminating ] for character class
# This tests the stricter UTF-8 check according to RFC 3629.
/X/utf
+\= Expect UTF-8 errors
\x{d800}
Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 0
- \x{d800}\=no_utf_check
-No match
\x{da00}
Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 0
- \x{da00}\=no_utf_check
-No match
\x{dfff}
Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 0
- \x{dfff}\=no_utf_check
-No match
\x{110000}
Failed: error -15: UTF-8 error: code points greater than 0x10ffff are not defined at offset 0
- \x{110000}\=no_utf_check
-No match
\x{2000000}
Failed: error -13: UTF-8 error: 5-byte character is not allowed (RFC 3629) at offset 0
- \x{2000000}\=no_utf_check
-No match
\x{7fffffff}
Failed: error -14: UTF-8 error: 6-byte character is not allowed (RFC 3629) at offset 0
+\= Expect no match
+ \x{d800}\=no_utf_check
+No match
+ \x{da00}\=no_utf_check
+No match
+ \x{dfff}\=no_utf_check
+No match
+ \x{110000}\=no_utf_check
+No match
+ \x{2000000}\=no_utf_check
+No match
\x{7fffffff}\=no_utf_check
No match
/(*UTF8)\x{1234}/
- abcd\x{1234}pqr
+ abcd\x{1234}pqr
0: \x{1234}
/(*CRLF)(*UTF)(*BSR_UNICODE)a\Rb/I
@@ -887,16 +868,19 @@ Subject length lower bound = 3
/a+/utf
a\x{123}aa\=offset=1
0: aa
- a\x{123}aa\=offset=2
-Error -36 (bad UTF-8 offset)
a\x{123}aa\=offset=3
0: aa
a\x{123}aa\=offset=4
0: a
- a\x{123}aa\=offset=5
-No match
+\= Expect bad offset value
a\x{123}aa\=offset=6
Failed: error -33: bad offset value
+\= Expect bad UTF-8 offset
+ a\x{123}aa\=offset=2
+Error -36 (bad UTF-8 offset)
+\= Expect no match
+ a\x{123}aa\=offset=5
+No match
/\x{1234}+/Ii,utf
Capturing subpattern count = 0
@@ -1281,8 +1265,6 @@ Subject length lower bound = 1
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[z-\x{100}]/IB,utf
------------------------------------------------------------------
@@ -1467,8 +1449,7 @@ Subject length lower bound = 1
0: \x{105}
\x{109}
0: \x{109}
- ** Failers
-No match
+\= Expect no match
\x{100}
No match
\x{10a}
@@ -1507,8 +1488,7 @@ Subject length lower bound = 1
0: \x{100}
\x{101}
0: \x{101}
- ** Failers
-No match
+\= Expect no match
\x{102}
No match
Y
@@ -1547,7 +1527,16 @@ Last code unit = 'B' (caseless)
Subject length lower bound = 2
/abc/utf,replace=
- abc
+ abc
Failed: error -3: UTF-8 error: 1 byte missing at end
+/(?<=(a)(?-1))x/I,utf
+Capturing subpattern count = 1
+Max lookbehind = 2
+Options: utf
+First code unit = 'x'
+Subject length lower bound = 1
+ a\x80zx\=offset=3
+Failed: error -22: UTF-8 error: isolated byte with 0x80 bit set at offset 1
+
# End of testinput10
diff --git a/testdata/testoutput11-16 b/testdata/testoutput11-16
index eda8938..03e04bc 100644
--- a/testdata/testoutput11-16
+++ b/testdata/testoutput11-16
@@ -4,13 +4,8 @@
# different, so they have separate output files.
#forbid_utf
+#newline_default LF ANY ANYCRLF
-/a\Cb/
- aXb
- 0: aXb
- a\nb
- 0: a\x0ab
-
/[^\x{c4}]/IB
------------------------------------------------------------------
Bra
@@ -581,7 +576,7 @@ Failed: error 134 at offset 11: character code point value in \x{} or \o{} is to
# Non-UTF characters
-/\C{2,3}/
+/.{2,3}/
\x{400000}\x{400001}\x{400002}\x{400003}
** Character \x{400000} is greater than 0xffff and UTF-16 mode is not enabled.
** Truncation will probably give the wrong result.
@@ -646,4 +641,6 @@ Starting code units: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0e
\xfc \xfd \xfe \xff
Subject length lower bound = 1
+/(*THEN:\[A]{65501})/expand
+
# End of testinput11
diff --git a/testdata/testoutput11-32 b/testdata/testoutput11-32
index f048785..390ebe0 100644
--- a/testdata/testoutput11-32
+++ b/testdata/testoutput11-32
@@ -4,13 +4,8 @@
# different, so they have separate output files.
#forbid_utf
+#newline_default LF ANY ANYCRLF
-/a\Cb/
- aXb
- 0: aXb
- a\nb
- 0: a\x0ab
-
/[^\x{c4}]/IB
------------------------------------------------------------------
Bra
@@ -582,7 +577,7 @@ Subject length lower bound = 2
# Non-UTF characters
-/\C{2,3}/
+/.{2,3}/
\x{400000}\x{400001}\x{400002}\x{400003}
0: \x{400000}\x{400001}\x{400002}
@@ -649,4 +644,6 @@ Starting code units: \x00 \x01 \x02 \x03 \x04 \x05 \x06 \x07 \x08 \x09 \x0e
\xfc \xfd \xfe \xff
Subject length lower bound = 1
+/(*THEN:\[A]{65501})/expand
+
# End of testinput11
diff --git a/testdata/testoutput12-16 b/testdata/testoutput12-16
index 81584dd..383a032 100644
--- a/testdata/testoutput12-16
+++ b/testdata/testoutput12-16
@@ -9,78 +9,6 @@
]
** Failed: invalid UTF-8 string cannot be used as input in UTF mode
-/X(\C{3})/utf
- X\x{11234}Y
- 0: X\x{11234}Y
- 1: \x{11234}Y
- X\x{11234}YZ
- 0: X\x{11234}Y
- 1: \x{11234}Y
-
-/X(\C{4})/utf
- X\x{11234}YZ
- 0: X\x{11234}YZ
- 1: \x{11234}YZ
- X\x{11234}YZW
- 0: X\x{11234}YZ
- 1: \x{11234}YZ
-
-/X\C*/utf
- XYZabcdce
- 0: XYZabcdce
-
-/X\C*?/utf
- XYZabcde
- 0: X
-
-/X\C{3,5}/utf
- Xabcdefg
- 0: Xabcde
- X\x{11234}Y
- 0: X\x{11234}Y
- X\x{11234}YZ
- 0: X\x{11234}YZ
- X\x{11234}\x{512}
- 0: X\x{11234}\x{512}
- X\x{11234}\x{512}YZ
- 0: X\x{11234}\x{512}YZ
- X\x{11234}\x{512}\x{11234}Z
- 0: X\x{11234}\x{512}\x{11234}
-
-/X\C{3,5}?/utf
- Xabcdefg
- 0: Xabc
- X\x{11234}Y
- 0: X\x{11234}Y
- X\x{11234}YZ
- 0: X\x{11234}Y
- X\x{11234}\x{512}YZ
- 0: X\x{11234}\x{512}
- *** Failers
-No match
- X\x{11234}
-No match
-
-/a\Cb/utf
- aXb
- 0: aXb
- a\nb
- 0: a\x{0a}b
-
-/a\C\Cb/utf
- a\x{12257}b
- 0: a\x{12257}b
- a\x{12257}\x{11234}b
-No match
- ** Failers
-No match
- a\x{100}b
-No match
-
-/ab\Cde/utf
- abXde
- 0: abXde
-
# Check maximum character size
/\x{ffff}/IB,utf
@@ -310,29 +238,6 @@ First code unit = \x{d844}
Last code unit = \x{deab}
Subject length lower bound = 1
-# This one is here not because it's different to Perl, but because the way
-# the captured single-byte is displayed. (In Perl it becomes a character, and you
-# can't tell the difference.)
-
-/X(\C)(.*)/utf
- X\x{1234}
- 0: X\x{1234}
- 1: \x{1234}
- 2:
- X\nabc
- 0: X\x{0a}abc
- 1: \x{0a}
- 2: abc
-
-# This one is here because Perl gives out a grumbly error message (quite
-# correctly, but that messes up comparisons).
-
-/a\Cb/utf
- *** Failers
-No match
- a\x{100}b
- 0: a\x{100}b
-
/[^ab\xC0-\xF0]/IB,utf
------------------------------------------------------------------
Bra
@@ -362,8 +267,7 @@ Subject length lower bound = 1
0: \x{100}
\x{1000}
0: \x{1000}
- *** Failers
- 0: *
+\= Expect no match
\x{c0}
No match
\x{f0}
@@ -520,8 +424,6 @@ Subject length lower bound = 1
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[\xff]/IB,utf
------------------------------------------------------------------
@@ -607,30 +509,38 @@ Subject length lower bound = 2
Failed: error 106 at offset 13: missing terminating ] for character class
/X/utf
- XX\x{d800}
-Failed: error -24: UTF-16 error: missing low surrogate at end at offset 2
XX\x{d800}\=no_utf_check
0: X
- XX\x{da00}
-Failed: error -24: UTF-16 error: missing low surrogate at end at offset 2
XX\x{da00}\=no_utf_check
0: X
- XX\x{dc00}
-Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
XX\x{dc00}\=no_utf_check
0: X
- XX\x{de00}
-Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
XX\x{de00}\=no_utf_check
0: X
- XX\x{dfff}
-Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
XX\x{dfff}\=no_utf_check
0: X
+\= Expect UTF error
+ XX\x{d800}
+Failed: error -24: UTF-16 error: missing low surrogate at end at offset 2
+ XX\x{da00}
+Failed: error -24: UTF-16 error: missing low surrogate at end at offset 2
+ XX\x{dc00}
+Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
+ XX\x{de00}
+Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
+ XX\x{dfff}
+Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
XX\x{110000}
** Failed: character \x{110000} is greater than 0x10ffff and so cannot be converted to UTF-16
XX\x{d800}\x{1234}
Failed: error -25: UTF-16 error: invalid low surrogate at offset 3
+\= Expect no match
+ XX\x{d800}\=offset=3
+No match
+
+/(?<=.)X/utf
+ XX\x{d800}\=offset=3
+Failed: error -24: UTF-16 error: missing low surrogate at end at offset 2
/(*UTF16)\x{11234}/
abcd\x{11234}pqr
@@ -788,8 +698,10 @@ Subject length lower bound = 3
0: aa
a\x{123}aa\=offset=3
0: a
+\= Expect no match
a\x{123}aa\=offset=4
No match
+\= Expect bad offset error
a\x{123}aa\=offset=5
Failed: error -33: bad offset value
a\x{123}aa\=offset=6
@@ -854,16 +766,21 @@ Subject length lower bound = 1
# Check bad offset
/a/utf
+\= Expect bad UTF-16 offset, or no match in 32-bit
\x{10000}\=offset=1
Error -36 (bad UTF-16 offset)
\x{10000}ab\=offset=1
Error -36 (bad UTF-16 offset)
+\= Expect 16-bit match, 32-bit no match
\x{10000}ab\=offset=2
0: a
+\= Expect no match
\x{10000}ab\=offset=3
No match
+\= Expect no match in 16-bit, bad offset in 32-bit
\x{10000}ab\=offset=4
No match
+\= Expect bad offset
\x{10000}ab\=offset=5
Failed: error -33: bad offset value
@@ -1123,10 +1040,6 @@ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too
/\o{4200000}/utf
Failed: error 134 at offset 10: character code point value in \x{} or \o{} is too large
-/\C/utf
- \x{110000}
-** Failed: character \x{110000} is greater than 0x10ffff and so cannot be converted to UTF-16
-
/\x{100}*A/IB,utf
------------------------------------------------------------------
Bra
@@ -1174,8 +1087,6 @@ Subject length lower bound = 1
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[z-\x{100}]/IB,utf
------------------------------------------------------------------
@@ -1365,8 +1276,7 @@ Subject length lower bound = 1
0: \x{105}
\x{109}
0: \x{109}
- ** Failers
-No match
+\= Expect no match
\x{100}
No match
\x{10a}
@@ -1410,8 +1320,7 @@ Subject length lower bound = 1
0: \x{100}
\x{101}
0: \x{101}
- ** Failers
-No match
+\= Expect no match
\x{102}
No match
Y
@@ -1454,4 +1363,8 @@ Starting code units: \xff
Last code unit = 'B' (caseless)
Subject length lower bound = 2
+/./utf
+ \x{110000}
+** Failed: character \x{110000} is greater than 0x10ffff and so cannot be converted to UTF-16
+
# End of testinput12
diff --git a/testdata/testoutput12-32 b/testdata/testoutput12-32
index 89ac70a..95f1834 100644
--- a/testdata/testoutput12-32
+++ b/testdata/testoutput12-32
@@ -9,76 +9,6 @@
]
** Failed: invalid UTF-8 string cannot be used as input in UTF mode
-/X(\C{3})/utf
- X\x{11234}Y
-No match
- X\x{11234}YZ
- 0: X\x{11234}YZ
- 1: \x{11234}YZ
-
-/X(\C{4})/utf
- X\x{11234}YZ
-No match
- X\x{11234}YZW
- 0: X\x{11234}YZW
- 1: \x{11234}YZW
-
-/X\C*/utf
- XYZabcdce
- 0: XYZabcdce
-
-/X\C*?/utf
- XYZabcde
- 0: X
-
-/X\C{3,5}/utf
- Xabcdefg
- 0: Xabcde
- X\x{11234}Y
-No match
- X\x{11234}YZ
- 0: X\x{11234}YZ
- X\x{11234}\x{512}
-No match
- X\x{11234}\x{512}YZ
- 0: X\x{11234}\x{512}YZ
- X\x{11234}\x{512}\x{11234}Z
- 0: X\x{11234}\x{512}\x{11234}Z
-
-/X\C{3,5}?/utf
- Xabcdefg
- 0: Xabc
- X\x{11234}Y
-No match
- X\x{11234}YZ
- 0: X\x{11234}YZ
- X\x{11234}\x{512}YZ
- 0: X\x{11234}\x{512}Y
- *** Failers
-No match
- X\x{11234}
-No match
-
-/a\Cb/utf
- aXb
- 0: aXb
- a\nb
- 0: a\x{0a}b
-
-/a\C\Cb/utf
- a\x{12257}b
-No match
- a\x{12257}\x{11234}b
- 0: a\x{12257}\x{11234}b
- ** Failers
-No match
- a\x{100}b
-No match
-
-/ab\Cde/utf
- abXde
- 0: abXde
-
# Check maximum character size
/\x{ffff}/IB,utf
@@ -303,29 +233,6 @@ Options: utf
First code unit = \x{212ab}
Subject length lower bound = 1
-# This one is here not because it's different to Perl, but because the way
-# the captured single-byte is displayed. (In Perl it becomes a character, and you
-# can't tell the difference.)
-
-/X(\C)(.*)/utf
- X\x{1234}
- 0: X\x{1234}
- 1: \x{1234}
- 2:
- X\nabc
- 0: X\x{0a}abc
- 1: \x{0a}
- 2: abc
-
-# This one is here because Perl gives out a grumbly error message (quite
-# correctly, but that messes up comparisons).
-
-/a\Cb/utf
- *** Failers
-No match
- a\x{100}b
- 0: a\x{100}b
-
/[^ab\xC0-\xF0]/IB,utf
------------------------------------------------------------------
Bra
@@ -355,8 +262,7 @@ Subject length lower bound = 1
0: \x{100}
\x{1000}
0: \x{1000}
- *** Failers
- 0: *
+\= Expect no match
\x{c0}
No match
\x{f0}
@@ -513,8 +419,6 @@ Subject length lower bound = 1
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[\xff]/IB,utf
------------------------------------------------------------------
@@ -600,30 +504,38 @@ Subject length lower bound = 2
Failed: error 106 at offset 13: missing terminating ] for character class
/X/utf
- XX\x{d800}
-Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
XX\x{d800}\=no_utf_check
0: X
- XX\x{da00}
-Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
XX\x{da00}\=no_utf_check
0: X
- XX\x{dc00}
-Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
XX\x{dc00}\=no_utf_check
0: X
- XX\x{de00}
-Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
XX\x{de00}\=no_utf_check
0: X
- XX\x{dfff}
-Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
XX\x{dfff}\=no_utf_check
0: X
+\= Expect UTF error
+ XX\x{d800}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{da00}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{dc00}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{de00}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{dfff}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
XX\x{110000}
Failed: error -28: UTF-32 error: code points greater than 0x10ffff are not defined at offset 2
XX\x{d800}\x{1234}
Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+\= Expect no match
+ XX\x{d800}\=offset=3
+No match
+
+/(?<=.)X/utf
+ XX\x{d800}\=offset=3
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
/(*UTF16)\x{11234}/
Failed: error 160 at offset 5: (*VERB) not recognized or malformed
@@ -780,8 +692,10 @@ Subject length lower bound = 3
0: aa
a\x{123}aa\=offset=3
0: a
+\= Expect no match
a\x{123}aa\=offset=4
No match
+\= Expect bad offset error
a\x{123}aa\=offset=5
Failed: error -33: bad offset value
a\x{123}aa\=offset=6
@@ -846,16 +760,21 @@ Subject length lower bound = 1
# Check bad offset
/a/utf
+\= Expect bad UTF-16 offset, or no match in 32-bit
\x{10000}\=offset=1
No match
\x{10000}ab\=offset=1
0: a
+\= Expect 16-bit match, 32-bit no match
\x{10000}ab\=offset=2
No match
+\= Expect no match
\x{10000}ab\=offset=3
No match
+\= Expect no match in 16-bit, bad offset in 32-bit
\x{10000}ab\=offset=4
Failed: error -33: bad offset value
+\= Expect bad offset
\x{10000}ab\=offset=5
Failed: error -33: bad offset value
@@ -1115,10 +1034,6 @@ Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too
/\o{4200000}/utf
Failed: error 134 at offset 10: character code point value in \x{} or \o{} is too large
-/\C/utf
- \x{110000}
-Failed: error -28: UTF-32 error: code points greater than 0x10ffff are not defined at offset 0
-
/\x{100}*A/IB,utf
------------------------------------------------------------------
Bra
@@ -1166,8 +1081,6 @@ Subject length lower bound = 1
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[z-\x{100}]/IB,utf
------------------------------------------------------------------
@@ -1357,8 +1270,7 @@ Subject length lower bound = 1
0: \x{105}
\x{109}
0: \x{109}
- ** Failers
-No match
+\= Expect no match
\x{100}
No match
\x{10a}
@@ -1402,8 +1314,7 @@ Subject length lower bound = 1
0: \x{100}
\x{101}
0: \x{101}
- ** Failers
-No match
+\= Expect no match
\x{102}
No match
Y
@@ -1446,4 +1357,8 @@ Starting code units: \xff
Last code unit = 'B' (caseless)
Subject length lower bound = 2
+/./utf
+ \x{110000}
+Failed: error -28: UTF-32 error: code points greater than 0x10ffff are not defined at offset 0
+
# End of testinput12
diff --git a/testdata/testoutput14 b/testdata/testoutput14
deleted file mode 100644
index cdfd6f7..0000000
--- a/testdata/testoutput14
+++ /dev/null
@@ -1,242 +0,0 @@
-# These are:
-#
-# (1) Tests of the match-limiting features. The results are different for
-# interpretive or JIT matching, so this test should not be run with JIT. The
-# same tests are run using JIT in test 16.
-
-# (2) Other tests that must not be run with JIT.
-
-/(a+)*zz/I
-Capturing subpattern count = 1
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
-Minimum match limit = 8
-Minimum recursion limit = 6
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaz\=find_limits
-Minimum match limit = 32768
-Minimum recursion limit = 29
-No match
-
-!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
-Capturing subpattern count = 1
-May match empty string
-Subject length lower bound = 0
- /* this is a C style comment */\=find_limits
-Minimum match limit = 120
-Minimum recursion limit = 6
- 0: /* this is a C style comment */
- 1: /* this is a C style comment */
-
-/^(?>a)++/
- aa\=find_limits
-Minimum match limit = 5
-Minimum recursion limit = 2
- 0: aa
- aaaaaaaaa\=find_limits
-Minimum match limit = 12
-Minimum recursion limit = 2
- 0: aaaaaaaaa
-
-/(a)(?1)++/
- aa\=find_limits
-Minimum match limit = 7
-Minimum recursion limit = 4
- 0: aa
- 1: a
- aaaaaaaaa\=find_limits
-Minimum match limit = 21
-Minimum recursion limit = 4
- 0: aaaaaaaaa
- 1: a
-
-/a(?:.)*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-Minimum match limit = 65
-Minimum recursion limit = 2
- 0: abbbbbbbbbbbbbbbbbbbbba
-
-/a(?:.(*THEN))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-Minimum match limit = 86
-Minimum recursion limit = 45
- 0: abbbbbbbbbbbbbbbbbbbbba
-
-/a(?:.(*THEN:ABC))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-Minimum match limit = 86
-Minimum recursion limit = 45
- 0: abbbbbbbbbbbbbbbbbbbbba
-
-/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
- aabbccddee\=find_limits
-Minimum match limit = 7
-Minimum recursion limit = 2
- 0: aabbccddee
-
-/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
- aabbccddee\=find_limits
-Minimum match limit = 17
-Minimum recursion limit = 16
- 0: aabbccddee
- 1: aa
- 2: bb
- 3: cc
- 4: dd
- 5: ee
-
-/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
- aabbccddee\=find_limits
-Minimum match limit = 13
-Minimum recursion limit = 10
- 0: aabbccddee
- 1: aa
- 2: cc
- 3: ee
-
-/(*LIMIT_MATCH=12bc)abc/
-Failed: error 160 at offset 0: (*VERB) not recognized or malformed
-
-/(*LIMIT_MATCH=4294967290)abc/
-Failed: error 160 at offset 0: (*VERB) not recognized or malformed
-
-/(*LIMIT_RECURSION=4294967280)abc/I
-Capturing subpattern count = 0
-Recursion limit = 4294967280
-First code unit = 'a'
-Last code unit = 'c'
-Subject length lower bound = 3
-
-/(a+)*zz/
- aaaaaaaaaaaaaz
-No match
- aaaaaaaaaaaaaz\=match_limit=3000
-Failed: error -47: match limit exceeded
-
-/(a+)*zz/
- aaaaaaaaaaaaaz\=recursion_limit=10
-Failed: error -53: recursion limit exceeded
-
-/(*LIMIT_MATCH=3000)(a+)*zz/I
-Capturing subpattern count = 1
-Match limit = 3000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
- aaaaaaaaaaaaaz
-Failed: error -47: match limit exceeded
- aaaaaaaaaaaaaz\=match_limit=60000
-Failed: error -47: match limit exceeded
-
-/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
-Capturing subpattern count = 1
-Match limit = 3000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
- aaaaaaaaaaaaaz
-Failed: error -47: match limit exceeded
-
-/(*LIMIT_MATCH=60000)(a+)*zz/I
-Capturing subpattern count = 1
-Match limit = 60000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
- aaaaaaaaaaaaaz
-No match
- aaaaaaaaaaaaaz\=match_limit=3000
-Failed: error -47: match limit exceeded
-
-/(*LIMIT_RECURSION=10)(a+)*zz/I
-Capturing subpattern count = 1
-Recursion limit = 10
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
- aaaaaaaaaaaaaz
-Failed: error -53: recursion limit exceeded
- aaaaaaaaaaaaaz\=recursion_limit=1000
-Failed: error -53: recursion limit exceeded
-
-/(*LIMIT_RECURSION=10)(*LIMIT_RECURSION=1000)(a+)*zz/I
-Capturing subpattern count = 1
-Recursion limit = 1000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
- aaaaaaaaaaaaaz
-No match
-
-/(*LIMIT_RECURSION=1000)(a+)*zz/I
-Capturing subpattern count = 1
-Recursion limit = 1000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
- aaaaaaaaaaaaaz
-No match
- aaaaaaaaaaaaaz\=recursion_limit=10
-Failed: error -53: recursion limit exceeded
-
-# These three have infinitely nested recursions.
-
-/((?2))((?1))/
- abc
-Failed: error -52: nested recursion at the same subject position
-
-/((?(R2)a+|(?1)b))/
- aaaabcde
-Failed: error -52: nested recursion at the same subject position
-
-/(?(R)a*(?1)|((?R))b)/
- aaaabcde
-Failed: error -52: nested recursion at the same subject position
-
-# The allusedtext modifier does not work with JIT, which does not maintain
-# the leftchar/rightchar data.
-
-/abc(?=xyz)/allusedtext
- abcxyzpqr
- 0: abcxyz
- >>>
- abcxyzpqr\=aftertext
- 0: abcxyz
- >>>
- 0+ xyzpqr
-
-/(?<=pqr)abc(?=xyz)/allusedtext
- xyzpqrabcxyzpqr
- 0: pqrabcxyz
- <<< >>>
- xyzpqrabcxyzpqr\=aftertext
- 0: pqrabcxyz
- <<< >>>
- 0+ xyzpqr
-
-/a\b/
- a.\=allusedtext
- 0: a.
- >
- a\=allusedtext
- 0: a
-
-/abc\Kxyz/
- abcxyz\=allusedtext
- 0: abcxyz
- <<<
-
-/abc(?=xyz(*ACCEPT))/
- abcxyz\=allusedtext
- 0: abcxyz
- >>>
-
-/abc(?=abcde)(?=ab)/allusedtext
- abcabcdefg
- 0: abcabcde
- >>>>>
-
-# End of testinput14
diff --git a/testdata/testoutput14-16 b/testdata/testoutput14-16
new file mode 100644
index 0000000..05b7d48
--- /dev/null
+++ b/testdata/testoutput14-16
@@ -0,0 +1,61 @@
+# These test special (mostly error) UTF features of DFA matching. They are a
+# selection of the more comprehensive tests that are run for non-DFA matching.
+# The output is different for the different widths.
+
+#subject dfa
+
+/X/utf
+ XX\x{d800}
+Failed: error -24: UTF-16 error: missing low surrogate at end at offset 2
+ XX\x{d800}\=offset=3
+No match
+ XX\x{d800}\=no_utf_check
+ 0: X
+ XX\x{da00}
+Failed: error -24: UTF-16 error: missing low surrogate at end at offset 2
+ XX\x{da00}\=no_utf_check
+ 0: X
+ XX\x{dc00}
+Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
+ XX\x{dc00}\=no_utf_check
+ 0: X
+ XX\x{de00}
+Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
+ XX\x{de00}\=no_utf_check
+ 0: X
+ XX\x{dfff}
+Failed: error -26: UTF-16 error: isolated low surrogate at offset 2
+ XX\x{dfff}\=no_utf_check
+ 0: X
+ XX\x{110000}
+** Failed: character \x{110000} is greater than 0x10ffff and so cannot be converted to UTF-16
+ XX\x{d800}\x{1234}
+Failed: error -25: UTF-16 error: invalid low surrogate at offset 3
+
+/badutf/utf
+ X\xdf
+No match
+ XX\xef
+No match
+ XXX\xef\x80
+No match
+ X\xf7
+No match
+ XX\xf7\x80
+No match
+ XXX\xf7\x80\x80
+No match
+
+/shortutf/utf
+ XX\xdf\=ph
+No match
+ XX\xef\=ph
+No match
+ XX\xef\x80\=ph
+No match
+ \xf7\=ph
+No match
+ \xf7\x80\=ph
+No match
+
+# End of testinput14
diff --git a/testdata/testoutput14-32 b/testdata/testoutput14-32
new file mode 100644
index 0000000..30d7fa6
--- /dev/null
+++ b/testdata/testoutput14-32
@@ -0,0 +1,61 @@
+# These test special (mostly error) UTF features of DFA matching. They are a
+# selection of the more comprehensive tests that are run for non-DFA matching.
+# The output is different for the different widths.
+
+#subject dfa
+
+/X/utf
+ XX\x{d800}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{d800}\=offset=3
+No match
+ XX\x{d800}\=no_utf_check
+ 0: X
+ XX\x{da00}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{da00}\=no_utf_check
+ 0: X
+ XX\x{dc00}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{dc00}\=no_utf_check
+ 0: X
+ XX\x{de00}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{de00}\=no_utf_check
+ 0: X
+ XX\x{dfff}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{dfff}\=no_utf_check
+ 0: X
+ XX\x{110000}
+Failed: error -28: UTF-32 error: code points greater than 0x10ffff are not defined at offset 2
+ XX\x{d800}\x{1234}
+Failed: error -27: UTF-32 error: code points 0xd800-0xdfff are not defined at offset 2
+
+/badutf/utf
+ X\xdf
+No match
+ XX\xef
+No match
+ XXX\xef\x80
+No match
+ X\xf7
+No match
+ XX\xf7\x80
+No match
+ XXX\xf7\x80\x80
+No match
+
+/shortutf/utf
+ XX\xdf\=ph
+No match
+ XX\xef\=ph
+No match
+ XX\xef\x80\=ph
+No match
+ \xf7\=ph
+No match
+ \xf7\x80\=ph
+No match
+
+# End of testinput14
diff --git a/testdata/testoutput14-8 b/testdata/testoutput14-8
new file mode 100644
index 0000000..1fb0dc1
--- /dev/null
+++ b/testdata/testoutput14-8
@@ -0,0 +1,61 @@
+# These test special (mostly error) UTF features of DFA matching. They are a
+# selection of the more comprehensive tests that are run for non-DFA matching.
+# The output is different for the different widths.
+
+#subject dfa
+
+/X/utf
+ XX\x{d800}
+Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{d800}\=offset=3
+Error -36 (bad UTF-8 offset)
+ XX\x{d800}\=no_utf_check
+ 0: X
+ XX\x{da00}
+Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{da00}\=no_utf_check
+ 0: X
+ XX\x{dc00}
+Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{dc00}\=no_utf_check
+ 0: X
+ XX\x{de00}
+Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{de00}\=no_utf_check
+ 0: X
+ XX\x{dfff}
+Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2
+ XX\x{dfff}\=no_utf_check
+ 0: X
+ XX\x{110000}
+Failed: error -15: UTF-8 error: code points greater than 0x10ffff are not defined at offset 2
+ XX\x{d800}\x{1234}
+Failed: error -16: UTF-8 error: code points 0xd800-0xdfff are not defined at offset 2
+
+/badutf/utf
+ X\xdf
+Failed: error -3: UTF-8 error: 1 byte missing at end at offset 1
+ XX\xef
+Failed: error -4: UTF-8 error: 2 bytes missing at end at offset 2
+ XXX\xef\x80
+Failed: error -3: UTF-8 error: 1 byte missing at end at offset 3
+ X\xf7
+Failed: error -5: UTF-8 error: 3 bytes missing at end at offset 1
+ XX\xf7\x80
+Failed: error -4: UTF-8 error: 2 bytes missing at end at offset 2
+ XXX\xf7\x80\x80
+Failed: error -3: UTF-8 error: 1 byte missing at end at offset 3
+
+/shortutf/utf
+ XX\xdf\=ph
+Failed: error -3: UTF-8 error: 1 byte missing at end at offset 2
+ XX\xef\=ph
+Failed: error -4: UTF-8 error: 2 bytes missing at end at offset 2
+ XX\xef\x80\=ph
+Failed: error -3: UTF-8 error: 1 byte missing at end at offset 2
+ \xf7\=ph
+Failed: error -5: UTF-8 error: 3 bytes missing at end at offset 0
+ \xf7\x80\=ph
+Failed: error -4: UTF-8 error: 2 bytes missing at end at offset 0
+
+# End of testinput14
diff --git a/testdata/testoutput15 b/testdata/testoutput15
index fb945fd..bb29a49 100644
--- a/testdata/testoutput15
+++ b/testdata/testoutput15
@@ -1,17 +1,383 @@
-# This test is run only when JIT support is not available. It checks that an
-# attempt to use it has the expected behaviour. It also tests things that
-# are different without JIT.
+# These are:
+#
+# (1) Tests of the match-limiting features. The results are different for
+# interpretive or JIT matching, so this test should not be run with JIT. The
+# same tests are run using JIT in test 17.
-/abc/I,jit,jitverify
+# (2) Other tests that must not be run with JIT.
+
+/(a+)*zz/I
+Capturing subpattern count = 1
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
+Minimum match limit = 8
+Minimum recursion limit = 6
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ aaaaaaaaaaaaaz\=find_limits
+Minimum match limit = 32768
+Minimum recursion limit = 29
+No match
+
+!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+ /* this is a C style comment */\=find_limits
+Minimum match limit = 120
+Minimum recursion limit = 6
+ 0: /* this is a C style comment */
+ 1: /* this is a C style comment */
+
+/^(?>a)++/
+ aa\=find_limits
+Minimum match limit = 5
+Minimum recursion limit = 2
+ 0: aa
+ aaaaaaaaa\=find_limits
+Minimum match limit = 12
+Minimum recursion limit = 2
+ 0: aaaaaaaaa
+
+/(a)(?1)++/
+ aa\=find_limits
+Minimum match limit = 7
+Minimum recursion limit = 4
+ 0: aa
+ 1: a
+ aaaaaaaaa\=find_limits
+Minimum match limit = 21
+Minimum recursion limit = 4
+ 0: aaaaaaaaa
+ 1: a
+
+/a(?:.)*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+Minimum match limit = 65
+Minimum recursion limit = 2
+ 0: abbbbbbbbbbbbbbbbbbbbba
+
+/a(?:.(*THEN))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+Minimum match limit = 86
+Minimum recursion limit = 45
+ 0: abbbbbbbbbbbbbbbbbbbbba
+
+/a(?:.(*THEN:ABC))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+Minimum match limit = 86
+Minimum recursion limit = 45
+ 0: abbbbbbbbbbbbbbbbbbbbba
+
+/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
+ aabbccddee\=find_limits
+Minimum match limit = 7
+Minimum recursion limit = 2
+ 0: aabbccddee
+
+/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
+ aabbccddee\=find_limits
+Minimum match limit = 17
+Minimum recursion limit = 16
+ 0: aabbccddee
+ 1: aa
+ 2: bb
+ 3: cc
+ 4: dd
+ 5: ee
+
+/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
+ aabbccddee\=find_limits
+Minimum match limit = 13
+Minimum recursion limit = 10
+ 0: aabbccddee
+ 1: aa
+ 2: cc
+ 3: ee
+
+/(*LIMIT_MATCH=12bc)abc/
+Failed: error 160 at offset 17: (*VERB) not recognized or malformed
+
+/(*LIMIT_MATCH=4294967290)abc/
+Failed: error 160 at offset 24: (*VERB) not recognized or malformed
+
+/(*LIMIT_RECURSION=4294967280)abc/I
Capturing subpattern count = 0
+Recursion limit = 4294967280
First code unit = 'a'
Last code unit = 'c'
Subject length lower bound = 3
-JIT support is not available in this version of PCRE2
-/a*/I
+/(a+)*zz/
+ aaaaaaaaaaaaaz
+No match
+ aaaaaaaaaaaaaz\=match_limit=3000
+Failed: error -47: match limit exceeded
+
+/(a+)*zz/
+ aaaaaaaaaaaaaz\=recursion_limit=10
+Failed: error -53: recursion limit exceeded
+
+/(*LIMIT_MATCH=3000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 3000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+ aaaaaaaaaaaaaz
+Failed: error -47: match limit exceeded
+ aaaaaaaaaaaaaz\=match_limit=60000
+Failed: error -47: match limit exceeded
+
+/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 3000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+ aaaaaaaaaaaaaz
+Failed: error -47: match limit exceeded
+
+/(*LIMIT_MATCH=60000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 60000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+ aaaaaaaaaaaaaz
+No match
+ aaaaaaaaaaaaaz\=match_limit=3000
+Failed: error -47: match limit exceeded
+
+/(*LIMIT_RECURSION=10)(a+)*zz/I
+Capturing subpattern count = 1
+Recursion limit = 10
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+ aaaaaaaaaaaaaz
+Failed: error -53: recursion limit exceeded
+ aaaaaaaaaaaaaz\=recursion_limit=1000
+Failed: error -53: recursion limit exceeded
+
+/(*LIMIT_RECURSION=10)(*LIMIT_RECURSION=1000)(a+)*zz/I
+Capturing subpattern count = 1
+Recursion limit = 1000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+ aaaaaaaaaaaaaz
+No match
+
+/(*LIMIT_RECURSION=1000)(a+)*zz/I
+Capturing subpattern count = 1
+Recursion limit = 1000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+ aaaaaaaaaaaaaz
+No match
+ aaaaaaaaaaaaaz\=recursion_limit=10
+Failed: error -53: recursion limit exceeded
+
+# These three have infinitely nested recursions.
+
+/((?2))((?1))/
+ abc
+Failed: error -52: nested recursion at the same subject position
+
+/((?(R2)a+|(?1)b))/
+ aaaabcde
+Failed: error -52: nested recursion at the same subject position
+
+/(?(R)a*(?1)|((?R))b)/
+ aaaabcde
+Failed: error -52: nested recursion at the same subject position
+
+# The allusedtext modifier does not work with JIT, which does not maintain
+# the leftchar/rightchar data.
+
+/abc(?=xyz)/allusedtext
+ abcxyzpqr
+ 0: abcxyz
+ >>>
+ abcxyzpqr\=aftertext
+ 0: abcxyz
+ >>>
+ 0+ xyzpqr
+
+/(?<=pqr)abc(?=xyz)/allusedtext
+ xyzpqrabcxyzpqr
+ 0: pqrabcxyz
+ <<< >>>
+ xyzpqrabcxyzpqr\=aftertext
+ 0: pqrabcxyz
+ <<< >>>
+ 0+ xyzpqr
+
+/a\b/
+ a.\=allusedtext
+ 0: a.
+ >
+ a\=allusedtext
+ 0: a
+
+/abc\Kxyz/
+ abcxyz\=allusedtext
+ 0: abcxyz
+ <<<
+
+/abc(?=xyz(*ACCEPT))/
+ abcxyz\=allusedtext
+ 0: abcxyz
+ >>>
+
+/abc(?=abcde)(?=ab)/allusedtext
+ abcabcdefg
+ 0: abcabcde
+ >>>>>
+
+# These tests provoke recursion loops, which give a different error message
+# when JIT is used.
+
+/(?R)/I
Capturing subpattern count = 0
May match empty string
Subject length lower bound = 0
+ abcd
+Failed: error -52: nested recursion at the same subject position
+
+/(a|(?R))/I
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0: a
+ 1: a
+ defg
+Failed: error -52: nested recursion at the same subject position
+
+/(ab|(bc|(de|(?R))))/I
+Capturing subpattern count = 3
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0: ab
+ 1: ab
+ fghi
+Failed: error -52: nested recursion at the same subject position
+
+/(ab|(bc|(de|(?1))))/I
+Capturing subpattern count = 3
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0: ab
+ 1: ab
+ fghi
+Failed: error -52: nested recursion at the same subject position
+
+/x(ab|(bc|(de|(?1)x)x)x)/I
+Capturing subpattern count = 3
+First code unit = 'x'
+Subject length lower bound = 3
+ xab123
+ 0: xab
+ 1: ab
+ xfghi
+Failed: error -52: nested recursion at the same subject position
+
+/(?!\w)(?R)/
+ abcd
+Failed: error -52: nested recursion at the same subject position
+ =abc
+Failed: error -52: nested recursion at the same subject position
+
+/(?=\w)(?R)/
+ =abc
+Failed: error -52: nested recursion at the same subject position
+ abcd
+Failed: error -52: nested recursion at the same subject position
+
+/(?<!\w)(?R)/
+ abcd
+Failed: error -52: nested recursion at the same subject position
+
+/(?<=\w)(?R)/
+ abcd
+Failed: error -52: nested recursion at the same subject position
+
+/(a+|(?R)b)/
+ aaa
+ 0: aaa
+ 1: aaa
+ bbb
+Failed: error -52: nested recursion at the same subject position
+
+/[^\xff]((?1))/BI
+------------------------------------------------------------------
+ Bra
+ [^\x{ff}]
+ CBra 1
+ Recurse
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Subject length lower bound = 1
+ abcd
+Failed: error -52: nested recursion at the same subject position
+
+# These tests don't behave the same with JIT
+
+/\w+(?C1)/BI,no_auto_possess
+------------------------------------------------------------------
+ Bra
+ \w+
+ Callout 1 8 0
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: no_auto_possess
+Starting code units: 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
+Subject length lower bound = 1
+ abc\=callout_fail=1
+--->abc
+ 1 ^ ^
+ 1 ^ ^
+ 1 ^^
+ 1 ^ ^
+ 1 ^^
+ 1 ^^
+No match
+
+/(*NO_AUTO_POSSESS)\w+(?C1)/BI
+------------------------------------------------------------------
+ Bra
+ \w+
+ Callout 1 26 0
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Compile options: <none>
+Overall options: no_auto_possess
+Starting code units: 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
+Subject length lower bound = 1
+ abc\=callout_fail=1
+--->abc
+ 1 ^ ^
+ 1 ^ ^
+ 1 ^^
+ 1 ^ ^
+ 1 ^^
+ 1 ^^
+No match
# End of testinput15
diff --git a/testdata/testoutput16 b/testdata/testoutput16
index ae4fb41..616567b 100644
--- a/testdata/testoutput16
+++ b/testdata/testoutput16
@@ -1,384 +1,17 @@
-# This test is run only when JIT support is available. It checks JIT complete
-# and partial modes, and things that are different with JIT.
+# This test is run only when JIT support is not available. It checks that an
+# attempt to use it has the expected behaviour. It also tests things that
+# are different without JIT.
-#pattern jitverify
-
-# JIT does not support this pattern (callout at start of condition).
-
-/(?(?C1)(?=a)a)/I
-Capturing subpattern count = 0
-May match empty string
-Subject length lower bound = 0
-JIT compilation was not successful
-
-# The following pattern cannot be compiled by JIT.
-
-/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*/I
-Capturing subpattern count = 0
-May match empty string
-Subject length lower bound = 0
-JIT compilation was not successful
-
-# Check that an infinite recursion loop is caught.
-
-/(?(R)a*(?1)|((?R))b)/
- aaaabcde
-Failed: error -46: JIT stack limit reached
-
-/abcd/I
+/abc/I,jit,jitverify
Capturing subpattern count = 0
First code unit = 'a'
-Last code unit = 'd'
-Subject length lower bound = 4
-JIT compilation was successful
- abcd
- 0: abcd (JIT)
- xyz
-No match (JIT)
-
-/(*NO_JIT)abcd/I
-Capturing subpattern count = 0
-First code unit = 'a'
-Last code unit = 'd'
-Subject length lower bound = 4
-JIT compilation was not successful
- abcd
- 0: abcd
- xyz
-No match
-
-/abcd/
- abcd
- 0: abcd (JIT)
- ab\=ps
-Partial match: ab (JIT)
- ab\=ph
-Partial match: ab (JIT)
- xyz
-No match (JIT)
-
-/abcd/jitfast
- abcd
- 0: abcd (JIT)
- ab\=ps
-Partial match: ab (JIT)
- ab\=ph
-Partial match: ab (JIT)
- xyz
-No match (JIT)
-
-/abcd/jit=1
- abcd
- 0: abcd (JIT)
- ab\=ps
-Partial match: ab
- ab\=ph
-Partial match: ab
- xyz
-No match (JIT)
- xyz\=ps
-No match
-
-/abcd/jit=1,jitfast
- abcd
- 0: abcd (JIT)
- ab\=ps
-Failed: error -45: bad JIT option
- ab\=ph
-Failed: error -45: bad JIT option
- xyz
-No match (JIT)
- xyz\=ps
-Failed: error -45: bad JIT option
-
-/abcd/jit=2
- abcd
- 0: abcd
- ab\=ps
-Partial match: ab (JIT)
- ab\=ph
-Partial match: ab
- xyz
-No match
-
-/abcd/jit=2,jitfast
- abcd
-Failed: error -45: bad JIT option
- ab\=ps
-Partial match: ab (JIT)
- ab\=ph
-Failed: error -45: bad JIT option
- xyz
-Failed: error -45: bad JIT option
-
-/abcd/jit=3
- abcd
- 0: abcd (JIT)
- ab\=ps
-Partial match: ab (JIT)
- ab\=ph
-Partial match: ab
- xyz
-No match (JIT)
-
-/abcd/jit=4
- abcd
- 0: abcd
- ab\=ps
-Partial match: ab
- ab\=ph
-Partial match: ab (JIT)
- xyz
-No match
-
-/abcd/jit=5
- abcd
- 0: abcd (JIT)
- ab\=ps
-Partial match: ab
- ab\=ph
-Partial match: ab (JIT)
- xyz
-No match (JIT)
-
-/abcd/jit=6
- abcd
- 0: abcd
- ab\=ps
-Partial match: ab (JIT)
- ab\=ph
-Partial match: ab (JIT)
- xyz
-No match
-
-/abcd/jit=7
- abcd
- 0: abcd (JIT)
- ab\=ps
-Partial match: ab (JIT)
- ab\=ph
-Partial match: ab (JIT)
- xyz
-No match (JIT)
+Last code unit = 'c'
+Subject length lower bound = 3
+JIT support is not available in this version of PCRE2
-/abcd/I,jit=2
+/a*/I
Capturing subpattern count = 0
-First code unit = 'a'
-Last code unit = 'd'
-Subject length lower bound = 4
-JIT compilation was successful
-
-/(*NO_START_OPT)a(*:m)b/mark
- a
-No match, mark = m (JIT)
-
-/^12345678abcd/m
- 12345678abcd
- 0: 12345678abcd (JIT)
-
-# Limits tests that give different output with JIT.
-
-/(a+)*zz/I
-Capturing subpattern count = 1
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
-JIT compilation was successful
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
-Minimum match limit = 3
- 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz (JIT)
- 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- aaaaaaaaaaaaaz\=find_limits
-Minimum match limit = 16384
-No match (JIT)
-
-!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
-Capturing subpattern count = 1
May match empty string
Subject length lower bound = 0
-JIT compilation was successful
- /* this is a C style comment */\=find_limits
-Minimum match limit = 2
- 0: /* this is a C style comment */ (JIT)
- 1: /* this is a C style comment */
-
-/^(?>a)++/
- aa\=find_limits
-Minimum match limit = 2
- 0: aa (JIT)
- aaaaaaaaa\=find_limits
-Minimum match limit = 2
- 0: aaaaaaaaa (JIT)
-
-/(a)(?1)++/
- aa\=find_limits
-Minimum match limit = 2
- 0: aa (JIT)
- 1: a
- aaaaaaaaa\=find_limits
-Minimum match limit = 2
- 0: aaaaaaaaa (JIT)
- 1: a
-
-/a(?:.)*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-Minimum match limit = 1
- 0: abbbbbbbbbbbbbbbbbbbbba (JIT)
-
-/a(?:.(*THEN))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-Minimum match limit = 1
- 0: abbbbbbbbbbbbbbbbbbbbba (JIT)
-
-/a(?:.(*THEN:ABC))*?a/ims
- abbbbbbbbbbbbbbbbbbbbba\=find_limits
-Minimum match limit = 1
- 0: abbbbbbbbbbbbbbbbbbbbba (JIT)
-
-/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
- aabbccddee\=find_limits
-Minimum match limit = 6
- 0: aabbccddee (JIT)
-
-/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
- aabbccddee\=find_limits
-Minimum match limit = 6
- 0: aabbccddee (JIT)
- 1: aa
- 2: bb
- 3: cc
- 4: dd
- 5: ee
-
-/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
- aabbccddee\=find_limits
-Minimum match limit = 6
- 0: aabbccddee (JIT)
- 1: aa
- 2: cc
- 3: ee
-
-/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast
- aabbccddee\=find_limits
-Minimum match limit = 6
- 0: aabbccddee (JIT)
- 1: aa
- 2: cc
- 3: ee
- aabbccddee\=jitstack=1
- 0: aabbccddee (JIT)
- 1: aa
- 2: cc
- 3: ee
-
-/(a+)*zz/
- aaaaaaaaaaaaaz
-No match (JIT)
- aaaaaaaaaaaaaz\=match_limit=3000
-Failed: error -47: match limit exceeded
-
-/(*LIMIT_MATCH=3000)(a+)*zz/I
-Capturing subpattern count = 1
-Match limit = 3000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
-JIT compilation was successful
- aaaaaaaaaaaaaz
-Failed: error -47: match limit exceeded
- aaaaaaaaaaaaaz\=match_limit=60000
-Failed: error -47: match limit exceeded
-
-/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
-Capturing subpattern count = 1
-Match limit = 3000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
-JIT compilation was successful
- aaaaaaaaaaaaaz
-Failed: error -47: match limit exceeded
-
-/(*LIMIT_MATCH=60000)(a+)*zz/I
-Capturing subpattern count = 1
-Match limit = 60000
-Starting code units: a z
-Last code unit = 'z'
-Subject length lower bound = 2
-JIT compilation was successful
- aaaaaaaaaaaaaz
-No match (JIT)
- aaaaaaaaaaaaaz\=match_limit=3000
-Failed: error -47: match limit exceeded
-
-# These three have infinitely nested recursions.
-
-/((?2))((?1))/
- abc
-Failed: error -46: JIT stack limit reached
-
-/((?(R2)a+|(?1)b))/
- aaaabcde
-Failed: error -46: JIT stack limit reached
-
-/(?(R)a*(?1)|((?R))b)/
- aaaabcde
-Failed: error -46: JIT stack limit reached
-
-# Invalid options disable JIT when called via pcre2_match(), causing the
-# match to happen via the interpreter, but for fast JIT invalid options are
-# ignored, so an unanchored match happens.
-
-/abcd/
- abcd\=anchored
- 0: abcd
- fail abcd\=anchored
-No match
-
-/abcd/jitfast
- abcd\=anchored
- 0: abcd (JIT)
- succeed abcd\=anchored
- 0: abcd (JIT)
-
-# Push/pop does not lose the JIT information, though jitverify applies only to
-# compilation, but serializing (save/load) discards JIT data completely.
-
-/^abc\Kdef/info,push
-** Applies only to compile when pattern is stacked with 'push': jitverify
-Capturing subpattern count = 0
-Compile options: <none>
-Overall options: anchored
-Subject length lower bound = 6
-JIT compilation was successful
-#pop jitverify
- abcdef
- 0: def (JIT)
-
-/^abc\Kdef/info,push
-** Applies only to compile when pattern is stacked with 'push': jitverify
-Capturing subpattern count = 0
-Compile options: <none>
-Overall options: anchored
-Subject length lower bound = 6
-JIT compilation was successful
-#save testsaved1
-#load testsaved1
-#pop jitverify
- abcdef
- 0: def
-
-#load testsaved1
-#pop jit,jitverify
- abcdef
- 0: def (JIT)
-
-# Test pattern compilation
-
-/(?:a|b|c|d|e)(?R)/jit=1
-
-/(?:a|b|c|d|e)(?R)(?R)/jit=1
-
-/(a(?:a|b|c|d|e)b){8,16}/jit=1
# End of testinput16
diff --git a/testdata/testoutput17 b/testdata/testoutput17
index f46b7e7..0def438 100644
--- a/testdata/testoutput17
+++ b/testdata/testoutput17
@@ -1,148 +1,511 @@
-# This set of tests is run only with the 8-bit library. It tests the POSIX
-# interface, which is supported only with the 8-bit library. This test should
-# not be run with JIT (which is not available for the POSIX interface).
+# This test is run only when JIT support is available. It checks JIT complete
+# and partial modes, and things that are different with JIT.
+
+#pattern jitverify
+
+# JIT does not support this pattern (callout at start of condition).
+
+/(?(?C1)(?=a)a)/I
+Capturing subpattern count = 0
+May match empty string
+Subject length lower bound = 0
+JIT compilation was not successful (no more memory)
+
+# The following pattern cannot be compiled by JIT.
+
+/b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*b*/I
+Capturing subpattern count = 0
+May match empty string
+Subject length lower bound = 0
+JIT compilation was not successful (no more memory)
+
+# Check that an infinite recursion loop is caught.
+
+/(?(R)a*(?1)|((?R))b)/
+ aaaabcde
+Failed: error -46: JIT stack limit reached
+
+/abcd/I
+Capturing subpattern count = 0
+First code unit = 'a'
+Last code unit = 'd'
+Subject length lower bound = 4
+JIT compilation was successful
+ abcd
+ 0: abcd (JIT)
+\= Expect no match
+ xyz
+No match (JIT)
+
+/(*NO_JIT)abcd/I
+Capturing subpattern count = 0
+First code unit = 'a'
+Last code unit = 'd'
+Subject length lower bound = 4
+JIT compilation was not successful
+ abcd
+ 0: abcd
+\= Expect no match
+ xyz
+No match
+
+/abcd/
+ abcd
+ 0: abcd (JIT)
+ ab\=ps
+Partial match: ab (JIT)
+ ab\=ph
+Partial match: ab (JIT)
+\= Expect no match
+ xyz
+No match (JIT)
+
+/abcd/jitfast
+ abcd
+ 0: abcd (JIT)
+ ab\=ps
+Partial match: ab (JIT)
+ ab\=ph
+Partial match: ab (JIT)
+\= Expect no match
+ xyz
+No match (JIT)
+
+/abcd/jit=1
+ abcd
+ 0: abcd (JIT)
+ ab\=ps
+Partial match: ab
+ ab\=ph
+Partial match: ab
+\= Expect no match
+ xyz
+No match (JIT)
+ xyz\=ps
+No match
+
+/abcd/jit=1,jitfast
+ abcd
+ 0: abcd (JIT)
+ ab\=ps
+Failed: error -45: bad JIT option
+ ab\=ph
+Failed: error -45: bad JIT option
+ xyz\=ps
+Failed: error -45: bad JIT option
+\= Expect no match
+ xyz
+No match (JIT)
+
+/abcd/jit=2
+ abcd
+ 0: abcd
+ ab\=ps
+Partial match: ab (JIT)
+ ab\=ph
+Partial match: ab
+\= Expect no match
+ xyz
+No match
+
+/abcd/jit=2,jitfast
+ abcd
+Failed: error -45: bad JIT option
+ ab\=ps
+Partial match: ab (JIT)
+ ab\=ph
+Failed: error -45: bad JIT option
+ xyz
+Failed: error -45: bad JIT option
+
+/abcd/jit=3
+ abcd
+ 0: abcd (JIT)
+ ab\=ps
+Partial match: ab (JIT)
+ ab\=ph
+Partial match: ab
+\= Expect no match
+ xyz
+No match (JIT)
+
+/abcd/jit=4
+ abcd
+ 0: abcd
+ ab\=ps
+Partial match: ab
+ ab\=ph
+Partial match: ab (JIT)
+\= Expect no match
+ xyz
+No match
+
+/abcd/jit=5
+ abcd
+ 0: abcd (JIT)
+ ab\=ps
+Partial match: ab
+ ab\=ph
+Partial match: ab (JIT)
+\= Expect no match
+ xyz
+No match (JIT)
+
+/abcd/jit=6
+ abcd
+ 0: abcd
+ ab\=ps
+Partial match: ab (JIT)
+ ab\=ph
+Partial match: ab (JIT)
+\= Expect no match
+ xyz
+No match
+
+/abcd/jit=7
+ abcd
+ 0: abcd (JIT)
+ ab\=ps
+Partial match: ab (JIT)
+ ab\=ph
+Partial match: ab (JIT)
+\= Expect no match
+ xyz
+No match (JIT)
+
+/abcd/I,jit=2
+Capturing subpattern count = 0
+First code unit = 'a'
+Last code unit = 'd'
+Subject length lower bound = 4
+JIT compilation was successful
+
+/(*NO_START_OPT)a(*:m)b/mark
+\= Expect no match
+ a
+No match, mark = m (JIT)
+
+/^12345678abcd/m
+ 12345678abcd
+ 0: 12345678abcd (JIT)
+
+# Limits tests that give different output with JIT.
+
+/(a+)*zz/I
+Capturing subpattern count = 1
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+JIT compilation was successful
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazzbbbbbb\=find_limits
+Minimum match limit = 2
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazz (JIT)
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ aaaaaaaaaaaaaz\=find_limits
+Minimum match limit = 16383
+No match (JIT)
+
+!((?:\s|//.*\\n|/[*](?:\\n|.)*?[*]/)*)!I
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+JIT compilation was successful
+ /* this is a C style comment */\=find_limits
+Minimum match limit = 29
+ 0: /* this is a C style comment */ (JIT)
+ 1: /* this is a C style comment */
+
+/^(?>a)++/
+ aa\=find_limits
+Minimum match limit = 1
+ 0: aa (JIT)
+ aaaaaaaaa\=find_limits
+Minimum match limit = 1
+ 0: aaaaaaaaa (JIT)
+
+/(a)(?1)++/
+ aa\=find_limits
+Minimum match limit = 1
+ 0: aa (JIT)
+ 1: a
+ aaaaaaaaa\=find_limits
+Minimum match limit = 1
+ 0: aaaaaaaaa (JIT)
+ 1: a
+
+/a(?:.)*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+Minimum match limit = 22
+ 0: abbbbbbbbbbbbbbbbbbbbba (JIT)
-#forbid_utf
-#pattern posix
+/a(?:.(*THEN))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+Minimum match limit = 22
+ 0: abbbbbbbbbbbbbbbbbbbbba (JIT)
+
+/a(?:.(*THEN:ABC))*?a/ims
+ abbbbbbbbbbbbbbbbbbbbba\=find_limits
+Minimum match limit = 22
+ 0: abbbbbbbbbbbbbbbbbbbbba (JIT)
+
+/^(?>a+)(?>b+)(?>c+)(?>d+)(?>e+)/
+ aabbccddee\=find_limits
+Minimum match limit = 5
+ 0: aabbccddee (JIT)
+
+/^(?>(a+))(?>(b+))(?>(c+))(?>(d+))(?>(e+))/
+ aabbccddee\=find_limits
+Minimum match limit = 5
+ 0: aabbccddee (JIT)
+ 1: aa
+ 2: bb
+ 3: cc
+ 4: dd
+ 5: ee
+
+/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/
+ aabbccddee\=find_limits
+Minimum match limit = 5
+ 0: aabbccddee (JIT)
+ 1: aa
+ 2: cc
+ 3: ee
-# Test invalid options
+/^(?>(a+))(?>b+)(?>(c+))(?>d+)(?>(e+))/jitfast
+ aabbccddee\=find_limits
+Minimum match limit = 5
+ 0: aabbccddee (JIT)
+ 1: aa
+ 2: cc
+ 3: ee
+ aabbccddee\=jitstack=1
+ 0: aabbccddee (JIT)
+ 1: aa
+ 2: cc
+ 3: ee
-/abc/auto_callout
-** Ignored with POSIX interface: auto_callout
+/(a+)*zz/
+\= Expect no match
+ aaaaaaaaaaaaaz
+No match (JIT)
+\= Expect limit exceeded
+ aaaaaaaaaaaaaz\=match_limit=3000
+Failed: error -47: match limit exceeded
-/abc/
- abc\=find_limits
-** Ignored with POSIX interface: find_limits
- 0: abc
+/(*LIMIT_MATCH=3000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 3000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+JIT compilation was successful
+ aaaaaaaaaaaaaz
+Failed: error -47: match limit exceeded
+ aaaaaaaaaaaaaz\=match_limit=60000
+Failed: error -47: match limit exceeded
-/abc/
- abc\=partial_hard
-** Ignored with POSIX interface: partial_hard
- 0: abc
+/(*LIMIT_MATCH=60000)(*LIMIT_MATCH=3000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 3000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+JIT compilation was successful
+ aaaaaaaaaaaaaz
+Failed: error -47: match limit exceeded
-# Real tests
+/(*LIMIT_MATCH=60000)(a+)*zz/I
+Capturing subpattern count = 1
+Match limit = 60000
+Starting code units: a z
+Last code unit = 'z'
+Subject length lower bound = 2
+JIT compilation was successful
+\= Expect no match
+ aaaaaaaaaaaaaz
+No match (JIT)
+\= Expect limit exceeded
+ aaaaaaaaaaaaaz\=match_limit=3000
+Failed: error -47: match limit exceeded
-/abc/
+# These three have infinitely nested recursions.
+
+/((?2))((?1))/
abc
- 0: abc
- *** Failers
-No match: POSIX code 17: match failed
+Failed: error -46: JIT stack limit reached
+
+/((?(R2)a+|(?1)b))/
+ aaaabcde
+Failed: error -46: JIT stack limit reached
-/^abc|def/
+/(?(R)a*(?1)|((?R))b)/
+ aaaabcde
+Failed: error -46: JIT stack limit reached
+
+# Invalid options disable JIT when called via pcre2_match(), causing the
+# match to happen via the interpreter, but for fast JIT invalid options are
+# ignored, so an unanchored match happens.
+
+/abcd/
+ abcd\=anchored
+ 0: abcd
+\= Expect no match
+ fail abcd\=anchored
+No match
+
+/abcd/jitfast
+ abcd\=anchored
+ 0: abcd (JIT)
+ succeed abcd\=anchored
+ 0: abcd (JIT)
+
+# Push/pop does not lose the JIT information, though jitverify applies only to
+# compilation, but serializing (save/load) discards JIT data completely.
+
+/^abc\Kdef/info,push
+** Applies only to compile when pattern is stacked with 'push': jitverify
+Capturing subpattern count = 0
+Compile options: <none>
+Overall options: anchored
+Subject length lower bound = 6
+JIT compilation was successful
+#pop jitverify
abcdef
- 0: abc
- abcdef\=notbol
- 0: def
+ 0: def (JIT)
-/.*((abc)$|(def))/
- defabc
- 0: defabc
- 1: abc
- 2: abc
- defabc\=noteol
+/^abc\Kdef/info,push
+** Applies only to compile when pattern is stacked with 'push': jitverify
+Capturing subpattern count = 0
+Compile options: <none>
+Overall options: anchored
+Subject length lower bound = 6
+JIT compilation was successful
+#save testsaved1
+#load testsaved1
+#pop jitverify
+ abcdef
0: def
- 1: def
- 3: def
-
-/the quick brown fox/
- 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/i
- the quick brown fox
- 0: the quick brown fox
- The Quick Brown Fox
- 0: The Quick Brown Fox
-
-/abc.def/
- *** Failers
-No match: POSIX code 17: match failed
- abc\ndef
-No match: POSIX code 17: match failed
-
-/abc$/
- abc
- 0: abc
- abc\n
- 0: abc
+
+#load testsaved1
+#pop jit,jitverify
+ abcdef
+ 0: def (JIT)
+
+# Test pattern compilation
-/(abc)\2/
-Failed: POSIX code 15: bad back reference at offset 7
+/(?:a|b|c|d|e)(?R)/jit=1
-/(abc\1)/
- abc
-No match: POSIX code 17: match failed
-
-/a*(b+)(z)(z)/
- aaaabbbbzzzz
- 0: aaaabbbbzz
- 1: bbbb
- 2: z
- 3: z
- aaaabbbbzzzz\=ovector=0
-Matched without capture
- aaaabbbbzzzz\=ovector=1
- 0: aaaabbbbzz
- aaaabbbbzzzz\=ovector=2
- 0: aaaabbbbzz
- 1: bbbb
-
-/ab.cd/
- 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/s
- ab-cd
- 0: ab-cd
- ab=cd
- 0: ab=cd
- ab\ncd
- 0: ab\x0acd
-
-/a(b)c/no_auto_capture
- abc
-Matched with REG_NOSUB
+/(?:a|b|c|d|e)(?R)(?R)/jit=1
-/a(?P<name>b)c/no_auto_capture
- abc
-Matched with REG_NOSUB
+/(a(?:a|b|c|d|e)b){8,16}/jit=1
-/a?|b?/
- abc
- 0: a
- ** Failers
- 0:
- ddd\=notempty
-No match: POSIX code 17: match failed
-
-/\w+A/
- CDAAAAB
- 0: CDAAAA
-
-/\w+A/ungreedy
- CDAAAAB
- 0: CDA
-
-/\Biss\B/I,aftertext
-** Ignored with POSIX interface: info
- Mississippi
- 0: iss
- 0+ issippi
-
-/abc/\
-Failed: POSIX code 9: bad escape sequence at offset 4
-
-"(?(?C)"
-Failed: POSIX code 3: pattern error at offset 2
-
-# End of testdata/testinput16
+/(?:|a|){100}x/jit=1
+
+# These tests provoke recursion loops, which give a different error message
+# when JIT is used.
+
+/(?R)/I
+Capturing subpattern count = 0
+May match empty string
+Subject length lower bound = 0
+JIT compilation was successful
+ abcd
+Failed: error -46: JIT stack limit reached
+
+/(a|(?R))/I
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+JIT compilation was successful
+ abcd
+ 0: a (JIT)
+ 1: a
+ defg
+Failed: error -46: JIT stack limit reached
+
+/(ab|(bc|(de|(?R))))/I
+Capturing subpattern count = 3
+May match empty string
+Subject length lower bound = 0
+JIT compilation was successful
+ abcd
+ 0: ab (JIT)
+ 1: ab
+ fghi
+Failed: error -46: JIT stack limit reached
+
+/(ab|(bc|(de|(?1))))/I
+Capturing subpattern count = 3
+May match empty string
+Subject length lower bound = 0
+JIT compilation was successful
+ abcd
+ 0: ab (JIT)
+ 1: ab
+ fghi
+Failed: error -46: JIT stack limit reached
+
+/x(ab|(bc|(de|(?1)x)x)x)/I
+Capturing subpattern count = 3
+First code unit = 'x'
+Subject length lower bound = 3
+JIT compilation was successful
+ xab123
+ 0: xab (JIT)
+ 1: ab
+ xfghi
+Failed: error -46: JIT stack limit reached
+
+/(?!\w)(?R)/
+ abcd
+Failed: error -46: JIT stack limit reached
+ =abc
+Failed: error -46: JIT stack limit reached
+
+/(?=\w)(?R)/
+ =abc
+Failed: error -46: JIT stack limit reached
+ abcd
+Failed: error -46: JIT stack limit reached
+
+/(?<!\w)(?R)/
+ abcd
+Failed: error -46: JIT stack limit reached
+
+/(?<=\w)(?R)/
+ abcd
+Failed: error -46: JIT stack limit reached
+
+/(a+|(?R)b)/
+ aaa
+ 0: aaa (JIT)
+ 1: aaa
+ bbb
+Failed: error -46: JIT stack limit reached
+
+/[^\xff]((?1))/BI
+------------------------------------------------------------------
+ Bra
+ [^\x{ff}]
+ CBra 1
+ Recurse
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Subject length lower bound = 1
+JIT compilation was successful
+ abcd
+Failed: error -46: JIT stack limit reached
+
+/(x(?1)){4}/
+
+/[axm]{7}/
+
+/(.|.)*?bx/
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabax
+Failed: error -47: match limit exceeded
+
+# End of testinput17
diff --git a/testdata/testoutput18 b/testdata/testoutput18
index 954b4b5..0a5ffff 100644
--- a/testdata/testoutput18
+++ b/testdata/testoutput18
@@ -1,20 +1,153 @@
# This set of tests is run only with the 8-bit library. It tests the POSIX
-# interface with UTF/UCP support, which is supported only with the 8-bit
-# library. This test should not be run with JIT (which is not available for the
-# POSIX interface).
+# interface, which is supported only with the 8-bit library. This test should
+# not be run with JIT (which is not available for the POSIX interface).
+#forbid_utf
#pattern posix
-/a\x{1234}b/utf
- a\x{1234}b
- 0: a\x{1234}b
+# Test invalid options
-/\w/
- +++\x{c2}
+/abc/auto_callout
+** Ignored with POSIX interface: auto_callout
+
+/abc/
+ abc\=find_limits
+** Ignored with POSIX interface: find_limits
+ 0: abc
+
+/abc/
+ abc\=partial_hard
+** Ignored with POSIX interface: partial_hard
+ 0: abc
+
+# Real tests
+
+/abc/
+ abc
+ 0: abc
+
+/^abc|def/
+ abcdef
+ 0: abc
+ abcdef\=notbol
+ 0: def
+
+/.*((abc)$|(def))/
+ defabc
+ 0: defabc
+ 1: abc
+ 2: abc
+ defabc\=noteol
+ 0: def
+ 1: def
+ 3: def
+
+/the quick brown fox/
+ the quick brown fox
+ 0: the quick brown fox
+\= Expect no match
+ The Quick Brown Fox
No match: POSIX code 17: match failed
-/\w/ucp
- +++\x{c2}
- 0: \xc2
-
-# End of testdata/testinput17
+/the quick brown fox/i
+ the quick brown fox
+ 0: the quick brown fox
+ The Quick Brown Fox
+ 0: The Quick Brown Fox
+
+/(*LF)abc.def/
+\= Expect no match
+ abc\ndef
+No match: POSIX code 17: match failed
+
+/(*LF)abc$/
+ abc
+ 0: abc
+ abc\n
+ 0: abc
+
+/(abc)\2/
+Failed: POSIX code 15: bad back reference at offset 6
+
+/(abc\1)/
+\= Expect no match
+ abc
+No match: POSIX code 17: match failed
+
+/a*(b+)(z)(z)/
+ aaaabbbbzzzz
+ 0: aaaabbbbzz
+ 1: bbbb
+ 2: z
+ 3: z
+ aaaabbbbzzzz\=ovector=0
+Matched without capture
+ aaaabbbbzzzz\=ovector=1
+ 0: aaaabbbbzz
+ aaaabbbbzzzz\=ovector=2
+ 0: aaaabbbbzz
+ 1: bbbb
+
+/(*ANY)ab.cd/
+ ab-cd
+ 0: ab-cd
+ ab=cd
+ 0: ab=cd
+\= Expect no match
+ ab\ncd
+No match: POSIX code 17: match failed
+
+/ab.cd/s
+ ab-cd
+ 0: ab-cd
+ ab=cd
+ 0: ab=cd
+ ab\ncd
+ 0: ab\x0acd
+
+/a(b)c/no_auto_capture
+ abc
+Matched with REG_NOSUB
+
+/a(?P<name>b)c/no_auto_capture
+ abc
+Matched with REG_NOSUB
+
+/a?|b?/
+ abc
+ 0: a
+\= Expect no match
+ ddd\=notempty
+No match: POSIX code 17: match failed
+
+/\w+A/
+ CDAAAAB
+ 0: CDAAAA
+
+/\w+A/ungreedy
+ CDAAAAB
+ 0: CDA
+
+/\Biss\B/I,aftertext
+** Ignored with POSIX interface: info
+ Mississippi
+ 0: iss
+ 0+ issippi
+
+/abc/\
+Failed: POSIX code 9: bad escape sequence at offset 3
+
+"(?(?C)"
+Failed: POSIX code 3: pattern error at offset 2
+
+/abcd/substitute_extended
+** Ignored with POSIX interface: substitute_extended
+
+/\[A]{1000000}**/expand,regerror_buffsize=31
+Failed: POSIX code 4: ? * + invalid at offset 100000
+** regerror() message truncated
+
+/\[A]{1000000}**/expand,regerror_buffsize=32
+Failed: POSIX code 4: ? * + invalid at offset 1000001
+
+# End of testdata/testinput18
diff --git a/testdata/testoutput19 b/testdata/testoutput19
index 7f3aa0c..c4169ca 100644
--- a/testdata/testoutput19
+++ b/testdata/testoutput19
@@ -1,100 +1,21 @@
-# This set of tests exercises the serialization/deserialization functions in
-# the library. It does not use UTF or JIT.
-
-#forbid_utf
-
-# Compile several patterns, push them onto the stack, and then write them
-# all to a file.
-
-#pattern push
-
-/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
- (?(DEFINE)
- (?<NAME_PAT>[a-z]+)
- (?<ADDRESS_PAT>\d+)
- )/x
-/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
-
-#save testsaved1
-
-# Do it again for some more patterns.
-
-/(*MARK:A)(*SKIP:B)(C|X)/mark
-** Ignored when compiled pattern is stacked with 'push': mark
-/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
-
-#save testsaved2
-#pattern -push
-
-# Reload the patterns, then pop them one by one and check them.
-
-#load testsaved1
-#load testsaved2
-
-#pop info
-Capturing subpattern count = 2
-Max back reference = 2
-Named capturing subpatterns:
- n 1
- n 2
-Options: dupnames
-Starting code units: b f
-Subject length lower bound = 6
- foofoo
- 0: foofoo
- 1: foo
- barbar
- 0: barbar
- 1: <unset>
- 2: bar
-
-#pop mark
- C
- 0: C
- 1: C
-MK: A
- D
-No match, mark = A
-
-#pop
- AmanaplanacanalPanama
- 0: AmanaplanacanalPanama
- 1: <unset>
- 2: <unset>
- 3: AmanaplanacanalPanama
- 4: A
-
-#pop info
-Capturing subpattern count = 4
-Named capturing subpatterns:
- ADDR 2
- ADDRESS_PAT 4
- NAME 1
- NAME_PAT 3
-Options: extended
-Subject length lower bound = 3
- metcalfe 33
- 0: metcalfe 33
- 1: metcalfe
- 2: 33
+# This set of tests is run only with the 8-bit library. It tests the POSIX
+# interface with UTF/UCP support, which is supported only with the 8-bit
+# library. This test should not be run with JIT (which is not available for the
+# POSIX interface).
-# Check for an error when different tables are used.
-
-/abc/push,tables=1
-/xyz/push,tables=2
-#save testsaved1
-Serialization failed: error -30: patterns do not all use the same character tables
+#pattern posix
-#pop
- xyz
- 0: xyz
+/a\x{1234}b/utf
+ a\x{1234}b
+ 0: a\x{1234}b
-#pop
- abc
- 0: abc
+/\w/
+\= Expect no match
+ +++\x{c2}
+No match: POSIX code 17: match failed
-#pop should give an error
-** Can't pop off an empty stack
- pqr
-
-# End of testinput19
+/\w/ucp
+ +++\x{c2}
+ 0: \xc2
+
+# End of testdata/testinput19
diff --git a/testdata/testoutput2 b/testdata/testoutput2
index b628466..7178410 100644
--- a/testdata/testoutput2
+++ b/testdata/testoutput2
@@ -9,6 +9,7 @@
# test 5.
#forbid_utf
+#newline_default lf any anycrlf
# Test binary zeroes in the pattern
@@ -61,8 +62,7 @@ Subject length lower bound = 3
0: abc
abc\=anchored
0: abc
- *** Failers
-No match
+\= Expect no match
defabc\=anchored
No match
ABC
@@ -77,8 +77,7 @@ Subject length lower bound = 3
0: abc
abc\=anchored
0: abc
- *** Failers
-No match
+\= Expect no match
defabc
No match
defabc\=anchored
@@ -114,8 +113,7 @@ Overall options: anchored
Subject length lower bound = 3
abc
0: abc
- *** Failers
-No match
+\= Expect no match
def\nabc
No match
@@ -227,7 +225,7 @@ Starting code units: \x09 \x0a \x0b \x0c \x0d \x20 a b
Subject length lower bound = 1
/(ab\2)/
-Failed: error 115 at offset 6: reference to non-existent subpattern
+Failed: error 115 at offset 4: reference to non-existent subpattern
/{4,5}abc/
Failed: error 109 at offset 4: quantifier does not follow a repeatable item
@@ -319,15 +317,14 @@ Last code unit = 'c'
Subject length lower bound = 3
abc
0: abc
- *** Failers
-No match
+\= Expect no match
abc\n
No match
abc\ndef
No match
/(a)(b)(c)(d)(e)\6/
-Failed: error 115 at offset 17: reference to non-existent subpattern
+Failed: error 115 at offset 16: reference to non-existent subpattern
/the quick brown fox/I
Capturing subpattern count = 0
@@ -345,8 +342,7 @@ Options: anchored
Subject length lower bound = 19
the quick brown fox
0: the quick brown fox
- *** Failers
-No match
+\= Expect no match
this is a line with the quick brown fox
No match
@@ -428,8 +424,6 @@ Subject length lower bound = 2
/(?U)<.*>/I
Capturing subpattern count = 0
-Compile options: <none>
-Overall options: ungreedy
First code unit = '<'
Last code unit = '>'
Subject length lower bound = 2
@@ -456,8 +450,6 @@ Subject length lower bound = 3
/(?U)={3,}?/I
Capturing subpattern count = 0
-Compile options: <none>
-Overall options: ungreedy
First code unit = '='
Last code unit = '='
Subject length lower bound = 3
@@ -474,8 +466,7 @@ Subject length lower bound = 3
0: foo
catfoo
0: foo
- *** Failers
-No match
+\= Expect no match
the barfoo
No match
and cattlefoo
@@ -492,8 +483,6 @@ Failed: error 125 at offset 12: lookbehind assertion is not fixed length
/(?i)abc/I
Capturing subpattern count = 0
-Compile options: <none>
-Overall options: caseless
First code unit = 'a' (caseless)
Last code unit = 'c' (caseless)
Subject length lower bound = 3
@@ -506,7 +495,7 @@ Subject length lower bound = 1
/(?i)^1234/I
Capturing subpattern count = 0
Compile options: <none>
-Overall options: anchored caseless
+Overall options: anchored
Subject length lower bound = 4
/(^b|(?i)^d)/I
@@ -519,7 +508,7 @@ Subject length lower bound = 1
Capturing subpattern count = 0
May match empty string
Compile options: <none>
-Overall options: anchored dotall
+Overall options: anchored
Subject length lower bound = 0
/[abcd]/I
@@ -529,15 +518,11 @@ Subject length lower bound = 1
/(?i)[abcd]/I
Capturing subpattern count = 0
-Compile options: <none>
-Overall options: caseless
Starting code units: A B C D a b c d
Subject length lower bound = 1
/(?m)[xy]|(b|c)/I
Capturing subpattern count = 1
-Compile options: <none>
-Overall options: multiline
Starting code units: b c x y
Subject length lower bound = 1
@@ -549,8 +534,7 @@ Subject length lower bound = 1
/(?i)(^a|^b)/Im
Capturing subpattern count = 1
-Compile options: multiline
-Overall options: caseless multiline
+Options: multiline
First code unit at start or follows newline
Subject length lower bound = 1
@@ -615,8 +599,7 @@ Subject length lower bound = 1
0: a
a\n
0: a
- *** Failers
-No match
+\= Expect no match
a\=noteol
No match
a\n\=noteol
@@ -633,8 +616,7 @@ Subject length lower bound = 1
0: a
a\n\=noteol
0: a
- *** Failers
-No match
+\= Expect no match
a\=noteol
No match
@@ -692,8 +674,7 @@ Last code unit = 'r'
Subject length lower bound = 3
foo\nbarbar
0: bar
- ***Failers
-No match
+\= Expect no match
rhubarb
No match
barbell
@@ -711,8 +692,7 @@ Last code unit = 'r'
Subject length lower bound = 3
foo\nbarbar
0: bar
- ***Failers
-No match
+\= Expect no match
rhubarb
No match
barbell
@@ -730,8 +710,7 @@ Subject length lower bound = 3
0: abc
def\nabc
0: abc
- *** Failers
-No match
+\= Expect no match
defabc
No match
@@ -756,8 +735,7 @@ Subject length lower bound = 5
0: -cart
a donkey-cart race
0: -cart
- *** Failers
-No match
+\= Expect no match
cart
No match
horse-and-cart
@@ -800,8 +778,7 @@ Subject length lower bound = 2
0: ZZ
BZZ
0: ZZ
- *** Failers
-No match
+\= Expect no match
ZZ
No match
abXYZZ
@@ -821,16 +798,11 @@ Subject length lower bound = 3
0: bar
foobbar
0: bar
- *** Failers
-No match
+\= Expect no match
fooabar
No match
-/This one is here because Perl behaves differently; see also the following/I
-Capturing subpattern count = 0
-First code unit = 'T'
-Last code unit = 'g'
-Subject length lower bound = 73
+# This one is here because Perl behaves differently; see also the following.
/^(a\1?){4}$/I
Capturing subpattern count = 1
@@ -838,23 +810,21 @@ Max back reference = 1
Compile options: <none>
Overall options: anchored
Subject length lower bound = 4
+\= Expect no match
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
+# 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
0: xa=xaa
1: =xaa
- ** Failers
-No match
+\= Expect no match
xa=xaaa
No match
@@ -862,16 +832,11 @@ No match
xa=xaa
0: xa=xaa
1: =xaa
- ** Failers
-No match
+\= Expect no match
xa=xaaa
No match
-/These are syntax tests from Perl 5.005/I
-Capturing subpattern count = 0
-First code unit = 'T'
-Last code unit = '5'
-Subject length lower bound = 38
+# These are syntax tests from Perl 5.005
/a[b-a]/
Failed: error 108 at offset 4: range out of order in character class
@@ -901,13 +866,13 @@ Failed: error 109 at offset 2: quantifier does not follow a repeatable item
Failed: error 122 at offset 0: unmatched closing parenthesis
/\1/
-Failed: error 115 at offset 2: reference to non-existent subpattern
+Failed: error 115 at offset 1: reference to non-existent subpattern
/\2/
-Failed: error 115 at offset 2: reference to non-existent subpattern
+Failed: error 115 at offset 1: reference to non-existent subpattern
/(a)|\2/
-Failed: error 115 at offset 6: reference to non-existent subpattern
+Failed: error 115 at offset 5: reference to non-existent subpattern
/a[b-a]/Ii
Failed: error 108 at offset 4: range out of order in character class
@@ -940,7 +905,7 @@ Failed: error 122 at offset 0: unmatched closing parenthesis
Failed: error 114 at offset 4: missing closing parenthesis
/(?<%)b/
-Failed: error 124 at offset 3: unrecognized character after (?<
+Failed: error 124 at offset 3: letter or underscore expected after (?< or (?'
/a(?{)b/
Failed: error 111 at offset 3: unrecognized character after (? or (?-
@@ -970,10 +935,10 @@ Failed: error 125 at offset 6: lookbehind assertion is not fixed length
Failed: error 104 at offset 7: numbers out of order in {} quantifier
/abc/\
-Failed: error 101 at offset 4: \ at end of pattern
+Failed: error 101 at offset 3: \ at end of pattern
/abc/\i
-Failed: error 101 at offset 4: \ at end of pattern
+Failed: error 101 at offset 3: \ at end of pattern
/(a)bc(d)/I
Capturing subpattern count = 2
@@ -1170,7 +1135,7 @@ Subject length lower bound = 1
------------------------------------------------------------------
Capturing subpattern count = 1
Compile options: <none>
-Overall options: anchored dotall
+Overall options: anchored
Subject length lower bound = 1
/(?s:.*X|^B)/IB
@@ -1233,8 +1198,7 @@ Subject length lower bound = 3
0+ issippi
0: iss
0+ ippi
- *** Failers
-No match
+\= Expect no match
Mississippi\=anchored
No match
@@ -1341,6 +1305,17 @@ Subject length lower bound = 3
0: ab\x0a
0+ cd
+/^/gm,newline=any
+ a\rb\nc\r\nxyz\=aftertext
+ 0:
+ 0+ a\x0db\x0ac\x0d\x0axyz
+ 0:
+ 0+ b\x0ac\x0d\x0axyz
+ 0:
+ 0+ c\x0d\x0axyz
+ 0:
+ 0+ xyz
+
/abc/I
Capturing subpattern count = 0
First code unit = 'a'
@@ -1584,8 +1559,7 @@ Subject length lower bound = 0
0: ab
\
0:
- *** Failers
- 0:
+\= Expect no match
\=notempty
No match
@@ -1599,8 +1573,7 @@ Subject length lower bound = 0
0:
ab-c\=notempty
0: -
- *** Failers
- 0:
+\= Expect no match
abc\=notempty
No match
@@ -1638,8 +1611,7 @@ Subject length lower bound = 2
0: ()
12(abcde(fsh)xyz(foo(bar))lmno)89
0: (abcde(fsh)xyz(foo(bar))lmno)
- *** Failers
-No match
+\= Expect no match
abcd
No match
abcd)
@@ -1676,8 +1648,7 @@ Subject length lower bound = 3
0: (c)
((ab))
0: ((ab))
- *** Failers
-No match
+\= Expect no match
()
No match
@@ -2134,9 +2105,7 @@ Subject length lower bound = 2
aB
0: aB
1: a
- *** Failers
- 0: ai
- 1: a
+\= Expect no match
Ab
No match
AB
@@ -2659,8 +2628,7 @@ Subject length lower bound = 2
0: ab
aB
0: aB
- *** Failers
-No match
+\= Expect no match
AB
No match
@@ -2684,8 +2652,7 @@ Subject length lower bound = 2
aB
0: aB
1: aB
- *** Failers
-No match
+\= Expect no match
AB
No match
@@ -2697,8 +2664,7 @@ No match
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Compile options: extended
-Overall options: caseless extended
+Options: extended
First code unit = 'a' (caseless)
Last code unit = 'c' (caseless)
Subject length lower bound = 3
@@ -2712,8 +2678,7 @@ Subject length lower bound = 3
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Compile options: extended
-Overall options: caseless extended
+Options: extended
First code unit = 'a' (caseless)
Last code unit = 'c' (caseless)
Subject length lower bound = 3
@@ -2831,8 +2796,7 @@ Capturing subpattern count = 0
Starting code units: 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
Subject length lower bound = 1
- *** Failers
- 0: F
+\= Expect no match
xxxxx
No match
@@ -2917,8 +2881,7 @@ Subject length lower bound = 0
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
+\= Expect no match
this is not a line with only words and spaces!
No match
@@ -2930,8 +2893,7 @@ Subject length lower bound = 2
0: 12345a
1: 12345
2: a
- *** Failers
-No match
+\= Expect no match
12345+
No match
@@ -2993,8 +2955,7 @@ Subject length lower bound = 3
(abc(def)xyz)
0: (abc(def)xyz)
1: xyz
- *** Failers
-No match
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -3062,8 +3023,6 @@ Subject length lower bound = 3
End
------------------------------------------------------------------
Capturing subpattern count = 0
-Compile options: <none>
-Overall options: ungreedy
First code unit = 'x'
Last code unit = 'b'
Subject length lower bound = 3
@@ -3218,8 +3177,7 @@ Subject length lower bound = 2
0: <abc<>def>
<abc<>
0: <>
- *** Failers
-No match
+\= Expect no match
<abc
No match
@@ -3435,8 +3393,7 @@ Subject length lower bound = 1
0: a
xy\nabc
0: a
- *** Failers
-No match
+\= Expect no match
xyabc
No match
@@ -3448,8 +3405,6 @@ Subject length lower bound = 1
/(?i)[ab]/I
Capturing subpattern count = 0
-Compile options: <none>
-Overall options: caseless
Starting code units: A B a b
Subject length lower bound = 1
@@ -3472,8 +3427,7 @@ Subject length lower bound = 6
--->1234abcdef
0 ^ ^ d
0: abcdef
- *** Failers
-No match
+\= Expect no match
abcxyz
No match
abcxyzf
@@ -3505,8 +3459,7 @@ Subject length lower bound = 7
1 ^ \d
2 ^ ^ d
0: 4abcdef
- *** Failers
-No match
+\= Expect no match
abcdef
No match
@@ -3523,8 +3476,7 @@ Subject length lower bound = 7
1 ^ \d
2 ^ ^ d
0: 4abcdef
- *** Failers
-No match
+\= Expect no match
abcdef
No match
@@ -3548,8 +3500,6 @@ Capturing subpattern count = 0
First code unit = 'a'
Last code unit = 'f'
Subject length lower bound = 6
- *** Failers
-No match
\x83\x0\x61bcdef
--->\x83\x00abcdef
0 ^ ^ d
@@ -3582,8 +3532,7 @@ Callout 1: last capture = 1
123abcdefC-\=callout_none
0: abcdef
1: abc
- *** Failers
-No match
+\= Expect no match
123abcdef\=callout_fail=1
--->123abcdef
0 ^ ^ d
@@ -3609,10 +3558,6 @@ Subject length lower bound = 0
1 ^ ^ )
0: abcabc
1: abc
- *** Failers
---->*** Failers
- 0 ^ (abc(?C1))*
- 0:
abcabcabc\=callout_fail=1:3
--->abcabcabc
0 ^ (abc(?C1))*
@@ -3754,6 +3699,7 @@ Capturing subpattern count = 2
First code unit = 'a'
Last code unit = 'b'
Subject length lower bound = 2
+\= Expect no match
abbbbbccc\=callout_data=1
--->abbbbbccc
1 ^ ^
@@ -3765,6 +3711,7 @@ Capturing subpattern count = 2
First code unit = 'a'
Last code unit = 'b'
Subject length lower bound = 2
+\= Expect no match
abbbbbccc\=callout_data=1
--->abbbbbccc
1 ^ ^
@@ -3802,15 +3749,6 @@ Capturing subpattern count = 0
Starting code units: a b
Subject length lower bound = 1
-/(?R)/I
-Failed: error 140 at offset 3: recursion could loop indefinitely
-
-/(a|(?R))/I
-Failed: error 140 at offset 6: recursion could loop indefinitely
-
-/(ab|(bc|(de|(?R))))/I
-Failed: error 140 at offset 15: recursion could loop indefinitely
-
/x(ab|(bc|(de|(?R))))/I
Capturing subpattern count = 3
First code unit = 'x'
@@ -3837,17 +3775,10 @@ Subject length lower bound = 3
1: xxab
2: xxab
3: xxab
- *** Failers
-No match
+\= Expect no match
xyab
No match
-/(ab|(bc|(de|(?1))))/I
-Failed: error 140 at offset 15: recursion could loop indefinitely
-
-/x(ab|(bc|(de|(?1)x)x)x)/I
-Failed: error 140 at offset 16: recursion could loop indefinitely
-
/^([^()]|\((?1)*\))*$/I
Capturing subpattern count = 1
May match empty string
@@ -3863,8 +3794,7 @@ Subject length lower bound = 0
a(b(c))d
0: a(b(c))d
1: d
- *** Failers)
-No match
+\= Expect no match)
a(b(c)d
No match
@@ -3933,8 +3863,7 @@ Subject length lower bound = 1
-12
0: -12
1: -12
- *** Failers
-No match
+\= Expect no match
((2+2)*-3)-7)
No match
@@ -3942,7 +3871,7 @@ No match
Capturing subpattern count = 2
Compile options: <none>
Overall options: anchored
-Subject length lower bound = 2
+Subject length lower bound = 3
xyz
0: xyz
1: xyz
@@ -3951,8 +3880,7 @@ Subject length lower bound = 2
0: xxyzxyzz
1: xxyzxyzz
2: xyzxyz
- *** Failers
-No match
+\= Expect no match
xxyzz
No match
xxyzxyzxyzz
@@ -3988,8 +3916,7 @@ Subject length lower bound = 2
0: <>
1: <>
2: <>
- *** Failers
-No match
+\= Expect no match
<abc
No match
@@ -4027,7 +3954,7 @@ Subject length lower bound = 3
Capturing subpattern count = 2
Compile options: <none>
Overall options: anchored
-Subject length lower bound = 3
+Subject length lower bound = 2
a=a
0: a=a
1: a
@@ -4158,8 +4085,7 @@ Subject length lower bound = 0
2: <unset>
3: Able was I ere I saw Elba
4: A
- *** Failers
-No match
+\= Expect no match
The quick brown fox
No match
@@ -4337,6 +4263,7 @@ Subject length lower bound = 2
Callout data = 1
0: ab
1: ab
+\= Expect no match
aaabbb\=callout_data=-1
--->aaabbb
1 ^ ^ b
@@ -4445,8 +4372,7 @@ Subject length lower bound = 3
1: 10,20,30,5,5,4,4,2,43,23,4234
2: 10
3: ,4234
- *** Failers
-No match
+\= Expect no match
[]
No match
@@ -4533,16 +4459,33 @@ Capturing subpattern count = 2
May match empty string
Subject length lower bound = 0
-/[ab]{1}+/IB
+/[ab]{1}+/B
------------------------------------------------------------------
Bra
- [ab]{1,1}+
+ [ab]
+ Ket
+ End
+------------------------------------------------------------------
+
+/()(?1){1}/B
+------------------------------------------------------------------
+ Bra
+ CBra 1
+ Ket
+ Recurse
+ Ket
+ End
+------------------------------------------------------------------
+
+/()(?1)/B
+------------------------------------------------------------------
+ Bra
+ CBra 1
+ Ket
+ Recurse
Ket
End
------------------------------------------------------------------
-Capturing subpattern count = 0
-Starting code units: a b
-Subject length lower bound = 1
/((w\/|-|with)*(free|immediate)*.*?shipping\s*[!.-]*)/Ii
Capturing subpattern count = 3
@@ -4640,6 +4583,7 @@ Subject length lower bound = 5
+4 ^ ^ e
+5 ^ ^
0: abcde
+\= Expect no match
abcdfe
--->abcdfe
+0 ^ a
@@ -4763,6 +4707,7 @@ Subject length lower bound = 2
+2 ^ ^ b
+3 ^ ^
0: aaaab
+\= Expect no match
aaaacb
--->aaaacb
+0 ^ a+
@@ -4830,8 +4775,7 @@ Subject length lower bound = 4
+10 ^ ^
0: defx
1: def
- ** Failers
-No match
+\= Expect no match
abcdefzx
--->abcdefzx
+0 ^ (abc|def)
@@ -4905,8 +4849,7 @@ Subject length lower bound = 4
+10 ^ ^
0: defx
1: def
- ** Failers
-No match
+\= Expect no match
abcdefzx
--->abcdefzx
+0 ^ (abc|def)
@@ -5022,6 +4965,7 @@ Capturing subpattern count = 1
Options: auto_callout
Starting code units: a b x
Subject length lower bound = 2
+\= Expect no match
Note: that { does NOT introduce a quantifier
--->Note: that { does NOT introduce a quantifier
+0 ^ ([ab]{,4}c|xy)
@@ -5071,6 +5015,7 @@ Capturing subpattern count = 1
Options: auto_callout
Starting code units: a b x
Subject length lower bound = 2
+\= Expect no match
Note: that { does NOT introduce a quantifier
--->Note: that { does NOT introduce a quantifier
+0 ^ ([ab]{,4}c|xy)
@@ -5212,7 +5157,7 @@ Max lookbehind = 1
May match empty string
Options: dotall
Subject length lower bound = 0
- ab cd\=offset=1
+ ab cd\=startoffset=1
0: cd
/(?!.bcd).*/I
@@ -5237,8 +5182,7 @@ Partial match: abcd
0: abcde
the quick brown abc\=ps
Partial match: abc
- ** Failers\=ps
-No match
+\= Expect no match\=ps
the quick brown abxyz fox\=ps
No match
@@ -5279,8 +5223,7 @@ Partial match: 02/
Partial match: 02/0
02/1\=ps
Partial match: 02/1
- ** Failers\=ps
-No match
+\= Expect no match\=ps
\=ps
No match
123\=ps
@@ -5360,8 +5303,7 @@ Partial match: 1234
Partial match: 12345
12345X
0: 12345X
- *** Failers
-No match
+\= Expect no match
1X
No match
123456\=ps
@@ -5400,8 +5342,7 @@ Last code unit = 'k'
Subject length lower bound = 10
this is a line\nbreak
0: line\x0abreak
- ** Failers
-No match
+\= Expect no match
line one\nthis is a line\nbreak in the second line
No match
@@ -5414,8 +5355,7 @@ Last code unit = 'k'
Subject length lower bound = 10
this is a line\nbreak
0: line\x0abreak
- ** Failers
-No match
+\= Expect no match
line one\nthis is a line\nbreak in the second line
No match
@@ -5426,8 +5366,7 @@ Last code unit = 'd'
Subject length lower bound = 4
AbCd
0: AbCd
- ** Failers
-No match
+\= Expect no match
abcd
No match
@@ -5733,8 +5672,6 @@ Subject length lower bound = 2
2: <unset>
3: a2
C a2 (2) A (non-unique)
- ** Failers
-No match
a1b\=copy=Z,copy=A
0: a1
1: a1
@@ -5819,8 +5756,6 @@ Subject length lower bound = 2
2: <unset>
3: a2
G a2 (2) A (non-unique)
- ** Failers
-No match
a1b\=get=Z,get=A
0: a1
1: a1
@@ -5882,7 +5817,7 @@ Named capturing subpatterns:
A 2
A 3
Compile options: <none>
-Overall options: anchored dupnames
+Overall options: anchored
Duplicate name status changes
Subject length lower bound = 2
a1b\=copy=A
@@ -5900,14 +5835,9 @@ Subject length lower bound = 2
/^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<A>d)/I
Failed: error 143 at offset 37: two named subpatterns have the same name (PCRE2_DUPNAMES not set)
-/ 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 code unit = 'I'
-Last code unit = 'e'
-Subject length lower bound = 141
+# In this next test, J is not set at the outer level; consequently it isn't set
+# in the pattern's options; consequently pcre2_substring_get_byname() produces
+# a random value.
/^(?P<A>a) (?J:(?P<B>b)(?P<B>c)) (?P<C>d)/I
Capturing subpattern count = 4
@@ -5943,8 +5873,7 @@ Subject length lower bound = 1
1: a
bc
0: b
- ** Failers
-No match
+\= Expect no match
abc
No match
@@ -6043,8 +5972,7 @@ Subject length lower bound = 3
0: abc
xyz\r\nabc
0: abc
- ** Failers
-No match
+\= Expect no match
xyz\rabc
No match
xyzabc\r
@@ -6065,8 +5993,7 @@ Last code unit = 'c'
Subject length lower bound = 3
xyz\r\nabclf>
0: abc
- ** Failers
-No match
+\= Expect no match
xyz\nabclf
No match
xyz\rabclf
@@ -6081,8 +6008,7 @@ Last code unit = 'c'
Subject length lower bound = 3
xyz\rabc
0: abc
- ** Failers
-No match
+\= Expect no match
xyz\nabc
No match
xyz\r\nabc
@@ -6376,8 +6302,7 @@ Last code unit = 'A'
Subject length lower bound = 3
aaaA5
0: aaaA5
- ** Failers
-No match
+\= Expect no match
aaaa5
No match
@@ -7091,8 +7016,7 @@ Failed: error 141 at offset 3: unrecognized character after (?P
bXbX
0: bX
1: X
- ** Failers
-No match
+\= Expect no match
aXaX
No match
aXbX
@@ -7138,8 +7062,7 @@ Failed: error 115 at offset 8: reference to non-existent subpattern
0: bx
1: bx
2: x
- ** Failers
-No match
+\= Expect no match
axby
No match
@@ -7159,8 +7082,7 @@ No match
1: Xy
2: X
3: y
- ** Failers
-No match
+\= Expect no match
x
No match
@@ -7308,8 +7230,7 @@ Subject length lower bound = 0
2: <unset>
3: Able was I ere I saw Elba
4: A
- *** Failers
-No match
+\= Expect no match
The quick brown fox
No match
@@ -7342,8 +7263,7 @@ Subject length lower bound = 2
0: adaa
1: a
2: d
- ** Failers
-No match
+\= Expect no match
addd
No match
adbb
@@ -7358,8 +7278,7 @@ No match
0: bdab
1: b
2: d
- ** Failers
-No match
+\= Expect no match
bddd
No match
@@ -7398,39 +7317,36 @@ Last code unit = 'z'
Subject length lower bound = 3
/(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=ovector=0
-No match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4\=ovector=0
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
1:
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\=ovector=0
+No match
/^a.b/newline=lf
a\rb
0: a\x0db
- ** Failers
-No match
+\= Expect no match
a\nb
No match
/^a.b/newline=cr
a\nb
0: a\x0ab
- ** Failers
-No match
+\= Expect no match
a\rb
No match
/^a.b/newline=anycrlf
a\x85b
0: a\x85b
- ** Failers
-No match
+\= Expect no match
a\rb
No match
/^a.b/newline=any
- ** Failers
-No match
+\= Expect no match
a\nb
No match
a\rb
@@ -7471,8 +7387,7 @@ No match
0: a\x0cb
a\x85b
0: a\x85b
- ** Failers
-No match
+\= Expect no match
a\n\rb
No match
@@ -7513,8 +7428,7 @@ No match
0: a\x0a\x0db
a\n\r\x85\x0cb
0: a\x0a\x0d\x85\x0cb
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -7533,8 +7447,7 @@ No match
0: a\x0a\x0d\x0a\x0db
a\n\n\r\nb
0: a\x0a\x0a\x0d\x0ab
- ** Failers
-No match
+\= Expect no match
a\n\n\n\rb
No match
a\r
@@ -7584,17 +7497,19 @@ Subject length lower bound = 3
1: x
/(abc)(?i:(?1))/
- defabcabcxyz
+ defabcabcxyz
0: abcabc
1: abc
- DEFabcABCXYZ
+\= Expect no match
+ DEFabcABCXYZ
No match
/(abc)(?:(?i)(?1))/
- defabcabcxyz
+ defabcabcxyz
0: abcabc
1: abc
- DEFabcABCXYZ
+\= Expect no match
+ DEFabcABCXYZ
No match
/^(a)\g-2/
@@ -7615,16 +7530,14 @@ Failed: error 115 at offset 9: reference to non-existent subpattern
/^a.b/newline=lf
a\rb
0: a\x0db
- *** Failers
-No match
+\= Expect no match
a\nb
No match
/.+foo/
afoo
0: afoo
- ** Failers
-No match
+\= Expect no match
\r\nfoo
No match
\nfoo
@@ -7635,16 +7548,14 @@ No match
0: afoo
\nfoo
0: \x0afoo
- ** Failers
-No match
+\= Expect no match
\r\nfoo
No match
/.+foo/newline=any
afoo
0: afoo
- ** Failers
-No match
+\= Expect no match
\nfoo
No match
\r\nfoo
@@ -7663,8 +7574,7 @@ No match
0:
abc\n\rxyz
0:
- ** Failers
-No match
+\= Expect no match
abc\r\nxyz
No match
@@ -7699,8 +7609,7 @@ No match
/^X/m
XABC
0: X
- ** Failers
-No match
+\= Expect no match
XABC\=notbol
No match
@@ -7734,8 +7643,7 @@ No match
xyabcabc
0: xyabcabc
1: abc
- ** Failers
-No match
+\= Expect no match
xyabc
No match
@@ -7773,8 +7681,7 @@ Failed: error 115 at offset 5: reference to non-existent subpattern
1: abc
Y
0: Y
- ** Failers
-No match
+\= Expect no match
abcY
No match
@@ -7804,8 +7711,7 @@ No match
0: YabcXabcXabc
1: Xabc
2: abc
- ** Failers
-No match
+\= Expect no match
XabcXabc
No match
@@ -7855,8 +7761,7 @@ Failed: error 115 at offset 7: reference to non-existent subpattern
bon-bon
0: bon-bon
1: bon
- ** Failers
-No match
+\= Expect no match
tom-bon
No match
@@ -7962,8 +7867,7 @@ Failed: error 142 at offset 4: syntax error in subpattern name (missing terminat
Ket
End
------------------------------------------------------------------
- ** Failers
-No match
+\= Expect no match
XXXX
No match
@@ -8191,6 +8095,7 @@ Failed: error 106 at offset 10: missing terminating ] for character class
------------------------------------------------------------------
/^a+(*FAIL)/auto_callout
+\= Expect no match
aaaaaa
--->aaaaaa
+0 ^ ^
@@ -8204,6 +8109,7 @@ Failed: error 106 at offset 10: missing terminating ] for character class
No match
/a+b?c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
--->aaabccc
+0 ^ a+
@@ -8227,6 +8133,7 @@ No match
No match
/a+b?(*PRUNE)c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
--->aaabccc
+0 ^ a+
@@ -8253,6 +8160,7 @@ No match
No match
/a+b?(*COMMIT)c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
--->aaabccc
+0 ^ a+
@@ -8265,6 +8173,7 @@ No match
No match
/a+b?(*SKIP)c+(*FAIL)/auto_callout
+\= Expect no match
aaabcccaaabccc
--->aaabcccaaabccc
+0 ^ a+
@@ -8284,6 +8193,7 @@ No match
No match
/a+b?(*THEN)c+(*FAIL)/auto_callout
+\= Expect no match
aaabccc
--->aaabccc
+0 ^ a+
@@ -8330,6 +8240,7 @@ Failed: error 161 at offset 11: number is too big
Failed: error 115 at offset 3: reference to non-existent subpattern
/.+A/newline=crlf
+\= Expect no match
\r\nA
No match
@@ -8352,24 +8263,21 @@ Failed: error 160 at offset 5: (*VERB) not recognized or malformed
/(*CR)a.b/
a\nb
0: a\x0ab
- ** Failers
-No match
+\= Expect no match
a\rb
No match
/(*CR)a.b/newline=lf
a\nb
0: a\x0ab
- ** Failers
-No match
+\= Expect no match
a\rb
No match
/(*LF)a.b/newline=CRLF
a\rb
0: a\x0db
- ** Failers
-No match
+\= Expect no match
a\nb
No match
@@ -8378,14 +8286,12 @@ No match
0: a\x0db
a\nb
0: a\x0ab
- ** Failers
-No match
+\= Expect no match
a\r\nb
No match
/(*ANYCRLF)a.b/newline=CR
- ** Failers
-No match
+\= Expect no match
a\rb
No match
a\nb
@@ -8394,8 +8300,7 @@ No match
No match
/(*ANY)a.b/newline=cr
- ** Failers
-No match
+\= Expect no match
a\rb
No match
a\nb
@@ -8438,8 +8343,7 @@ Subject length lower bound = 3
0: a\x0ab
a\r\nb
0: a\x0d\x0ab
- ** Failers
-No match
+\= Expect no match
a\x85b
No match
a\x0bb
@@ -8474,8 +8378,7 @@ Subject length lower bound = 2
0: a\x0ab
a\r\nb
0: a\x0d\x0ab
- ** Failers
-No match
+\= Expect no match
a\x85b
No match
a\x0bb
@@ -8510,8 +8413,7 @@ Subject length lower bound = 4
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
+\= Expect no match
a\x85\x85b
No match
a\x0b\x0bb
@@ -8533,8 +8435,7 @@ Subject length lower bound = 4
0: a\x85\x85b
a\x0b\x0bb
0: a\x0b\x0bb
- ** Failers
-No match
+\= Expect no match
a\r\r\r\r\rb
No match
@@ -8626,10 +8527,10 @@ Failed: error 162 at offset 3: subpattern name expected
Failed: error 162 at offset 3: subpattern name expected
/\k/
-Failed: error 169 at offset 2: \k is not followed by a braced, angle-bracketed, or quoted name
+Failed: error 169 at offset 1: \k is not followed by a braced, angle-bracketed, or quoted name
/\kabc/
-Failed: error 169 at offset 5: \k is not followed by a braced, angle-bracketed, or quoted name
+Failed: error 169 at offset 1: \k is not followed by a braced, angle-bracketed, or quoted name
/(?P=)/
Failed: error 162 at offset 4: subpattern name expected
@@ -8637,18 +8538,6 @@ Failed: error 162 at offset 4: subpattern name expected
/(?P>)/
Failed: error 162 at offset 4: subpattern name expected
-/(?!\w)(?R)/
-Failed: error 140 at offset 9: recursion could loop indefinitely
-
-/(?=\w)(?R)/
-Failed: error 140 at offset 9: recursion could loop indefinitely
-
-/(?<!\w)(?R)/
-Failed: error 140 at offset 10: recursion could loop indefinitely
-
-/(?<=\w)(?R)/
-Failed: error 140 at offset 10: recursion could loop indefinitely
-
/[[:foo:]]/
Failed: error 130 at offset 3: unknown POSIX class name
@@ -8677,19 +8566,19 @@ Failed: error 130 at offset 6: unknown POSIX class name
Failed: error 130 at offset 3: unknown POSIX class name
/(^(a|b\g<-1'c))/
-Failed: error 157 at offset 15: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
+Failed: error 157 at offset 8: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
/^(?+1)(?<a>x|y){0}z/
xzxx
0: xz
yzyy
0: yz
- ** Failers
-No match
+\= Expect no match
xxz
No match
/(\3)(\1)(a)/
+\= Expect no match
cat
No match
@@ -8720,8 +8609,7 @@ Failed: error 115 at offset 3: reference to non-existent subpattern
abcbabc
0: abcbabc
1: abc
- ** Failers
-No match
+\= Expect no match
abcXabc
No match
@@ -8729,8 +8617,7 @@ No match
abcXabc
0: abcXabc
1: abc
- ** Failers
-No match
+\= Expect no match
abcbabc
No match
@@ -8755,20 +8642,17 @@ Failed: error 106 at offset 4: missing terminating ] for character class
Failed: error 106 at offset 5: missing terminating ] for character class
/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
-No match
+\= Expect no match
ab
No match
/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
-No match
+\= Expect no match
ab
No match
/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -8777,8 +8661,7 @@ No match
0: aXb
a\nb
0: a\x0ab
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -8787,8 +8670,7 @@ No match
0: aXb
a\nX\nXb
0: a\x0aX\x0aXb
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -8887,8 +8769,7 @@ Subject length lower bound = 1
+2 ^ ^ z
+3 ^ ^
0: xyz
- ** Failers
-No match
+\= Expect no match
abc
No match
abcxypqr
@@ -8905,20 +8786,7 @@ No match
+2 ^ ^ z
+3 ^ ^
0: xyz
- ** Failers
---->** Failers
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
-No match
+\= Expect no match
abc
--->abc
+0 ^ x
@@ -8956,7 +8824,7 @@ No match
/(*NO_AUTO_POSSESS)a+b/B
------------------------------------------------------------------
Bra
- a++
+ a+
b
Ket
End
@@ -9248,12 +9116,14 @@ Partial match: 123999
^^^^
/Z(*F)/
+\= Expect no match
Z\=ps
No match
ZA\=ps
No match
/Z(?!)/
+\= Expect no match
Z\=ps
No match
ZA\=ps
@@ -9405,8 +9275,7 @@ Partial match: +ab
0: abc
^^^
0+ def
- ** Failers
-No match
+\= Expect no match
abcdef\=notempty
No match
xyzabcdef\=notempty
@@ -9420,8 +9289,7 @@ No match
0: abc
^^^
0+ def
- ** Failers
-No match
+\= Expect no match
abcdef\=notempty
No match
@@ -9441,9 +9309,7 @@ No match
xyz\=notempty_atstart
0:
0+ yz
- ** Failers
- 0:
- 0+ ** Failers
+\= Expect no match
xyz\=notempty
No match
@@ -9454,9 +9320,7 @@ No match
xyzabc
0:
0+ xyzabc
- ** Failers
- 0:
- 0+ ** Failers
+\= Expect no match
xyzabc\=notempty
No match
xyzabc\=notempty_atstart
@@ -9566,8 +9430,7 @@ No match
XaaX
0: aa
1: a
- ** Failers
-No match
+\= Expect no match
XAAX
No match
@@ -9778,8 +9641,7 @@ Subject length lower bound = 3
4: "
5: <unset>
6: "
- ** Failers
-No match
+\= Expect no match
b"11111
No match
a"11111
@@ -9833,8 +9695,7 @@ Subject length lower bound = 2
eX
0: eX
1: e
- ** Failers
-No match
+\= Expect no match
abcdY
No match
ey
@@ -9879,8 +9740,7 @@ Subject length lower bound = 4
2: b
3: c
4: dd
- ** Failers
-No match
+\= Expect no match
abcdde
No match
@@ -9936,8 +9796,7 @@ Partial match: abcde
ABXABD
0: ABD
1: B
- ** Failers
-No match
+\= Expect no match
ABX
No match
BAXBAD
@@ -9967,6 +9826,7 @@ Capturing subpattern count = 3
Max back reference = 3
Last code unit = 'a'
Subject length lower bound = 3
+\= Expect no match
cat
No match
@@ -10004,8 +9864,7 @@ Subject length lower bound = 1
0: Ab
CcC
0: c
- ** Failers
-No match
+\= Expect no match
XABX
No match
@@ -10105,8 +9964,8 @@ No match
End
------------------------------------------------------------------
-/ -- This one is here because Perl gives the match as "b" rather than "ab". I
- believe this to be a Perl bug. --/
+# This one is here because Perl gives the match as "b" rather than "ab". I
+# believe this to be a Perl bug.
/(?>a\Kb)z|(ab)/
ab\=startchar
@@ -10114,7 +9973,14 @@ No match
1: ab
/(?P<L1>(?P<L2>0|)|(?P>L2)(?P>L1))/
-Failed: error 140 at offset 31: recursion could loop indefinitely
+ abcd
+ 0:
+ 1:
+ 2:
+ 0abc
+ 0: 0
+ 1: 0
+ 2: 0
/abc(*MARK:)pqr/
Failed: error 166 at offset 10: (*MARK) must have an argument
@@ -10129,6 +9995,7 @@ Failed: error 159 at offset 13: an argument is not allowed for (*ACCEPT), (*FAIL
# bug because replacing the B in the pattern by (B|D) does make it fail.
/A(*COMMIT)B/aftertext,mark
+\= Expect no match
ACABX
No match
@@ -10140,6 +10007,7 @@ No match
0: AC
/A(*PRUNE)B|A(*PRUNE)C/mark
+\= Expect no match
AC
No match
@@ -10147,8 +10015,7 @@ No match
# though PCRE2 does.
/^A(*:A)B|^X(*:A)Y/mark
- ** Failers
-No match
+\= Expect no match
XAQQ
No match, mark = A
@@ -10161,20 +10028,22 @@ No match, mark = A
0: ABC
/(*COMMIT)ABC/no_start_optimize
- ** Failers
-No match
+\= Expect no match
DEFGABC
No match
/^(ab (c+(*THEN)cd) | xyz)/x
+\= Expect no match
abcccd
No match
/^(ab (c+(*PRUNE)cd) | xyz)/x
+\= Expect no match
abcccd
No match
/^(ab (c+(*FAIL)cd) | xyz)/x
+\= Expect no match
abcccd
No match
@@ -10211,8 +10080,7 @@ No match
------------------------------------------------------------------
ACBD
0: ACBD
- *** Failers
-No match
+\= Expect no match
A\nB
No match
ACB\n
@@ -10232,8 +10100,7 @@ No match
0: ACBD
ACB\n
0: ACB\x0a
- *** Failers
-No match
+\= Expect no match
A\nB
No match
@@ -10242,8 +10109,7 @@ No match
0: A\x0aB
A\rB
0: A\x0dB
- ** Failers
-No match
+\= Expect no match
A\r\nB
No match
@@ -10354,6 +10220,7 @@ No match
Ket
End
------------------------------------------------------------------
+\= Expect no match
X\x0d\x0a
No match
@@ -10409,26 +10276,30 @@ Partial match: abc
Partial match: abc
/abc\B/
- abc
-No match
abc\=ps
Partial match: abc
abc\=ph
Partial match: abc
+\= Expect no match
+ abc
+No match
/.+/
+\= Bad offsets
+ abc\=offset=4
+Failed: error -33: bad offset value
+ abc\=offset=-4
+** Invalid value in 'offset=-4'
+\= Valid data
abc\=offset=0
0: abc
abc\=offset=1
0: bc
abc\=offset=2
0: c
+\= Expect no match
abc\=offset=3
No match
- abc\=offset=4
-Failed: error -33: bad offset value
- abc\=offset=-4
-** Invalid value in 'offset=-4'
/^\cģ/
Failed: error 168 at offset 3: \c must be followed by a printable ASCII character
@@ -10551,8 +10422,7 @@ Failed: error 115 at offset 15: reference to non-existent subpattern
0: aaaaX
1: a
2: X
- ** Failers
-No match
+\= Expect no match
aaaa
No match
@@ -10560,8 +10430,7 @@ No match
aaaaX
0: aaaaX
1: X
- ** Failers
-No match
+\= Expect no match
aaaa
No match
@@ -10745,8 +10614,7 @@ Subject length lower bound = 1
/(?1)(?:(b(*ACCEPT))){0}c/
bc
0: bc
- ** Failers
-No match
+\= Expect no match
b
No match
@@ -10757,6 +10625,7 @@ No match
0: c
/^.*?(?(?=a)a|b(*THEN)c)/
+\= Expect no match
ba
No match
@@ -10765,14 +10634,17 @@ No match
0: ba
/^.*?(?(?=a)a(*THEN)b|c)/
+\= Expect no match
ac
No match
/^.*?(?(?=a)a(*THEN)b)c/
+\= Expect no match
ac
No match
/^.*?(a(*THEN)b)c/
+\= Expect no match
aabc
No match
@@ -10798,10 +10670,12 @@ No match
0: C
1: C
MK: A
+\= Expect no match
D
No match, mark = A
/(*:A)A+(*SKIP:A)(B|Z)/mark
+\= Expect no match
AAAC
No match, mark = A
@@ -10822,6 +10696,7 @@ No match, mark = A
/(?>(*ACCEPT)b)c/
c
0:
+\= Expect no match
c\=notempty
No match
@@ -11087,9 +10962,6 @@ Matched, but too many substrings
End
------------------------------------------------------------------
-/(a+|(?R)b)/
-Failed: error 140 at offset 7: recursion could loop indefinitely
-
/^(a(*:A)(d|e(*:B))z|aeq)/auto_callout
adz
--->adz
@@ -11149,6 +11021,7 @@ Latest Mark: B
1: aeq
/.(*F)/
+\= Expect no match
abc\=ph
No match
@@ -11181,14 +11054,15 @@ Subject length lower bound = 0
0: x
'a*(*ACCEPT)b'aftertext
- \=notempty_atstart
-No match
abc\=notempty_atstart
0: a
0+ bc
bbb\=notempty_atstart
0:
0+ bb
+\= Expect no match
+ \=notempty_atstart
+No match
/(*ACCEPT)a/I,aftertext
Capturing subpattern count = 0
@@ -11224,8 +11098,7 @@ Subject length lower bound = 0
aaaazzzzb
0: aaaazzzzb
1: zzzz
- ** Failers
-No match
+\= Expect no match
aazz
No match
@@ -11241,6 +11114,7 @@ No match
1: c
/(.)((?(1)c|a)|a(?2))/
+\= Expect no match
baa
No match
@@ -11274,8 +11148,7 @@ No match
/^a\x41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aAz
0: aAz
- *** Failers
-No match
+\= Expect no match
ax41z
No match
@@ -11290,8 +11163,7 @@ No match
/^a\u0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aAz
0: aAz
- *** Failers
-No match
+\= Expect no match
au0041z
No match
@@ -11302,16 +11174,14 @@ No match
/^a\u041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
au041z
0: au041z
- *** Failers
-No match
+\= Expect no match
aAz
No match
/^a\U0041z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aU0041z
0: aU0041z
- *** Failers
-No match
+\= Expect no match
aAz
No match
@@ -11384,8 +11254,7 @@ MK: A
4: X
5: Y
MK: B
- ** Failers
-No match
+\= Expect no match
XAQQ
No match, mark = A
XAQQXZZ
@@ -11402,8 +11271,7 @@ No match, mark = B
aw
0: aw
MK: n
- ** Failers
-No match, mark = n
+\= Expect no match
abc
No match, mark = m
@@ -11411,8 +11279,7 @@ No match, mark = m
aw
0: aw
MK: n
- ** Failers
-No match, mark = n
+\= Expect no match
abc
No match, mark = m
@@ -11969,10 +11836,11 @@ Partial match: 123a
0: ad
/^(?!a(*THEN)b|ac)../
- ac
-No match
ad
0: ad
+\= Expect no match
+ ac
+No match
/^(?=a(*THEN)b|ac)/
ac
@@ -12009,6 +11877,7 @@ No match
0: bn
/(?(?=b(*SKIP)a)bn|bnn)/
+\= Expect no match
bnn
No match
@@ -12073,9 +11942,10 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-# A complete set of tests for auto-possessification of character types.
+# A complete set of tests for auto-possessification of character types, but
+# omitting \C because it might be disabled (it has its own tests).
-/\D+\D \D+\d \D+\S \D+\s \D+\W \D+\w \D+. \D+\C \D+\R \D+\H \D+\h \D+\V \D+\v \D+\Z \D+\z \D+$/Bx
+/\D+\D \D+\d \D+\S \D+\s \D+\W \D+\w \D+. \D+\R \D+\H \D+\h \D+\V \D+\v \D+\Z \D+\z \D+$/Bx
------------------------------------------------------------------
Bra
\D+
@@ -12093,8 +11963,6 @@ Subject length lower bound = 5
\D+
Any
\D+
- AllAny
- \D+
\R
\D+
\H
@@ -12114,7 +11982,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\d+\D \d+\d \d+\S \d+\s \d+\W \d+\w \d+. \d+\C \d+\R \d+\H \d+\h \d+\V \d+\v \d+\Z \d+\z \d+$/Bx
+/\d+\D \d+\d \d+\S \d+\s \d+\W \d+\w \d+. \d+\R \d+\H \d+\h \d+\V \d+\v \d+\Z \d+\z \d+$/Bx
------------------------------------------------------------------
Bra
\d++
@@ -12131,8 +11999,6 @@ Subject length lower bound = 5
\w
\d+
Any
- \d+
- AllAny
\d++
\R
\d+
@@ -12153,7 +12019,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\S+\D \S+\d \S+\S \S+\s \S+\W \S+\w \S+. \S+\C \S+\R \S+\H \S+\h \S+\V \S+\v \S+\Z \S+\z \S+$/Bx
+/\S+\D \S+\d \S+\S \S+\s \S+\W \S+\w \S+. \S+\R \S+\H \S+\h \S+\V \S+\v \S+\Z \S+\z \S+$/Bx
------------------------------------------------------------------
Bra
\S+
@@ -12170,8 +12036,6 @@ Subject length lower bound = 5
\w
\S+
Any
- \S+
- AllAny
\S++
\R
\S+
@@ -12192,7 +12056,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\s+\D \s+\d \s+\S \s+\s \s+\W \s+\w \s+. \s+\C \s+\R \s+\H \s+\h \s+\V \s+\v \s+\Z \s+\z \s+$/Bx
+/\s+\D \s+\d \s+\S \s+\s \s+\W \s+\w \s+. \s+\R \s+\H \s+\h \s+\V \s+\v \s+\Z \s+\z \s+$/Bx
------------------------------------------------------------------
Bra
\s+
@@ -12210,8 +12074,6 @@ Subject length lower bound = 5
\s+
Any
\s+
- AllAny
- \s+
\R
\s+
\H
@@ -12231,7 +12093,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\W+\D \W+\d \W+\S \W+\s \W+\W \W+\w \W+. \W+\C \W+\R \W+\H \W+\h \W+\V \W+\v \W+\Z \W+\z \W+$/Bx
+/\W+\D \W+\d \W+\S \W+\s \W+\W \W+\w \W+. \W+\R \W+\H \W+\h \W+\V \W+\v \W+\Z \W+\z \W+$/Bx
------------------------------------------------------------------
Bra
\W+
@@ -12249,8 +12111,6 @@ Subject length lower bound = 5
\W+
Any
\W+
- AllAny
- \W+
\R
\W+
\H
@@ -12270,7 +12130,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\w+\D \w+\d \w+\S \w+\s \w+\W \w+\w \w+. \w+\C \w+\R \w+\H \w+\h \w+\V \w+\v \w+\Z \w+\z \w+$/Bx
+/\w+\D \w+\d \w+\S \w+\s \w+\W \w+\w \w+. \w+\R \w+\H \w+\h \w+\V \w+\v \w+\Z \w+\z \w+$/Bx
------------------------------------------------------------------
Bra
\w+
@@ -12287,8 +12147,6 @@ Subject length lower bound = 5
\w
\w+
Any
- \w+
- AllAny
\w++
\R
\w+
@@ -12309,46 +12167,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\C+\D \C+\d \C+\S \C+\s \C+\W \C+\w \C+. \C+\C \C+\R \C+\H \C+\h \C+\V \C+\v \C+\Z \C+\z \C+$/Bx
-------------------------------------------------------------------
- Bra
- AllAny+
- \D
- AllAny+
- \d
- AllAny+
- \S
- AllAny+
- \s
- AllAny+
- \W
- AllAny+
- \w
- AllAny+
- Any
- AllAny+
- AllAny
- AllAny+
- \R
- AllAny+
- \H
- AllAny+
- \h
- AllAny+
- \V
- AllAny+
- \v
- AllAny+
- \Z
- AllAny++
- \z
- AllAny+
- $
- Ket
- End
-------------------------------------------------------------------
-
-/\R+\D \R+\d \R+\S \R+\s \R+\W \R+\w \R+. \R+\C \R+\R \R+\H \R+\h \R+\V \R+\v \R+\Z \R+\z \R+$/Bx
+/\R+\D \R+\d \R+\S \R+\s \R+\W \R+\w \R+. \R+\R \R+\H \R+\h \R+\V \R+\v \R+\Z \R+\z \R+$/Bx
------------------------------------------------------------------
Bra
\R+
@@ -12366,8 +12185,6 @@ Subject length lower bound = 5
\R++
Any
\R+
- AllAny
- \R+
\R
\R+
\H
@@ -12387,7 +12204,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\H+\D \H+\d \H+\S \H+\s \H+\W \H+\w \H+. \H+\C \H+\R \H+\H \H+\h \H+\V \H+\v \H+\Z \H+\z \H+$/Bx
+/\H+\D \H+\d \H+\S \H+\s \H+\W \H+\w \H+. \H+\R \H+\H \H+\h \H+\V \H+\v \H+\Z \H+\z \H+$/Bx
------------------------------------------------------------------
Bra
\H+
@@ -12405,8 +12222,6 @@ Subject length lower bound = 5
\H+
Any
\H+
- AllAny
- \H+
\R
\H+
\H
@@ -12426,7 +12241,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\h+\D \h+\d \h+\S \h+\s \h+\W \h+\w \h+. \h+\C \h+\R \h+\H \h+\h \h+\V \h+\v \h+\Z \h+\z \h+$/Bx
+/\h+\D \h+\d \h+\S \h+\s \h+\W \h+\w \h+. \h+\R \h+\H \h+\h \h+\V \h+\v \h+\Z \h+\z \h+$/Bx
------------------------------------------------------------------
Bra
\h+
@@ -12443,8 +12258,6 @@ Subject length lower bound = 5
\w
\h+
Any
- \h+
- AllAny
\h++
\R
\h++
@@ -12465,7 +12278,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\V+\D \V+\d \V+\S \V+\s \V+\W \V+\w \V+. \V+\C \V+\R \V+\H \V+\h \V+\V \V+\v \V+\Z \V+\z \V+$/Bx
+/\V+\D \V+\d \V+\S \V+\s \V+\W \V+\w \V+. \V+\R \V+\H \V+\h \V+\V \V+\v \V+\Z \V+\z \V+$/Bx
------------------------------------------------------------------
Bra
\V+
@@ -12482,8 +12295,6 @@ Subject length lower bound = 5
\w
\V+
Any
- \V+
- AllAny
\V++
\R
\V+
@@ -12504,7 +12315,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\v+\D \v+\d \v+\S \v+\s \v+\W \v+\w \v+. \v+\C \v+\R \v+\H \v+\h \v+\V \v+\v \v+\Z \v+\z \v+$/Bx
+/\v+\D \v+\d \v+\S \v+\s \v+\W \v+\w \v+. \v+\R \v+\H \v+\h \v+\V \v+\v \v+\Z \v+\z \v+$/Bx
------------------------------------------------------------------
Bra
\v+
@@ -12522,8 +12333,6 @@ Subject length lower bound = 5
\v+
Any
\v+
- AllAny
- \v+
\R
\v+
\H
@@ -12543,7 +12352,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/ a+\D a+\d a+\S a+\s a+\W a+\w a+. a+\C a+\R a+\H a+\h a+\V a+\v a+\Z a+\z a+$/Bx
+/ a+\D a+\d a+\S a+\s a+\W a+\w a+. a+\R a+\H a+\h a+\V a+\v a+\Z a+\z a+$/Bx
------------------------------------------------------------------
Bra
a+
@@ -12560,8 +12369,6 @@ Subject length lower bound = 5
\w
a+
Any
- a+
- AllAny
a++
\R
a+
@@ -12582,7 +12389,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\n+\D \n+\d \n+\S \n+\s \n+\W \n+\w \n+. \n+\C \n+\R \n+\H \n+\h \n+\V \n+\v \n+\Z \n+\z \n+$/Bx
+/\n+\D \n+\d \n+\S \n+\s \n+\W \n+\w \n+. \n+\R \n+\H \n+\h \n+\V \n+\v \n+\Z \n+\z \n+$/Bx
------------------------------------------------------------------
Bra
\x0a+
@@ -12600,8 +12407,6 @@ Subject length lower bound = 5
\x0a+
Any
\x0a+
- AllAny
- \x0a+
\R
\x0a+
\H
@@ -12621,7 +12426,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\C .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bx
+/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bx
------------------------------------------------------------------
Bra
Any+
@@ -12638,8 +12443,6 @@ Subject length lower bound = 5
\w
Any+
Any
- Any+
- AllAny
Any++
\R
Any+
@@ -12660,7 +12463,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\C .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bsx
+/ .+\D .+\d .+\S .+\s .+\W .+\w .+. .+\R .+\H .+\h .+\V .+\v .+\Z .+\z .+$/Bsx
------------------------------------------------------------------
Bra
AllAny+
@@ -12678,8 +12481,6 @@ Subject length lower bound = 5
AllAny+
AllAny
AllAny+
- AllAny
- AllAny+
\R
AllAny+
\H
@@ -12699,7 +12500,7 @@ Subject length lower bound = 5
End
------------------------------------------------------------------
-/\D+$ \d+$ \S+$ \s+$ \W+$ \w+$ \C+$ \R+$ \H+$ \h+$ \V+$ \v+$ a+$ \n+$ .+$ .+$/Bmx
+/ \D+$ \d+$ \S+$ \s+$ \W+$ \w+$ \R+$ \H+$ \h+$ \V+$ \v+$ a+$ \n+$ .+$ .+$/Bmx
------------------------------------------------------------------
Bra
\D+
@@ -12714,8 +12515,6 @@ Subject length lower bound = 5
/m $
\w++
/m $
- AllAny+
- /m $
\R+
/m $
\H+
@@ -13326,10 +13125,10 @@ Failed: error 144 at offset 13: group name must start with a non-digit
Failed: error 144 at offset 14: group name must start with a non-digit
/\g'3gh'/
-Failed: error 157 at offset 7: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
+Failed: error 157 at offset 2: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
/\g<5fg>/
-Failed: error 157 at offset 7: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
+Failed: error 157 at offset 2: \g is not followed by a braced, angle-bracketed, or quoted name/number or by a plain number
/(?(<4gh>)abc)/
Failed: error 144 at offset 4: group name must start with a non-digit
@@ -13393,8 +13192,7 @@ Failed: error 144 at offset 5: group name must start with a non-digit
0: red
put it all on red
0: red
- ** Failers
-No match
+\= Expect no match
no reduction
No match
Alfred Winifred
@@ -13410,6 +13208,7 @@ Start of matched string is beyond its end - displaying from end to start.
0+ abcd
/abcd/newline=lf,firstline
+\= Expect no match
xx\nxabcd
No match
@@ -13461,10 +13260,10 @@ Failed: error 178 at offset 3: digits missing in \x{} or \o{}
Failed: error 167 at offset 3: non-hex character in \x{} (closing brace missing?)
/A\8B/
-Failed: error 115 at offset 4: reference to non-existent subpattern
+Failed: error 115 at offset 2: reference to non-existent subpattern
/A\9B/
-Failed: error 115 at offset 4: reference to non-existent subpattern
+Failed: error 115 at offset 2: reference to non-existent subpattern
# This one is here because Perl fails to match "12" for this pattern when the $
# is present.
@@ -13474,8 +13273,7 @@ Failed: error 115 at offset 4: reference to non-existent subpattern
0: abc:
12
0: 12
- *** Failers
-No match
+\= Expect no match
123
No match
xyz
@@ -13551,8 +13349,7 @@ Capturing subpattern count = 0
Subject length lower bound = 6
yesnononoyes
0: nonono
- ** Failers
-No match
+\= Expect no match
yesno
No match
@@ -13568,8 +13365,7 @@ Subject length lower bound = 5
1: abc
xyzno
0: xyzno
- ** Failers
-No match
+\= Expect no match
abcno
No match
xyzyes
@@ -13584,6 +13380,9 @@ Failed: error 179 at offset 11: syntax error in (?(VERSION condition
/(?(VERSION>=10.0.0)yes|no)/
Failed: error 179 at offset 16: syntax error in (?(VERSION condition
+/(?(VERSION=10.101)yes|no)/
+Failed: error 179 at offset 17: syntax error in (?(VERSION condition
+
/abcd/I
Capturing subpattern count = 0
First code unit = 'a'
@@ -13626,8 +13425,6 @@ Subject length lower bound = 0
/(((((a)))))/parens_nest_limit=2
Failed: error 119 at offset 3: parentheses are too deeply nested
-# Tests for pcre2_substitute()
-
/abc/replace=XYZ
123123
0: 123123
@@ -13674,27 +13471,27 @@ Failed: error 119 at offset 3: parentheses are too deeply nested
/abc/replace=a$++
123abc
-Failed: error -35: invalid replacement string
+Failed: error -35 at offset 2 in replacement: invalid replacement string
/abc/replace=a$bad
123abc
-Failed: error -49: unknown substring
+Failed: error -49 at offset 5 in replacement: unknown substring
/abc/replace=a${A234567890123456789_123456789012}z
123abc
-Failed: error -49: unknown substring
+Failed: error -49 at offset 36 in replacement: unknown substring
/abc/replace=a${A23456789012345678901234567890123}z
123abc
-Failed: error -35: invalid replacement string
+Failed: error -35 at offset 35 in replacement: invalid replacement string
/abc/replace=a${bcd
123abc
-Failed: error -35: invalid replacement string
+Failed: error -58 at offset 6 in replacement: expected closing curly bracket in replacement string
/abc/replace=a${b+d}z
123abc
-Failed: error -35: invalid replacement string
+Failed: error -58 at offset 4 in replacement: expected closing curly bracket in replacement string
/abc/replace=[10]XYZ
123abc123
@@ -13737,8 +13534,76 @@ Failed: error -34: bad option value
/(.)(.)/g,replace=$2$1
abcdefgh
4: badcfehg
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=${*MARK}
+ apple lemon blackberry
+ 3: pear orange strawberry
+ apple strudel
+ 1: pear strudel
+ fruitless
+ 0: fruitless
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/replace=${*MARK} sauce,
+ apple lemon blackberry
+ 1: pear sauce lemon blackberry
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARK>
+ apple lemon blackberry
+ 3: <pear> <orange> <strawberry>
+ apple strudel
+ 1: <pear> strudel
+ fruitless
+ 0: fruitless
+
+/(*:pear)apple/g,replace=${*MARKING}
+ apple lemon blackberry
+Failed: error -35 at offset 11 in replacement: invalid replacement string
+
+/(*:pear)apple/g,replace=${*MARK-time
+ apple lemon blackberry
+Failed: error -58 at offset 7 in replacement: expected closing curly bracket in replacement string
+
+/(*:pear)apple/g,replace=${*mark}
+ apple lemon blackberry
+Failed: error -35 at offset 8 in replacement: invalid replacement string
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=<$*MARKET>
+ apple lemon blackberry
+Failed: error -35 at offset 9 in replacement: invalid replacement string
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[22]${*MARK}
+ apple lemon blackberry
+Failed: error -48: no more memory
+ apple lemon blackberry\=substitute_overflow_length
+Failed: error -48: no more memory: 23 code units are needed
+
+/(*:pear)apple|(*:orange)lemon|(*:strawberry)blackberry/g,replace=[23]${*MARK}
+ apple lemon blackberry
+ 3: pear orange strawberry
-# End of substitute tests
+/abc/
+ 123abc123\=replace=[9]XYZ
+Failed: error -48: no more memory
+ 123abc123\=substitute_overflow_length,replace=[9]XYZ
+Failed: error -48: no more memory: 10 code units are needed
+ 123abc123\=substitute_overflow_length,replace=[6]XYZ
+Failed: error -48: no more memory: 10 code units are needed
+ 123abc123\=substitute_overflow_length,replace=[1]XYZ
+Failed: error -48: no more memory: 10 code units are needed
+ 123abc123\=substitute_overflow_length,replace=[0]XYZ
+Failed: error -48: no more memory: 10 code units are needed
+
+/a(b)c/
+ 123abc123\=replace=[9]x$1z
+Failed: error -48: no more memory
+ 123abc123\=substitute_overflow_length,replace=[9]x$1z
+Failed: error -48: no more memory: 10 code units are needed
+ 123abc123\=substitute_overflow_length,replace=[6]x$1z
+Failed: error -48: no more memory: 10 code units are needed
+ 123abc123\=substitute_overflow_length,replace=[1]x$1z
+Failed: error -48: no more memory: 10 code units are needed
+ 123abc123\=substitute_overflow_length,replace=[0]x$1z
+Failed: error -48: no more memory: 10 code units are needed
"((?=(?(?=(?(?=(?(?=()))))))))"
a
@@ -13747,6 +13612,7 @@ Failed: error -34: bad option value
2:
"(?(?=)==)(((((((((?=)))))))))"
+\= Expect no match
a
No match
@@ -13821,6 +13687,7 @@ Capturing subpattern count = 0
Options: auto_callout
First code unit at start or follows newline
Subject length lower bound = 1
+\= Expect no match
aaa
--->aaa
+0 ^ .*
@@ -13834,6 +13701,7 @@ No match
Capturing subpattern count = 0
Options: auto_callout no_dotstar_anchor
Subject length lower bound = 1
+\= Expect no match
aaa
--->aaa
+0 ^ .*
@@ -13864,7 +13732,7 @@ Subject length lower bound = 1
/(*NO_DOTSTAR_ANCHOR)(?s).*\d/info
Capturing subpattern count = 0
Compile options: <none>
-Overall options: dotall no_dotstar_anchor
+Overall options: no_dotstar_anchor
Subject length lower bound = 1
'^(?:(a)|b)(?(1)A|B)'
@@ -13928,8 +13796,7 @@ Failed: error 109 at offset 7: quantifier does not follow a repeatable item
0: 00765
456
0: 456
- ** Failers
-No match
+\= Expect no match
356
No match
@@ -14193,8 +14060,7 @@ Callout (5): 'x\x00z'
/(?(?!)a|b)/
bbb
0: b
- ** Failers
-No match
+\= Expect no match
aaa
No match
@@ -14293,10 +14159,8 @@ Capturing subpattern count = 2
May match empty string
Subject length lower bound = 0
-/ab\Cde/never_backslash_c
-Failed: error 183 at offset 3: using \C is disabled by the application
-
/abc/
+\= Expect no match
\[9x!xxx(]{9999}
No match
@@ -14319,7 +14183,7 @@ No match
0:
/((((((((x))))))))\81/
-Failed: error 115 at offset 20: reference to non-existent subpattern
+Failed: error 115 at offset 19: reference to non-existent subpattern
xx1
/((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))\80/
@@ -14342,10 +14206,10 @@ Matched, but too many substrings
14: x
/\80/
-Failed: error 115 at offset 3: reference to non-existent subpattern
+Failed: error 115 at offset 2: reference to non-existent subpattern
/A\8B\9C/
-Failed: error 115 at offset 7: reference to non-existent subpattern
+Failed: error 115 at offset 2: reference to non-existent subpattern
A8B9C
/(?x:((?'a')) # comment (with parentheses) and | vertical
@@ -14428,10 +14292,10 @@ Subject length lower bound = 1
------------------------------------------------------------------
/(\9*+(?2);\3++()2|)++{/
-Failed: error 115 at offset 22: reference to non-existent subpattern
+Failed: error 115 at offset 2: reference to non-existent subpattern
/\V\x85\9*+((?2)\3++()2)*:2/
-Failed: error 115 at offset 26: reference to non-existent subpattern
+Failed: error 115 at offset 7: reference to non-existent subpattern
/(((?(R)){0,2}) (?'x'((?'R')((?'R')))))/dupnames
@@ -14470,4 +14334,828 @@ Failed: error 161 at offset 32: number is too big
End
------------------------------------------------------------------
+/[[:>:]](?<)/
+Failed: error 124 at offset 10: letter or underscore expected after (?< or (?'
+
+/((?x)(*:0))#(?'/
+Failed: error 124 at offset 15: letter or underscore expected after (?< or (?'
+
+/(?C$[$)(?<]/
+Failed: error 124 at offset 10: letter or underscore expected after (?< or (?'
+
+/(?C$)$)(?<]/
+Failed: error 124 at offset 10: letter or underscore expected after (?< or (?'
+
+/(?(R))*+/B
+------------------------------------------------------------------
+ Bra
+ Braposzero
+ SBraPos
+ SCond
+ Cond recurse any
+ Ket
+ KetRpos
+ Ket
+ End
+------------------------------------------------------------------
+ abcd
+ 0:
+
+/((?x)(?#))#(?'/
+Failed: error 124 at offset 14: letter or underscore expected after (?< or (?'
+
+/((?x)(?#))#(?'abc')/I
+Capturing subpattern count = 2
+Named capturing subpatterns:
+ abc 2
+First code unit = '#'
+Subject length lower bound = 1
+
+/[[:\\](?<[::]/
+Failed: error 124 at offset 9: letter or underscore expected after (?< or (?'
+
+/[[:\\](?'abc')[a:]/I
+Capturing subpattern count = 1
+Named capturing subpatterns:
+ abc 1
+Starting code units: : [ \
+Subject length lower bound = 2
+
+"[[[.\xe8Nq\xffq\xff\xe0\x2|||::Nq\xffq\xff\xe0\x6\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[:::::::::::::::::[[.\xe8Nq\xffq\xff\xe0\x2|||::Nq\xffq\xff\xe0\x6\x2|||::[[[:[::::::[[[[[::::::::[:[[[:[:::[[[[[[[[[[[[[[:::E[[[:[:[[:[:::[[:::E[[[:[:[[:'[:::::E[[[:[::::::[[[:[[[[[[[::E[[[:[::::::[[[:[[[[[[[[:[[::[::::[[:::::::[[:[[[[[[[:[[::[:[[:[~"
+Failed: error 106 at offset 353: missing terminating ] for character class
+
+/()(?(R)0)*+/B
+------------------------------------------------------------------
+ Bra
+ CBra 1
+ Ket
+ Braposzero
+ SBraPos
+ SCond
+ Cond recurse any
+ 0
+ Ket
+ KetRpos
+ Ket
+ End
+------------------------------------------------------------------
+
+/(?R-:(?</
+Failed: error 129 at offset 3: (?R or (?[+-]digits must be followed by )
+
+/(?(?C{\Q})(?!(?'/
+Failed: error 124 at offset 16: letter or underscore expected after (?< or (?'
+
+/(?(?C{\Q})(?!(?'abc')))/I
+Capturing subpattern count = 1
+Named capturing subpatterns:
+ abc 1
+May match empty string
+Subject length lower bound = 0
+
+/(?1){3918}(((((0(\k'R'))))(?J)(?'R'(?'R'\3){99})))/I
+Capturing subpattern count = 8
+Max back reference = 8
+Named capturing subpatterns:
+ R 7
+ R 8
+Duplicate name status changes
+Last code unit = '0'
+Subject length lower bound = 65535
+
+/(?|(aaa)|(b))\g{1}/I
+Capturing subpattern count = 1
+Max back reference = 1
+Starting code units: a b
+Subject length lower bound = 0
+
+/(?|(aaa)|(b))(?1)/I
+Capturing subpattern count = 1
+Starting code units: a b
+Subject length lower bound = 4
+
+/(?|(aaa)|(b))/I
+Capturing subpattern count = 1
+Starting code units: a b
+Subject length lower bound = 1
+
+/(?|(?'a'aaa)|(?'a'b))\k'a'/I
+Capturing subpattern count = 1
+Max back reference = 1
+Named capturing subpatterns:
+ a 1
+Starting code units: a b
+Subject length lower bound = 0
+
+/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/I,dupnames
+Capturing subpattern count = 2
+Max back reference = 2
+Named capturing subpatterns:
+ a 1
+ a 2
+Options: dupnames
+Starting code units: a b
+Last code unit = 'c'
+Subject length lower bound = 0
+
+/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
+
+/\x0{ab}/
+ \0{ab}
+ 0: \x00{ab}
+
+/^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
+ ababababbbabZXXXX
+ 0: ababababbbabZ
+ 1: ab
+ 2: b
+
+/.*?a(*PRUNE)b/
+ aab
+ 0: ab
+
+/.*?a(*PRUNE)b/s
+ aab
+ 0: ab
+
+/^a(*PRUNE)b/s
+\= Expect no match
+ aab
+No match
+
+/.*?a(*SKIP)b/
+ aab
+ 0: ab
+
+/(?(8000000000/
+Failed: error 161 at offset 13: number is too big
+
+/((?(R8000000000)))/
+Failed: error 161 at offset 16: number is too big
+
+/0(?0)|(1)(*THEN)(*SKIP:0)(*FAIL)/
+\= Expect no match
+ 01
+No match
+
+/(?(1)()\983040\2)/
+Failed: error 115 at offset 13: reference to non-existent subpattern
+
+/(*LIMIT_MATCH=)abc/
+Failed: error 160 at offset 14: (*VERB) not recognized or malformed
+
+/(*CRLF)(*LIMIT_MATCH=)abc/
+Failed: error 160 at offset 21: (*VERB) not recognized or malformed
+
+/(?:ab)?(?:ab)(?:ab)/
+ abab
+ 0: abab
+ ababab
+ 0: ababab
+\= Expect no match
+ aba
+No match
+
+/((*MARK:A))++a(*SKIP:B)b/
+\= Expect no match
+ aacb
+No match
+
+/(*MARK:a\zb)z/alt_verbnames
+Failed: error 140 at offset 9: invalid escape sequence in (*VERB) name
+
+/(*:ab\t(d\)c)xxx/
+Failed: error 122 at offset 12: unmatched closing parenthesis
+
+/(*:ab\t(d\)c)xxx/alt_verbnames,mark
+ cxxxz
+ 0: xxx
+MK: ab\x09(d)c
+
+/(*:A\Qxx)x\EB)x/alt_verbnames,mark
+ x
+ 0: x
+MK: Axx)xB
+
+/(*:A\ExxxB)x/alt_verbnames,mark
+ x
+ 0: x
+MK: AxxxB
+
+/(*: A \ and #comment
+ \ B)x/x,alt_verbnames,mark
+ x
+ 0: x
+MK: A and B
+
+/(*:A
+B)x/alt_verbnames,mark
+ x
+ 0: x
+MK: A\x0aB
+
+/(*:abc\Qpqr)/alt_verbnames
+Failed: error 160 at offset 12: (*VERB) not recognized or malformed
+
+/abc/use_offset_limit
+ 1234abcde\=offset_limit=100
+ 0: abc
+ 1234abcde\=offset_limit=9
+ 0: abc
+ 1234abcde\=offset_limit=4
+ 0: abc
+ 1234abcde\=offset_limit=4,offset=4
+ 0: abc
+\= Expect no match
+ 1234abcde\=offset_limit=4,offset=5
+No match
+ 1234abcde\=offset_limit=3
+No match
+
+/(?<=abc)/use_offset_limit
+ 1234abc\=offset_limit=7
+ 0:
+\= Expect no match
+ 1234abc\=offset_limit=6
+No match
+
+/A/g,replace=-,use_offset_limit
+ XAXAXAXAXA\=offset_limit=4
+ 2: X-X-XAXAXA
+
+/abc/
+\= Expect error
+ 1234abcde\=offset_limit=4
+Failed: error -56: offset limit set without PCRE2_USE_OFFSET_LIMIT
+
+/^\w/m,use_offset_limit
+ \n..\naa\=offset_limit=3
+No match
+ \n..\naa\=offset_limit=4
+ 0: a
+
+/abcd/null_context
+ abcd\=null_context
+ 0: abcd
+\= Expect error
+ abcd\=null_context,find_limits
+** Not allowed together: find_limits null_context
+ abcd\=allusedtext,startchar
+** Not allowed together: allusedtext startchar
+
+/abcd/replace=w\rx\x82y\o{333}z(\Q12\$34$$\x34\E5$$),substitute_extended
+ abcd
+ 1: w\x0dx\x82y\xdbz(12\$34$$\x345$)
+
+/a(bc)(DE)/replace=a\u$1\U$1\E$1\l$2\L$2\Eab\Uab\LYZ\EDone,substitute_extended
+ abcDE
+ 1: aBcBCbcdEdeabAByzDone
+
+/abcd/replace=xy\kz,substitute_extended
+ abcd
+Failed: error -57 at offset 4 in replacement: bad escape sequence in replacement string
+
+/a(?:(b)|(c))/substitute_extended,replace=X${1:+1:-1}X${2:+2:-2}
+ ab
+ 1: X1X-2
+ ac
+ 1: X-1X2
+ ab\=replace=${1:+$1\:$1:$2}
+ 1: b:b
+ ac\=replace=${1:+$1\:$1:$2}
+ 1: c
+
+/a(?:(b)|(c))/substitute_extended,replace=X${1:-1:-1}X${2:-2:-2}
+ ab
+ 1: XbX2:-2
+ ac
+ 1: X1:-1Xc
+
+/(a)/substitute_extended,replace=>${1:+\Q$1:{}$$\E+\U$1}<
+ a
+ 1: >$1:{}$$+A<
+
+/X(b)Y/substitute_extended
+ XbY\=replace=x${1:+$1\U$1}y
+ 1: xbBY
+ XbY\=replace=\Ux${1:+$1$1}y
+ 1: XBBY
+
+/a/substitute_extended,replace=${*MARK:+a:b}
+ a
+Failed: error -58 at offset 7 in replacement: expected closing curly bracket in replacement string
+
+/(abcd)/replace=${1:+xy\kz},substitute_extended
+ abcd
+Failed: error -57 at offset 8 in replacement: bad escape sequence in replacement string
+
+/(abcd)/
+ abcd\=replace=${1:+xy\kz},substitute_extended
+Failed: error -57 at offset 8 in replacement: bad escape sequence in replacement string
+
+/abcd/substitute_extended,replace=>$1<
+ abcd
+Failed: error -49 at offset 3 in replacement: unknown substring
+
+/abcd/substitute_extended,replace=>xxx${xyz}<<<
+ abcd
+Failed: error -49 at offset 10 in replacement: unknown substring
+
+/(?J)(?:(?<A>a)|(?<A>b))/replace=<$A>
+ [a]
+ 1: [<a>]
+ [b]
+ 1: [<b>]
+\= Expect error
+ (a)\=ovector=1
+Failed: error -54 at offset 3 in replacement: requested value is not available
+
+/(a)|(b)/replace=<$1>
+\= Expect error
+ b
+Failed: error -55 at offset 3 in replacement: requested value is not set
+
+/(aa)(BB)/substitute_extended,replace=\U$1\L$2\E$1..\U$1\l$2$1
+ aaBB
+ 1: AAbbaa..AAbBaa
+
+/^(o(\1{72}{\"{\\{00000059079}\d*){74}}){19}/I
+Capturing subpattern count = 2
+Max back reference = 1
+Compile options: <none>
+Overall options: anchored
+Last code unit = '}'
+Subject length lower bound = 65535
+
+/((p(?'K/
+Failed: error 142 at offset 7: syntax error in subpattern name (missing terminator)
+
+/((p(?'K/no_auto_capture
+Failed: error 142 at offset 7: syntax error in subpattern name (missing terminator)
+
+/abc/replace=A$3123456789Z
+ abc
+Failed: error -49 at offset 3 in replacement: unknown substring
+
+/(?<!a{65535}a{5})x/I
+Failed: error 187 at offset 16: lookbehind assertion is too long
+
+/(?<!a{65535})x/I
+Capturing subpattern count = 0
+Max lookbehind = 65535
+First code unit = 'x'
+Subject length lower bound = 1
+
+/(?=a\K)/replace=z
+ BaCaD
+Failed: error -60: match with end before start is not supported
+
+/(?'abcdefghijklmnopqrstuvwxyzABCDEFG'toolong)/
+Failed: error 148 at offset 36: subpattern name is too long (maximum 32 characters)
+
+/(?'abcdefghijklmnopqrstuvwxyzABCDEF'justright)/
+
+# These two use zero-termination
+/abcd/max_pattern_length=3
+Failed: error 188 at offset 0: pattern string is longer than the limit set by the application
+
+/abc/max_pattern_length=3
+
+# These two, being hex, pass the length
+/abcdefab/hex,max_pattern_length=3
+Failed: error 188 at offset 0: pattern string is longer than the limit set by the application
+
+/abcdef/hex,max_pattern_length=3
+
+# These two patterns used to take a long time to compile
+
+"(.*)
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))"xI
+Capturing subpattern count = 12
+May match empty string
+Options: extended
+First code unit at start or follows newline
+Subject length lower bound = 0
+
+"(?<=a()
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+a)"xI
+Capturing subpattern count = 12
+Max lookbehind = 2
+May match empty string
+Options: extended
+Subject length lower bound = 0
+
+# When (?| is used and groups of the same number may be different,
+# we have to rely on a count to catch overly complicated patterns.
+
+"(?|()|())(.*)
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))"xI
+Failed: error 186 at offset 148: regular expression is too complicated
+
+"(?|()|())(?<=a()
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+((?-2)(?-2))((?-2)(?-2))((?-2)(?-2))
+a)"xI
+Failed: error 186 at offset 154: regular expression is too complicated
+
+# Test the use of malloc for caching group information when there are more
+# groups than fit into the on-stack workspace.
+
+/\[()]{1024}/I,expand
+Expanded: ()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()
+Capturing subpattern count = 1024
+May match empty string
+Subject length lower bound = 0
+
+# Test minlength capped at 65535
+
+/(A{65000})\1{65000}/I
+Capturing subpattern count = 1
+Max back reference = 1
+First code unit = 'A'
+Last code unit = 'A'
+Subject length lower bound = 65535
+
+# Test group scans when numbers are not unique
+
+/(?|()+|(a)+)/BI
+------------------------------------------------------------------
+ Bra
+ Bra
+ SCBra 1
+ KetRmax
+ Alt
+ CBra 1
+ a
+ KetRmax
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+
+/(?|(a)+|()+)/BI
+------------------------------------------------------------------
+ Bra
+ Bra
+ CBra 1
+ a
+ KetRmax
+ Alt
+ SCBra 1
+ KetRmax
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+
+/(?|()|(a))/BI
+------------------------------------------------------------------
+ Bra
+ Bra
+ CBra 1
+ Ket
+ Alt
+ CBra 1
+ a
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+
+/(?|(a)|())/BI
+------------------------------------------------------------------
+ Bra
+ Bra
+ CBra 1
+ a
+ Ket
+ Alt
+ CBra 1
+ Ket
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+May match empty string
+Subject length lower bound = 0
+
+# Test CRLF handling in empty string substitutions
+
+/^$/gm,newline=anycrlf,replace=-
+ X\r\n\r\nY
+ 1: X\x0d\x0a-\x0d\x0aY
+
+/^$/gm,newline=crlf,replace=-
+ X\r\n\r\nY
+ 1: X\x0d\x0a-\x0d\x0aY
+
+/^$/gm,newline=any,replace=-
+ X\r\n\r\nY
+ 1: X\x0d\x0a-\x0d\x0aY
+
+"(*ANYCRLF)(?m)^(.*[^0-9\r\n].*|)$"g,replace=NaN
+ 15\r\nfoo\r\n20\r\nbar\r\nbaz\r\n\r\n20
+ 4: 15\x0d\x0aNaN\x0d\x0a20\x0d\x0aNaN\x0d\x0aNaN\x0d\x0aNaN\x0d\x0a20
+
+/a[[:punct:]b]/bincode
+------------------------------------------------------------------
+ Bra
+ a
+ [!-/:-@[-`b{-~]
+ Ket
+ End
+------------------------------------------------------------------
+
+/a[b[:punct:]]/bincode
+------------------------------------------------------------------
+ Bra
+ a
+ [!-/:-@[-`b{-~]
+ Ket
+ End
+------------------------------------------------------------------
+
+/L(?#(|++<!(2)?/B
+------------------------------------------------------------------
+ Bra
+ L?+
+ Ket
+ End
+------------------------------------------------------------------
+
+/L(?#(|++<!(2)?/B,no_auto_possess
+------------------------------------------------------------------
+ Bra
+ L?
+ Ket
+ End
+------------------------------------------------------------------
+
+/L(?#(|++<!(2)?/B,auto_callout
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 14
+ L?+
+ Callout 255 14 0
+ Ket
+ End
+------------------------------------------------------------------
+
+/L(?#(|++<!(2)?/B,no_auto_possess,auto_callout
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 14
+ L?
+ Callout 255 14 0
+ Ket
+ End
+------------------------------------------------------------------
+
+/(A*)\E+/B,auto_callout
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 7
+ SCBra 1
+ Callout 255 1 2
+ A*
+ Callout 255 3 0
+ KetRmax
+ Callout 255 7 0
+ Ket
+ End
+------------------------------------------------------------------
+
+/()\Q\E*]/B,auto_callout
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 7
+ Brazero
+ SCBra 1
+ Callout 255 1 0
+ KetRmax
+ Callout 255 7 1
+ ]
+ Callout 255 8 0
+ Ket
+ End
+------------------------------------------------------------------
+ a[bc]d
+--->a[bc]d
+ +0 ^ ()\Q\E*
+ +1 ^ )
+ +7 ^ ]
+ +8 ^^
+ 0: ]
+ 1:
+
+/\x8a+f|;T?(*:;.'?`(\xeap ){![^()!y*''C*(?';]{1;(\x08)/B,alt_verbnames,dupnames,extended
+------------------------------------------------------------------
+ Bra
+ \x{8a}++
+ f
+ Alt
+ ;
+ T?
+ *MARK ;.'?`(\x{ea}p
+ {!
+ [\x00- "-&+-:<->@-BD-xz-\xff] (neg)
+ {1;
+ CBra 1
+ \x08
+ Ket
+ Ket
+ End
+------------------------------------------------------------------
+
+# Tests for NULL characters in comments and verb "names" and callouts
+
+# /A#B\x00C\x0aZ/
+/41 23 42 00 43 0a 5a/Bx,hex
+------------------------------------------------------------------
+ Bra
+ AZ
+ Ket
+ End
+------------------------------------------------------------------
+
+# /A+#B\x00C\x0a+/
+/41 2b 23 42 00 43 0a 2b/Bx,hex
+------------------------------------------------------------------
+ Bra
+ A++
+ Ket
+ End
+------------------------------------------------------------------
+
+# /A(*:B\x00W#X\00Y\x0aC)Z/
+/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex,alt_verbnames
+------------------------------------------------------------------
+ Bra
+ A
+ *MARK B\x{0}WC
+ Z
+ Ket
+ End
+------------------------------------------------------------------
+
+# /A(*:B\x00W#X\00Y\x0aC)Z/
+/41 28 2a 3a 42 00 57 23 58 00 59 0a 43 29 5a/Bx,hex
+------------------------------------------------------------------
+ Bra
+ A
+ *MARK B\x{0}W#X\x{0}Y\x{a}C
+ Z
+ Ket
+ End
+------------------------------------------------------------------
+
+# /A(?C{X\x00Y})B/
+/41 28 3f 43 7b 58 00 59 7d 29 42/B,hex
+------------------------------------------------------------------
+ Bra
+ A
+ CalloutStr {X\x{0}Y} 5 10 1
+ B
+ Ket
+ End
+------------------------------------------------------------------
+
+# /A(?#X\x00Y)B/
+/41 28 3f 23 7b 00 7d 29 42/B,hex
+------------------------------------------------------------------
+ Bra
+ AB
+ Ket
+ End
+------------------------------------------------------------------
+
+# Tests for leading comment in extended patterns
+
+/ (?-x):?/extended
+
+/ (?-x):?/extended
+
+/0b 28 3f 2d 78 29 3a/hex,extended
+
+/#comment
+(?-x):?/extended
+
+/(8(*:6^\x09x\xa6l\)6!|\xd0:[^:|)\x09d\Z\d{85*m(?'(?<1!)*\W[*\xff]!!h\w]*\xbe;/alt_bsux,alt_verbnames,allow_empty_class,dollar_endonly,extended,multiline,never_utf,no_dotstar_anchor,no_start_optimize
+Failed: error 124 at offset 49: letter or underscore expected after (?< or (?'
+
+/a|(b)c/replace=>$1<,substitute_unset_empty
+ cat
+ 1: c><t
+ xbcom
+ 1: x>b<om
+
+/a|(b)c/
+ cat\=replace=>$1<
+Failed: error -55 at offset 3 in replacement: requested value is not set
+ cat\=replace=>$1<,substitute_unset_empty
+ 1: c><t
+ xbcom\=replace=>$1<,substitute_unset_empty
+ 1: x>b<om
+
+/a|(b)c/substitute_extended
+ cat\=replace=>${2:-xx}<
+Failed: error -49 at offset 9 in replacement: unknown substring
+ cat\=replace=>${2:-xx}<,substitute_unknown_unset
+ 1: c>xx<t
+ cat\=replace=>${X:-xx}<,substitute_unknown_unset
+ 1: c>xx<t
+
+/a|(?'X'b)c/replace=>$X<,substitute_unset_empty
+ cat
+ 1: c><t
+ xbcom
+ 1: x>b<om
+
+/a|(?'X'b)c/replace=>$Y<,substitute_unset_empty
+ cat
+Failed: error -49 at offset 3 in replacement: unknown substring
+ cat\=substitute_unknown_unset
+ 1: c><t
+ cat\=substitute_unknown_unset,-substitute_unset_empty
+Failed: error -55 at offset 3 in replacement: requested value is not set
+
+/a|(b)c/replace=>$2<,substitute_unset_empty
+ cat
+Failed: error -49 at offset 3 in replacement: unknown substring
+ cat\=substitute_unknown_unset
+ 1: c><t
+ cat\=substitute_unknown_unset,-substitute_unset_empty
+Failed: error -55 at offset 3 in replacement: requested value is not set
+
+/()()()/use_offset_limit
+ \=ovector=11000000000
+** Invalid value in 'ovector=11000000000'
+ \=callout_fail=11000000000
+** Invalid value in 'callout_fail=11000000000'
+ \=callout_fail=1:11000000000
+** Invalid value in 'callout_fail=1:11000000000'
+ \=callout_data=11000000000
+** Invalid value in 'callout_data=11000000000'
+ \=callout_data=-11000000000
+** Invalid value in 'callout_data=-11000000000'
+ \=offset_limit=1100000000000000000000
+** Invalid value in 'offset_limit=1100000000000000000000'
+ \=copy=11000000000
+** Invalid value in 'copy=11000000000'
+
+/(*MARK:A\x00b)/mark
+ abc
+ 0:
+MK: A\x00b
+
+/(*MARK:A\x00b)/mark,alt_verbnames
+ abc
+ 0:
+MK: A\x00b
+
+# /(*MARK:A\x00b)/
+/28 2a 4d 41 52 4b 3a 41 00 62 29/mark,hex
+ abc
+ 0:
+MK: A\x00b
+
+# /(*MARK:A\x00b)/
+/28 2a 4d 41 52 4b 3a 41 00 62 29/mark,hex,alt_verbnames
+ abc
+ 0:
+MK: A\x00b
+
# End of testinput2
diff --git a/testdata/testoutput20 b/testdata/testoutput20
new file mode 100644
index 0000000..e923080
--- /dev/null
+++ b/testdata/testoutput20
@@ -0,0 +1,101 @@
+# This set of tests exercises the serialization/deserialization functions in
+# the library. It does not use UTF or JIT.
+
+#forbid_utf
+
+# Compile several patterns, push them onto the stack, and then write them
+# all to a file.
+
+#pattern push
+
+/(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
+ (?(DEFINE)
+ (?<NAME_PAT>[a-z]+)
+ (?<ADDRESS_PAT>\d+)
+ )/x
+/^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
+
+#save testsaved1
+
+# Do it again for some more patterns.
+
+/(*MARK:A)(*SKIP:B)(C|X)/mark
+** Ignored when compiled pattern is stacked with 'push': mark
+/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
+
+#save testsaved2
+#pattern -push
+
+# Reload the patterns, then pop them one by one and check them.
+
+#load testsaved1
+#load testsaved2
+
+#pop info
+Capturing subpattern count = 2
+Max back reference = 2
+Named capturing subpatterns:
+ n 1
+ n 2
+Options: dupnames
+Starting code units: b f
+Subject length lower bound = 6
+ foofoo
+ 0: foofoo
+ 1: foo
+ barbar
+ 0: barbar
+ 1: <unset>
+ 2: bar
+
+#pop mark
+ C
+ 0: C
+ 1: C
+MK: A
+\= Expect no match
+ D
+No match, mark = A
+
+#pop
+ AmanaplanacanalPanama
+ 0: AmanaplanacanalPanama
+ 1: <unset>
+ 2: <unset>
+ 3: AmanaplanacanalPanama
+ 4: A
+
+#pop info
+Capturing subpattern count = 4
+Named capturing subpatterns:
+ ADDR 2
+ ADDRESS_PAT 4
+ NAME 1
+ NAME_PAT 3
+Options: extended
+Subject length lower bound = 3
+ metcalfe 33
+ 0: metcalfe 33
+ 1: metcalfe
+ 2: 33
+
+# Check for an error when different tables are used.
+
+/abc/push,tables=1
+/xyz/push,tables=2
+#save testsaved1
+Serialization failed: error -30: patterns do not all use the same character tables
+
+#pop
+ xyz
+ 0: xyz
+
+#pop
+ abc
+ 0: abc
+
+#pop should give an error
+** Can't pop off an empty stack
+ pqr
+
+# End of testinput20
diff --git a/testdata/testoutput21 b/testdata/testoutput21
new file mode 100644
index 0000000..6bf3f60
--- /dev/null
+++ b/testdata/testoutput21
@@ -0,0 +1,94 @@
+# These are tests of \C that do not involve UTF. They are not run when \C is
+# disabled by compiling with --enable-never-backslash-C.
+
+/\C+\D \C+\d \C+\S \C+\s \C+\W \C+\w \C+. \C+\R \C+\H \C+\h \C+\V \C+\v \C+\Z \C+\z \C+$/Bx
+------------------------------------------------------------------
+ Bra
+ AllAny+
+ \D
+ AllAny+
+ \d
+ AllAny+
+ \S
+ AllAny+
+ \s
+ AllAny+
+ \W
+ AllAny+
+ \w
+ AllAny+
+ Any
+ AllAny+
+ \R
+ AllAny+
+ \H
+ AllAny+
+ \h
+ AllAny+
+ \V
+ AllAny+
+ \v
+ AllAny+
+ \Z
+ AllAny++
+ \z
+ AllAny+
+ $
+ Ket
+ End
+------------------------------------------------------------------
+
+/\D+\C \d+\C \S+\C \s+\C \W+\C \w+\C .+\C \R+\C \H+\C \h+\C \V+\C \v+\C a+\C \n+\C \C+\C/Bx
+------------------------------------------------------------------
+ Bra
+ \D+
+ AllAny
+ \d+
+ AllAny
+ \S+
+ AllAny
+ \s+
+ AllAny
+ \W+
+ AllAny
+ \w+
+ AllAny
+ Any+
+ AllAny
+ \R+
+ AllAny
+ \H+
+ AllAny
+ \h+
+ AllAny
+ \V+
+ AllAny
+ \v+
+ AllAny
+ a+
+ AllAny
+ \x0a+
+ AllAny
+ AllAny+
+ AllAny
+ Ket
+ End
+------------------------------------------------------------------
+
+/ab\Cde/never_backslash_c
+Failed: error 183 at offset 3: using \C is disabled by the application
+
+/ab\Cde/info
+Capturing subpattern count = 0
+Contains \C
+First code unit = 'a'
+Last code unit = 'e'
+Subject length lower bound = 5
+ abXde
+ 0: abXde
+
+/(?<=ab\Cde)X/
+ abZdeX
+ 0: X
+
+# End of testinput21
diff --git a/testdata/testoutput22-16 b/testdata/testoutput22-16
new file mode 100644
index 0000000..ca1fd76
--- /dev/null
+++ b/testdata/testoutput22-16
@@ -0,0 +1,167 @@
+# Tests of \C when Unicode support is available. Note that \C is not supported
+# for DFA matching in UTF mode, so this test is not run with -dfa. The output
+# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match
+# in some widths and not in others.
+
+/ab\Cde/utf,info
+Capturing subpattern count = 0
+Contains \C
+Options: utf
+First code unit = 'a'
+Last code unit = 'e'
+Subject length lower bound = 0
+ abXde
+ 0: abXde
+
+# This should produce an error diagnostic (\C in UTF lookbehind)
+
+/(?<=ab\Cde)X/utf
+Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion
+
+# Autopossessification tests
+
+/\C+\X \X+\C/Bx
+------------------------------------------------------------------
+ Bra
+ AllAny+
+ extuni
+ extuni+
+ AllAny
+ Ket
+ End
+------------------------------------------------------------------
+
+/\C+\X \X+\C/Bx,utf
+------------------------------------------------------------------
+ Bra
+ Anybyte+
+ extuni
+ extuni+
+ Anybyte
+ Ket
+ End
+------------------------------------------------------------------
+
+/\C\X*TӅ;
+{0,6}\v+ F
+/utf
+\= Expect no match
+ Ӆ\x0a
+No match
+
+/\C(\W?ſ)'?{{/utf
+\= Expect no match
+ \\C(\\W?ſ)'?{{
+No match
+
+/X(\C{3})/utf
+ X\x{1234}
+No match
+ X\x{11234}Y
+ 0: X\x{11234}Y
+ 1: \x{11234}Y
+ X\x{11234}YZ
+ 0: X\x{11234}Y
+ 1: \x{11234}Y
+
+/X(\C{4})/utf
+ X\x{1234}YZ
+No match
+ X\x{11234}YZ
+ 0: X\x{11234}YZ
+ 1: \x{11234}YZ
+ X\x{11234}YZW
+ 0: X\x{11234}YZ
+ 1: \x{11234}YZ
+
+/X\C*/utf
+ XYZabcdce
+ 0: XYZabcdce
+
+/X\C*?/utf
+ XYZabcde
+ 0: X
+
+/X\C{3,5}/utf
+ Xabcdefg
+ 0: Xabcde
+ X\x{1234}
+No match
+ X\x{1234}YZ
+ 0: X\x{1234}YZ
+ X\x{1234}\x{512}
+No match
+ X\x{1234}\x{512}YZ
+ 0: X\x{1234}\x{512}YZ
+ X\x{11234}Y
+ 0: X\x{11234}Y
+ X\x{11234}YZ
+ 0: X\x{11234}YZ
+ X\x{11234}\x{512}
+ 0: X\x{11234}\x{512}
+ X\x{11234}\x{512}YZ
+ 0: X\x{11234}\x{512}YZ
+ X\x{11234}\x{512}\x{11234}Z
+ 0: X\x{11234}\x{512}\x{11234}
+
+/X\C{3,5}?/utf
+ Xabcdefg
+ 0: Xabc
+ X\x{1234}
+No match
+ X\x{1234}YZ
+ 0: X\x{1234}YZ
+ X\x{1234}\x{512}
+No match
+ X\x{11234}Y
+ 0: X\x{11234}Y
+ X\x{11234}YZ
+ 0: X\x{11234}Y
+ X\x{11234}\x{512}YZ
+ 0: X\x{11234}\x{512}
+ X\x{11234}
+No match
+
+/a\Cb/utf
+ aXb
+ 0: aXb
+ a\nb
+ 0: a\x{0a}b
+ a\x{100}b
+ 0: a\x{100}b
+
+/a\C\Cb/utf
+ a\x{100}b
+No match
+ a\x{12257}b
+ 0: a\x{12257}b
+ a\x{12257}\x{11234}b
+No match
+
+/ab\Cde/utf
+ abXde
+ 0: abXde
+
+# This one is here not because it's different to Perl, but because the way
+# the captured single code unit is displayed. (In Perl it becomes a character,
+# and you can't tell the difference.)
+
+/X(\C)(.*)/utf
+ X\x{1234}
+ 0: X\x{1234}
+ 1: \x{1234}
+ 2:
+ X\nabc
+ 0: X\x{0a}abc
+ 1: \x{0a}
+ 2: abc
+
+# This one is here because Perl gives out a grumbly error message (quite
+# correctly, but that messes up comparisons).
+
+/a\Cb/utf
+\= Expect no match in 8-bit mode
+ a\x{100}b
+ 0: a\x{100}b
+
+# End of testinput22
diff --git a/testdata/testoutput22-32 b/testdata/testoutput22-32
new file mode 100644
index 0000000..91d0b05
--- /dev/null
+++ b/testdata/testoutput22-32
@@ -0,0 +1,165 @@
+# Tests of \C when Unicode support is available. Note that \C is not supported
+# for DFA matching in UTF mode, so this test is not run with -dfa. The output
+# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match
+# in some widths and not in others.
+
+/ab\Cde/utf,info
+Capturing subpattern count = 0
+Contains \C
+Options: utf
+First code unit = 'a'
+Last code unit = 'e'
+Subject length lower bound = 0
+ abXde
+ 0: abXde
+
+# This should produce an error diagnostic (\C in UTF lookbehind)
+
+/(?<=ab\Cde)X/utf
+Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion
+
+# Autopossessification tests
+
+/\C+\X \X+\C/Bx
+------------------------------------------------------------------
+ Bra
+ AllAny+
+ extuni
+ extuni+
+ AllAny
+ Ket
+ End
+------------------------------------------------------------------
+
+/\C+\X \X+\C/Bx,utf
+------------------------------------------------------------------
+ Bra
+ Anybyte+
+ extuni
+ extuni+
+ Anybyte
+ Ket
+ End
+------------------------------------------------------------------
+
+/\C\X*TӅ;
+{0,6}\v+ F
+/utf
+\= Expect no match
+ Ӆ\x0a
+No match
+
+/\C(\W?ſ)'?{{/utf
+\= Expect no match
+ \\C(\\W?ſ)'?{{
+No match
+
+/X(\C{3})/utf
+ X\x{1234}
+No match
+ X\x{11234}Y
+No match
+ X\x{11234}YZ
+ 0: X\x{11234}YZ
+ 1: \x{11234}YZ
+
+/X(\C{4})/utf
+ X\x{1234}YZ
+No match
+ X\x{11234}YZ
+No match
+ X\x{11234}YZW
+ 0: X\x{11234}YZW
+ 1: \x{11234}YZW
+
+/X\C*/utf
+ XYZabcdce
+ 0: XYZabcdce
+
+/X\C*?/utf
+ XYZabcde
+ 0: X
+
+/X\C{3,5}/utf
+ Xabcdefg
+ 0: Xabcde
+ X\x{1234}
+No match
+ X\x{1234}YZ
+ 0: X\x{1234}YZ
+ X\x{1234}\x{512}
+No match
+ X\x{1234}\x{512}YZ
+ 0: X\x{1234}\x{512}YZ
+ X\x{11234}Y
+No match
+ X\x{11234}YZ
+ 0: X\x{11234}YZ
+ X\x{11234}\x{512}
+No match
+ X\x{11234}\x{512}YZ
+ 0: X\x{11234}\x{512}YZ
+ X\x{11234}\x{512}\x{11234}Z
+ 0: X\x{11234}\x{512}\x{11234}Z
+
+/X\C{3,5}?/utf
+ Xabcdefg
+ 0: Xabc
+ X\x{1234}
+No match
+ X\x{1234}YZ
+ 0: X\x{1234}YZ
+ X\x{1234}\x{512}
+No match
+ X\x{11234}Y
+No match
+ X\x{11234}YZ
+ 0: X\x{11234}YZ
+ X\x{11234}\x{512}YZ
+ 0: X\x{11234}\x{512}Y
+ X\x{11234}
+No match
+
+/a\Cb/utf
+ aXb
+ 0: aXb
+ a\nb
+ 0: a\x{0a}b
+ a\x{100}b
+ 0: a\x{100}b
+
+/a\C\Cb/utf
+ a\x{100}b
+No match
+ a\x{12257}b
+No match
+ a\x{12257}\x{11234}b
+ 0: a\x{12257}\x{11234}b
+
+/ab\Cde/utf
+ abXde
+ 0: abXde
+
+# This one is here not because it's different to Perl, but because the way
+# the captured single code unit is displayed. (In Perl it becomes a character,
+# and you can't tell the difference.)
+
+/X(\C)(.*)/utf
+ X\x{1234}
+ 0: X\x{1234}
+ 1: \x{1234}
+ 2:
+ X\nabc
+ 0: X\x{0a}abc
+ 1: \x{0a}
+ 2: abc
+
+# This one is here because Perl gives out a grumbly error message (quite
+# correctly, but that messes up comparisons).
+
+/a\Cb/utf
+\= Expect no match in 8-bit mode
+ a\x{100}b
+ 0: a\x{100}b
+
+# End of testinput22
diff --git a/testdata/testoutput22-8 b/testdata/testoutput22-8
new file mode 100644
index 0000000..acb31d6
--- /dev/null
+++ b/testdata/testoutput22-8
@@ -0,0 +1,169 @@
+# Tests of \C when Unicode support is available. Note that \C is not supported
+# for DFA matching in UTF mode, so this test is not run with -dfa. The output
+# of this test is different in 8-, 16-, and 32-bit modes. Some tests may match
+# in some widths and not in others.
+
+/ab\Cde/utf,info
+Capturing subpattern count = 0
+Contains \C
+Options: utf
+First code unit = 'a'
+Last code unit = 'e'
+Subject length lower bound = 0
+ abXde
+ 0: abXde
+
+# This should produce an error diagnostic (\C in UTF lookbehind)
+
+/(?<=ab\Cde)X/utf
+Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion
+
+# Autopossessification tests
+
+/\C+\X \X+\C/Bx
+------------------------------------------------------------------
+ Bra
+ AllAny+
+ extuni
+ extuni+
+ AllAny
+ Ket
+ End
+------------------------------------------------------------------
+
+/\C+\X \X+\C/Bx,utf
+------------------------------------------------------------------
+ Bra
+ Anybyte+
+ extuni
+ extuni+
+ Anybyte
+ Ket
+ End
+------------------------------------------------------------------
+
+/\C\X*TӅ;
+{0,6}\v+ F
+/utf
+\= Expect no match
+ Ӆ\x0a
+No match
+
+/\C(\W?ſ)'?{{/utf
+\= Expect no match
+ \\C(\\W?ſ)'?{{
+No match
+
+/X(\C{3})/utf
+ X\x{1234}
+ 0: X\x{1234}
+ 1: \x{1234}
+ X\x{11234}Y
+ 0: X\x{f0}\x{91}\x{88}
+ 1: \x{f0}\x{91}\x{88}
+ X\x{11234}YZ
+ 0: X\x{f0}\x{91}\x{88}
+ 1: \x{f0}\x{91}\x{88}
+
+/X(\C{4})/utf
+ X\x{1234}YZ
+ 0: X\x{1234}Y
+ 1: \x{1234}Y
+ X\x{11234}YZ
+ 0: X\x{11234}
+ 1: \x{11234}
+ X\x{11234}YZW
+ 0: X\x{11234}
+ 1: \x{11234}
+
+/X\C*/utf
+ XYZabcdce
+ 0: XYZabcdce
+
+/X\C*?/utf
+ XYZabcde
+ 0: X
+
+/X\C{3,5}/utf
+ Xabcdefg
+ 0: Xabcde
+ X\x{1234}
+ 0: X\x{1234}
+ X\x{1234}YZ
+ 0: X\x{1234}YZ
+ X\x{1234}\x{512}
+ 0: X\x{1234}\x{512}
+ X\x{1234}\x{512}YZ
+ 0: X\x{1234}\x{512}
+ X\x{11234}Y
+ 0: X\x{11234}Y
+ X\x{11234}YZ
+ 0: X\x{11234}Y
+ X\x{11234}\x{512}
+ 0: X\x{11234}\x{d4}
+ X\x{11234}\x{512}YZ
+ 0: X\x{11234}\x{d4}
+ X\x{11234}\x{512}\x{11234}Z
+ 0: X\x{11234}\x{d4}
+
+/X\C{3,5}?/utf
+ Xabcdefg
+ 0: Xabc
+ X\x{1234}
+ 0: X\x{1234}
+ X\x{1234}YZ
+ 0: X\x{1234}
+ X\x{1234}\x{512}
+ 0: X\x{1234}
+ X\x{11234}Y
+ 0: X\x{f0}\x{91}\x{88}
+ X\x{11234}YZ
+ 0: X\x{f0}\x{91}\x{88}
+ X\x{11234}\x{512}YZ
+ 0: X\x{f0}\x{91}\x{88}
+ X\x{11234}
+ 0: X\x{f0}\x{91}\x{88}
+
+/a\Cb/utf
+ aXb
+ 0: aXb
+ a\nb
+ 0: a\x{0a}b
+ a\x{100}b
+No match
+
+/a\C\Cb/utf
+ a\x{100}b
+ 0: a\x{100}b
+ a\x{12257}b
+No match
+ a\x{12257}\x{11234}b
+No match
+
+/ab\Cde/utf
+ abXde
+ 0: abXde
+
+# This one is here not because it's different to Perl, but because the way
+# the captured single code unit is displayed. (In Perl it becomes a character,
+# and you can't tell the difference.)
+
+/X(\C)(.*)/utf
+ X\x{1234}
+ 0: X\x{1234}
+ 1: \x{e1}
+ 2: \x{88}\x{b4}
+ X\nabc
+ 0: X\x{0a}abc
+ 1: \x{0a}
+ 2: abc
+
+# This one is here because Perl gives out a grumbly error message (quite
+# correctly, but that messes up comparisons).
+
+/a\Cb/utf
+\= Expect no match in 8-bit mode
+ a\x{100}b
+No match
+
+# End of testinput22
diff --git a/testdata/testoutput23 b/testdata/testoutput23
new file mode 100644
index 0000000..1da1c39
--- /dev/null
+++ b/testdata/testoutput23
@@ -0,0 +1,8 @@
+# This test is run when PCRE2 has been built with --enable-never-backslash-C,
+# which disables the use of \C. All we can do is check that it gives the
+# correct error message.
+
+/a\Cb/
+Failed: error 185 at offset 2: using \C is disabled in this PCRE2 library
+
+# End of testinput23
diff --git a/testdata/testoutput3 b/testdata/testoutput3
index dba3fc3..d9e8c5c 100644
--- a/testdata/testoutput3
+++ b/testdata/testoutput3
@@ -8,8 +8,7 @@
#forbid_utf
/^[\w]+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -18,8 +17,7 @@ No match
0: cole
/^[\w]+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -28,30 +26,26 @@ No match
0: \xc9
/^[\W]+/locale=fr_FR
- *** Failers
- 0: ***
+\= Expect no match
cole
No match
/[\b]/
\b
0: \x08
- *** Failers
-No match
+\= Expect no match
a
No match
/[\b]/locale=fr_FR
\b
0: \x08
- *** Failers
-No match
+\= Expect no match
a
No match
/^\w+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -66,18 +60,14 @@ No match
2: cole
/(.+)\b(.+)/locale=fr_FR
- *** Failers
- 0: *** Failers
- 1: ***
- 2: Failers
+\= Expect no match
cole
No match
/cole/i
cole
0: \xc9cole
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -114,8 +104,7 @@ Subject length lower bound = 1
/^[\xc8-\xc9]/
cole
0:
- *** Failers
-No match
+\= Expect no match
cole
No match
diff --git a/testdata/testoutput3A b/testdata/testoutput3A
index 3044e45..9b00be8 100644
--- a/testdata/testoutput3A
+++ b/testdata/testoutput3A
@@ -8,8 +8,7 @@
#forbid_utf
/^[\w]+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -18,8 +17,7 @@ No match
0: cole
/^[\w]+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -28,30 +26,26 @@ No match
0: \xc9
/^[\W]+/locale=fr_FR
- *** Failers
- 0: ***
+\= Expect no match
cole
No match
/[\b]/
\b
0: \x08
- *** Failers
-No match
+\= Expect no match
a
No match
/[\b]/locale=fr_FR
\b
0: \x08
- *** Failers
-No match
+\= Expect no match
a
No match
/^\w+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -66,18 +60,14 @@ No match
2: cole
/(.+)\b(.+)/locale=fr_FR
- *** Failers
- 0: *** Failers
- 1: ***
- 2: Failers
+\= Expect no match
cole
No match
/cole/i
cole
0: \xc9cole
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -114,8 +104,7 @@ Subject length lower bound = 1
/^[\xc8-\xc9]/
cole
0:
- *** Failers
-No match
+\= Expect no match
cole
No match
diff --git a/testdata/testoutput3B b/testdata/testoutput3B
index b99d6fd..b30fc5f 100644
--- a/testdata/testoutput3B
+++ b/testdata/testoutput3B
@@ -8,8 +8,7 @@
#forbid_utf
/^[\w]+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -18,8 +17,7 @@ No match
0: cole
/^[\w]+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -28,30 +26,26 @@ No match
0: \xc9
/^[\W]+/locale=fr_FR
- *** Failers
- 0: ***
+\= Expect no match
cole
No match
/[\b]/
\b
0: \x08
- *** Failers
-No match
+\= Expect no match
a
No match
/[\b]/locale=fr_FR
\b
0: \x08
- *** Failers
-No match
+\= Expect no match
a
No match
/^\w+/
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -66,18 +60,14 @@ No match
2: cole
/(.+)\b(.+)/locale=fr_FR
- *** Failers
- 0: *** Failers
- 1: ***
- 2: Failers
+\= Expect no match
cole
No match
/cole/i
cole
0: \xc9cole
- *** Failers
-No match
+\= Expect no match
cole
No match
@@ -114,8 +104,7 @@ Subject length lower bound = 1
/^[\xc8-\xc9]/
cole
0:
- *** Failers
-No match
+\= Expect no match
cole
No match
diff --git a/testdata/testoutput4 b/testdata/testoutput4
index e8090a9..701d411 100644
--- a/testdata/testoutput4
+++ b/testdata/testoutput4
@@ -3,6 +3,7 @@
# some of the property tests may differ because of different versions of
# Unicode in use by PCRE2 and Perl.
+#newline_default lf anycrlf any
#perltest
/a.b/utf
@@ -12,8 +13,7 @@
0: a\x{7f}b
a\x{100}b
0: a\x{100}b
- *** Failers
-No match
+\= Expect no match
a\nb
No match
@@ -27,8 +27,7 @@ No match
a\x{4000}\x{100}yb
0: a\x{4000}\x{100}yb
1: \x{4000}\x{100}y
- *** Failers
-No match
+\= Expect no match
a\x{4000}b
No match
ac\ncb
@@ -104,8 +103,7 @@ No match
a\x{1234}\x{4321}\x{3412}b
0: a\x{1234}\x{4321}\x{3412}b
1: \x{1234}\x{4321}\x{3412}
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
ac\ncb
@@ -127,8 +125,7 @@ No match
a\x{1234}\x{4321}\x{3412}\x{3421}b
0: a\x{1234}\x{4321}\x{3412}\x{3421}b
1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
@@ -148,8 +145,7 @@ No match
a\x{1234}\x{4321}\x{3412}\x{3421}b
0: a\x{1234}\x{4321}\x{3412}\x{3421}b
1: \x{1234}\x{4321}\x{3412}\x{3421}
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
@@ -175,8 +171,7 @@ No match
axxxxxbcdefghijb
0: axxxxxb
1: xxxxx
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
axxxxxxbcdefghijb
@@ -204,16 +199,14 @@ No match
axxxxxbcdefghijb
0: axxxxxb
1: xxxxx
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
axxxxxxbcdefghijb
No match
/^[a\x{c0}]/utf
- *** Failers
-No match
+\= Expect no match
\x{100}
No match
@@ -232,8 +225,7 @@ No match
/(?:\x{100}){3}b/utf
\x{100}\x{100}\x{100}b
0: \x{100}\x{100}\x{100}b
- *** Failers
-No match
+\= Expect no match
\x{100}\x{100}b
No match
@@ -242,8 +234,7 @@ No match
0: \x{ab}
\xc2\xab
0: \x{ab}
- *** Failers
-No match
+\= Expect no match
\x00{ab}
No match
@@ -254,8 +245,7 @@ No match
\x{256}XYZ
0: X
1: \x{256}
- *** Failers
-No match
+\= Expect no match
XYZ
No match
@@ -379,8 +369,7 @@ No match
/\D+/utf
12abcd34
0: abcd
- *** Failers
- 0: *** Failers
+\= Expect no match
1234
No match
@@ -389,8 +378,7 @@ No match
0: abc
12ab34
0: ab
- *** Failers
- 0: ***
+\= Expect no match
1234
No match
12a34
@@ -401,8 +389,7 @@ No match
0: ab
12ab34
0: ab
- *** Failers
- 0: **
+\= Expect no match
1234
No match
12a34
@@ -411,16 +398,13 @@ No match
/\d+/utf
12abcd34
0: 12
- *** Failers
-No match
/\d{2,3}/utf
12abcd34
0: 12
1234abcd
0: 123
- *** Failers
-No match
+\= Expect no match
1.4
No match
@@ -429,16 +413,14 @@ No match
0: 12
1234abcd
0: 12
- *** Failers
-No match
+\= Expect no match
1.4
No match
/\S+/utf
12abcd34
0: 12abcd34
- *** Failers
- 0: ***
+\= Expect no match
\ \
No match
@@ -447,8 +429,7 @@ No match
0: 12a
1234abcd
0: 123
- *** Failers
- 0: ***
+\= Expect no match
\ \
No match
@@ -457,8 +438,7 @@ No match
0: 12
1234abcd
0: 12
- *** Failers
- 0: **
+\= Expect no match
\ \
No match
@@ -466,8 +446,6 @@ No match
12> <34
0: > <
0+ 34
- *** Failers
-No match
/>\s{2,3}</utf,aftertext
ab> <cd
@@ -476,8 +454,7 @@ No match
ab> <ce
0: > <
0+ ce
- *** Failers
-No match
+\= Expect no match
ab> <cd
No match
@@ -488,16 +465,14 @@ No match
ab> <ce
0: > <
0+ ce
- *** Failers
-No match
+\= Expect no match
ab> <cd
No match
/\w+/utf
12 34
0: 12
- *** Failers
- 0: Failers
+\= Expect no match
+++=*!
No match
@@ -506,8 +481,7 @@ No match
0: ab
abcd ce
0: abc
- *** Failers
- 0: Fai
+\= Expect no match
a.b.c
No match
@@ -516,16 +490,14 @@ No match
0: ab
abcd ce
0: ab
- *** Failers
- 0: Fa
+\= Expect no match
a.b.c
No match
/\W+/utf
12====34
0: ====
- *** Failers
- 0: ***
+\= Expect no match
abcd
No match
@@ -534,8 +506,7 @@ No match
0: ===
ab==cd
0: ==
- *** Failers
- 0: ***
+\= Expect no match
a.b.c
No match
@@ -544,8 +515,7 @@ No match
0: ==
ab==cd
0: ==
- *** Failers
- 0: **
+\= Expect no match
a.b.c
No match
@@ -556,8 +526,6 @@ No match
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[Z\x{100}]/utf
Z\x{100}
@@ -566,126 +534,103 @@ No match
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[\x{100}\x{200}]/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- *** Failers
-No match
/[\x{100}-\x{200}]/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{111}cd
+ ab\x{111}cd
0: \x{111}
- *** Failers
-No match
/[z-\x{200}]/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{111}cd
+ ab\x{111}cd
0: \x{111}
- abzcd
+ abzcd
0: z
- ab|cd
+ ab|cd
0: |
- *** Failers
-No match
/[Q\x{100}\x{200}]/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- Q?
+ Q?
0: Q
- *** Failers
-No match
/[Q\x{100}-\x{200}]/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{111}cd
+ ab\x{111}cd
0: \x{111}
- Q?
+ Q?
0: Q
- *** Failers
-No match
/[Qz-\x{200}]/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{111}cd
+ ab\x{111}cd
0: \x{111}
- abzcd
+ abzcd
0: z
- ab|cd
+ ab|cd
0: |
- Q?
+ Q?
0: Q
- *** Failers
-No match
/[\x{100}\x{200}]{1,3}/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
0: \x{200}\x{100}\x{200}
- *** Failers
-No match
/[\x{100}\x{200}]{1,3}?/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
0: \x{200}
- *** Failers
-No match
/[Q\x{100}\x{200}]{1,3}/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
0: \x{200}\x{100}\x{200}
- *** Failers
-No match
/[Q\x{100}\x{200}]{1,3}?/utf
- ab\x{100}cd
+ ab\x{100}cd
0: \x{100}
- ab\x{200}cd
+ ab\x{200}cd
0: \x{200}
- ab\x{200}\x{100}\x{200}\x{100}cd
+ ab\x{200}\x{100}\x{200}\x{100}cd
0: \x{200}
- *** Failers
-No match
/(?<=[\x{100}\x{200}])X/utf
abc\x{200}X
0: X
abc\x{100}X
0: X
- *** Failers
-No match
+\= Expect no match
X
No match
@@ -696,16 +641,14 @@ No match
0: X
abQX
0: X
- *** Failers
-No match
+\= Expect no match
X
No match
/(?<=[\x{100}\x{200}]{3})X/utf
abc\x{100}\x{200}\x{100}X
0: X
- *** Failers
-No match
+\= Expect no match
abc\x{200}X
No match
X
@@ -718,8 +661,7 @@ No match
0: \x{150}X
\x{500}X
0: \x{500}X
- *** Failers
-No match
+\= Expect no match
\x{100}X
No match
\x{200}X
@@ -732,8 +674,7 @@ No match
0: \x{150}X
\x{500}X
0: \x{500}X
- *** Failers
-No match
+\= Expect no match
\x{100}X
No match
\x{200}X
@@ -746,8 +687,7 @@ No match
0: AX
\x{500}X
0: \x{500}X
- *** Failers
-No match
+\= Expect no match
\x{100}X
No match
\x{150}X
@@ -762,8 +702,7 @@ No match
0: Z
\x{100}
0: \x{100}
- *** Failers
-No match
+\= Expect no match
\x{102}
No match
y
@@ -788,22 +727,27 @@ No match
0: \x{123}
/^[ac]*b/utf
+\= Expect no match
xb
No match
/^[ac\x{100}]*b/utf
+\= Expect no match
xb
No match
/^[^x]*b/i,utf
+\= Expect no match
xb
No match
/^[^x]*b/utf
+\= Expect no match
xb
No match
/^\d*b/utf
+\= Expect no match
xb
No match
@@ -1077,10 +1021,12 @@ No match
0:
/(abc)\1/i,utf
+\= Expect no match
abc
No match
/(abc)\1/utf
+\= Expect no match
abc
No match
@@ -1233,30 +1179,35 @@ MK: a\x{a3}b
/^\d*\w{4}/utf
1234
0: 1234
+\= Expect no match
123
No match
/^[^b]*\w{4}/utf
aaaa
0: aaaa
+\= Expect no match
aaa
No match
/^[^b]*\w{4}/i,utf
aaaa
0: aaaa
+\= Expect no match
aaa
No match
/^\x{100}*.{4}/utf
\x{100}\x{100}\x{100}\x{100}
0: \x{100}\x{100}\x{100}\x{100}
+\= Expect no match
\x{100}\x{100}\x{100}
No match
/^\x{100}*.{4}/i,utf
\x{100}\x{100}\x{100}\x{100}
0: \x{100}\x{100}\x{100}\x{100}
+\= Expect no match
\x{100}\x{100}\x{100}
No match
@@ -1279,64 +1230,56 @@ No match
0: \x{7f}\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
\np\x{300}9!\$ <
0: \x{0a}p\x{300}9!$ <
- ** Failers
-No match
+\= Expect no match
ap\x{300}9!\$ <
No match
/^\PC/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x7f
No match
/^\PL/utf
9
0: 9
- ** Failers
- 0: *
+\= Expect no match
\x{c0}
No match
/^\PM/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{30f}
No match
/^\PN/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{660}
No match
/^\PP/utf
X
0: X
- ** Failers
-No match
+\= Expect no match
\x{66c}
No match
/^\PS/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{f01}
No match
/^\PZ/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{1680}
No match
@@ -1345,40 +1288,35 @@ No match
0: \x{17}
\x{09f}
0: \x{9f}
- ** Failers
-No match
+\= Expect no match
\x{0600}
No match
/^\p{Cf}/utf
\x{601}
0: \x{601}
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
/^\p{Cn}/utf
\x{e0000}
0: \x{e0000}
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
/^\p{Co}/utf
\x{f8ff}
0: \x{f8ff}
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
/^\p{Ll}/utf
a
0: a
- ** Failers
-No match
+\= Expect no match
Z
No match
\x{e000}
@@ -1387,8 +1325,7 @@ No match
/^\p{Lm}/utf
\x{2b0}
0: \x{2b0}
- ** Failers
-No match
+\= Expect no match
a
No match
@@ -1405,8 +1342,7 @@ No match
0: \x{4db4}
\x{4db5}
0: \x{4db5}
- ** Failers
-No match
+\= Expect no match
a
No match
\x{2b0}
@@ -1417,8 +1353,7 @@ No match
/^\p{Lt}/utf
\x{1c5}
0: \x{1c5}
- ** Failers
-No match
+\= Expect no match
a
No match
\x{2b0}
@@ -1427,16 +1362,14 @@ No match
/^\p{Lu}/utf
A
0: A
- ** Failers
-No match
+\= Expect no match
\x{2b0}
No match
/^\p{Mc}/utf
\x{903}
0: \x{903}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{300}
@@ -1445,8 +1378,7 @@ No match
/^\p{Me}/utf
\x{488}
0: \x{488}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{903}
@@ -1457,8 +1389,7 @@ No match
/^\p{Mn}/utf
\x{300}
0: \x{300}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{903}
@@ -1471,16 +1402,14 @@ No match
0: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}
\x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}\x{970}
0: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}
- ** Failers
-No match
+\= Expect no match
X
No match
/^\p{Nl}/utf
\x{16ee}
0: \x{16ee}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{966}
@@ -1491,8 +1420,7 @@ No match
0: \x{b2}
\x{b3}
0: \x{b3}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{16ee}
@@ -1503,8 +1431,7 @@ No match
0: _
\x{203f}
0: \x{203f}
- ** Failers
-No match
+\= Expect no match
X
No match
-
@@ -1517,8 +1444,7 @@ No match
0: -
\x{58a}
0: \x{58a}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1533,8 +1459,7 @@ No match
0: }
\x{f3b}
0: \x{f3b}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1553,8 +1478,7 @@ No match
0: \x{bb}
\x{2019}
0: \x{2019}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1565,8 +1489,7 @@ No match
0: \x{ab}
\x{2018}
0: \x{2018}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1577,8 +1500,7 @@ No match
0: !
\x{37e}
0: \x{37e}
- ** Failers
- 0: *
+\= Expect no match
X
No match
\x{203f}
@@ -1593,8 +1515,7 @@ No match
0: {
\x{f3c}
0: \x{f3c}
- ** Failers
-No match
+\= Expect no match
X
No match
)
@@ -1609,8 +1530,7 @@ No match
/^\p{Sk}/utf
\x{2c2}
0: \x{2c2}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{9f2}
@@ -1619,8 +1539,7 @@ No match
/^\p{Sm}+/utf
+<|~\x{ac}\x{2044}
0: +<|~\x{ac}\x{2044}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{9f2}
@@ -1631,8 +1550,7 @@ No match
0: \x{a6}
\x{482}
0: \x{482}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{9f2}
@@ -1641,8 +1559,7 @@ No match
/^\p{Zl}/utf
\x{2028}
0: \x{2028}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{2029}
@@ -1651,83 +1568,80 @@ No match
/^\p{Zp}/utf
\x{2029}
0: \x{2029}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{2028}
No match
/\p{Nd}+(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}AB
1: AB
/\p{Nd}+?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}
1: \x{661}\x{662}
/\p{Nd}{2,}(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}AB
1: AB
/\p{Nd}{2,}?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}A
1: \x{662}A
/\p{Nd}*(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}AB
1: AB
/\p{Nd}*?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}
1: \x{660}\x{661}
/\p{Nd}{2}(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}A
1: \x{662}A
/\p{Nd}{2,3}(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}AB
1: AB
/\p{Nd}{2,3}?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}A
1: \x{662}A
/\p{Nd}?(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}
1: \x{661}\x{662}
/\p{Nd}??(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}
1: \x{660}\x{661}
/\p{Nd}*+(..)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}AB
1: AB
/\p{Nd}*+(...)/utf
- \x{660}\x{661}\x{662}ABC
+ \x{660}\x{661}\x{662}ABC
0: \x{660}\x{661}\x{662}ABC
1: ABC
/\p{Nd}*+(....)/utf
- ** Failers
- 0: ** F
- 1: ** F
- \x{660}\x{661}\x{662}ABC
+\= Expect no match
+ \x{660}\x{661}\x{662}ABC
No match
/(?<=A\p{Nd})XYZ/utf
@@ -1737,8 +1651,7 @@ No match
0: XYZ
ABA\x{660}XYZpqr
0: XYZ
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
XYZ
@@ -1751,48 +1664,51 @@ No match
0: XYZ
XYZ
0: XYZ
- ** Failers
-No match
+\= Expect no match
WXYZ
No match
/[\P{Nd}]+/utf
abcd
0: abcd
- ** Failers
- 0: ** Failers
+\= Expect no match
1234
No match
/\D+/utf
- 11111111111111111111111111111111111111111111111111111111111111111111111
-No match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/\P{Nd}+/utf
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/\P{Nd}+/utf
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\D]+/utf
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/[\D]+/utf
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\P{Nd}]+/utf
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/[\P{Nd}]+/utf
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\D\P{Nd}]+/utf
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/[\D\P{Nd}]+/utf
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
+No match
/\pL/utf
a
@@ -1811,8 +1727,7 @@ No match
0: A
aZ
0: Z
- ** Failers
- 0: F
+\= Expect no match
abc
No match
@@ -1821,16 +1736,14 @@ No match
0: a
Az
0: z
- ** Failers
- 0: a
+\= Expect no match
ABC
No match
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
A\x{391}\x{10427}\x{ff3a}\x{1fb0}
0: A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- ** Failers
-No match
+\= Expect no match
a\x{391}\x{10427}\x{ff3a}\x{1fb0}
No match
A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
@@ -1917,9 +1830,7 @@ No match
2: A
/^\X(.)/utf
- *** Failers
- 0: **
- 1: *
+\= Expect no match
A\x{300}\x{301}\x{302}
No match
@@ -1964,16 +1875,14 @@ No match
/^\p{Han}+/utf
\x{2e81}\x{3007}\x{2f804}\x{31a0}
0: \x{2e81}\x{3007}\x{2f804}
- ** Failers
-No match
+\= Expect no match
\x{2e7f}
No match
/^\P{Katakana}+/utf
\x{3105}
0: \x{3105}
- ** Failers
- 0: ** Failers
+\= Expect no match
\x{30ff}
No match
@@ -1982,16 +1891,14 @@ No match
0: \x{6e9}
\x{060b}
0: \x{60b}
- ** Failers
-No match
+\= Expect no match
X\x{06e9}
No match
/^[\P{Yi}]/utf
\x{2f800}
0: \x{2f800}
- ** Failers
- 0: *
+\= Expect no match
\x{a014}
No match
\x{a4c6}
@@ -2002,14 +1909,12 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
X
No match
/^\P{Any}X/utf
- ** Failers
-No match
+\= Expect no match
AX
No match
@@ -2020,16 +1925,14 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
ABXYZ
No match
/^\P{Any}?X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2044,14 +1947,12 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
+\= Expect no match
XYZ
No match
/^\P{Any}+X/utf
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2070,14 +1971,11 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
/^\P{Any}*X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2090,14 +1988,12 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
X
No match
/^[\P{Any}]X/utf
- ** Failers
-No match
+\= Expect no match
AX
No match
@@ -2108,16 +2004,14 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
ABXYZ
No match
/^[\P{Any}]?X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2132,14 +2026,12 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
+\= Expect no match
XYZ
No match
/^[\P{Any}]+X/utf
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2158,14 +2050,11 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
/^[\P{Any}]*X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2186,8 +2075,7 @@ No match
0: \x{1234}\x{0a}\x{0d}\x{3456}x
/^\P{Any}{3,5}?/utf
- ** Failers
-No match
+\= Expect no match
abcdefgh
No match
\x{1234}\n\r\x{3456}xyz
@@ -2200,137 +2088,129 @@ No match
0: aX
\x{1c5}XY
0: \x{1c5}X
- ** Failers
-No match
- \x{1bb}XY
+\= Expect no match
+ \x{1bb}XY
No match
- \x{2b0}XY
+ \x{2b0}XY
No match
- !XY
+ !XY
No match
/^[\p{L&}]X/utf
- AXY
+ AXY
0: AX
- aXY
+ aXY
0: aX
\x{1c5}XY
0: \x{1c5}X
- ** Failers
-No match
- \x{1bb}XY
+\= Expect no match
+ \x{1bb}XY
No match
- \x{2b0}XY
+ \x{2b0}XY
No match
- !XY
+ !XY
No match
/^\p{L&}+X/utf
- AXY
+ AXY
0: AX
- aXY
+ aXY
0: aX
- AbcdeXyz
+ AbcdeXyz
0: AbcdeX
- \x{1c5}AbXY
+ \x{1c5}AbXY
0: \x{1c5}AbX
- abcDEXypqreXlmn
+ abcDEXypqreXlmn
0: abcDEXypqreX
- ** Failers
-No match
- \x{1bb}XY
+\= Expect no match
+ \x{1bb}XY
No match
- \x{2b0}XY
+ \x{2b0}XY
No match
- !XY
+ !XY
No match
/^[\p{L&}]+X/utf
- AXY
+ AXY
0: AX
- aXY
+ aXY
0: aX
- AbcdeXyz
+ AbcdeXyz
0: AbcdeX
- \x{1c5}AbXY
+ \x{1c5}AbXY
0: \x{1c5}AbX
- abcDEXypqreXlmn
+ abcDEXypqreXlmn
0: abcDEXypqreX
- ** Failers
-No match
- \x{1bb}XY
+\= Expect no match
+ \x{1bb}XY
No match
- \x{2b0}XY
+ \x{2b0}XY
No match
- !XY
+ !XY
No match
/^\p{L&}+?X/utf
- AXY
+ AXY
0: AX
- aXY
+ aXY
0: aX
- AbcdeXyz
+ AbcdeXyz
0: AbcdeX
- \x{1c5}AbXY
+ \x{1c5}AbXY
0: \x{1c5}AbX
- abcDEXypqreXlmn
+ abcDEXypqreXlmn
0: abcDEX
- ** Failers
-No match
- \x{1bb}XY
+\= Expect no match
+ \x{1bb}XY
No match
- \x{2b0}XY
+ \x{2b0}XY
No match
- !XY
+ !XY
No match
/^[\p{L&}]+?X/utf
- AXY
+ AXY
0: AX
- aXY
+ aXY
0: aX
- AbcdeXyz
+ AbcdeXyz
0: AbcdeX
- \x{1c5}AbXY
+ \x{1c5}AbXY
0: \x{1c5}AbX
- abcDEXypqreXlmn
+ abcDEXypqreXlmn
0: abcDEX
- ** Failers
-No match
- \x{1bb}XY
+\= Expect no match
+ \x{1bb}XY
No match
- \x{2b0}XY
+ \x{2b0}XY
No match
- !XY
+ !XY
No match
/^\P{L&}X/utf
- !XY
+ !XY
0: !X
- \x{1bb}XY
+ \x{1bb}XY
0: \x{1bb}X
- \x{2b0}XY
+ \x{2b0}XY
0: \x{2b0}X
- ** Failers
-No match
- \x{1c5}XY
+\= Expect no match
+ \x{1c5}XY
No match
- AXY
+ AXY
No match
/^[\P{L&}]X/utf
- !XY
+ !XY
0: !X
- \x{1bb}XY
+ \x{1bb}XY
0: \x{1bb}X
- \x{2b0}XY
+ \x{2b0}XY
0: \x{2b0}X
- ** Failers
-No match
- \x{1c5}XY
+\= Expect no match
+ \x{1c5}XY
No match
- AXY
+ AXY
No match
/^(\p{Z}[^\p{C}\p{Z}]+)*$/
@@ -2362,15 +2242,18 @@ No match
0: abc\xc4
/\X{1,3}\d/
- \x8aBCD
+\= Expect no match
+ \x8aBCD
No match
/\X?\d/
- \x8aBCD
+\= Expect no match
+ \x8aBCD
No match
/\P{L}?\d/
- \x8aBCD
+\= Expect no match
+ \x8aBCD
No match
/[\PPP\x8a]{1,}\x80/
@@ -2410,8 +2293,7 @@ No match
0: \x{6ef}
\x{6fa}
0: \x{6fa}
- ** Failers
-No match
+\= Expect no match
\x{650}
No match
\x{651}
@@ -2450,8 +2332,7 @@ No match
0: \x{655}
\x{200c}
0: \x{200c}
- ** Failers
-No match
+\= Expect no match
\x{64a}
No match
\x{656}
@@ -2478,8 +2359,7 @@ No match
0: \x{104a0}
\x{104a9}
0: \x{104a9}
- ** Failers
-No match
+\= Expect no match
\x{1049e}
No match
\x{1049f}
@@ -2500,8 +2380,7 @@ No match
/\x{a77d}\x{1d79}/utf
\x{a77d}\x{1d79}
0: \x{a77d}\x{1d79}
- ** Failers
-No match
+\= Expect no match
\x{1d79}\x{a77d}
No match
@@ -2604,14 +2483,12 @@ No match
0: .+\x{a1}
/\p{Zs}*?\R/
- ** Failers
-No match
+\= Expect no match
a\xFCb
No match
/\p{Zs}*\R/
- ** Failers
-No match
+\= Expect no match
a\xFCb
No match
@@ -2804,11 +2681,12 @@ No match
0+
/\X*Z/utf,no_start_optimize
- A\x{300}
+\= Expect no match
+ A\x{300}
No match
/\X*(.)/utf,no_start_optimize
- A\x{1111}\x{ae4c}\x{1169}
+ A\x{1111}\x{ae4c}\x{1169}
0: A\x{1111}
1: \x{1111}
@@ -3400,12 +3278,14 @@ No match
/^\p{Any}*\d{4}/utf
1234
0: 1234
+\= Expect no match
123
No match
/^\X*\w{4}/utf
1234
0: 1234
+\= Expect no match
123
No match
@@ -3454,8 +3334,7 @@ No match
0: \x{e0001}
\x{e0020}\x{e0030}\x{e0040}\x{e0050}\x{e0060}\x{e0070}\x{e007f}
0: \x{e0020}\x{e0030}\x{e0040}\x{e0050}\x{e0060}\x{e0070}\x{e007f}
- ** Failers
-No match
+\= Expect no match
\x{09}
No match
\x{0a}
@@ -3532,8 +3411,7 @@ No match
0: \x{e0001}
\x{e0020}\x{e0030}\x{e0040}\x{e0050}\x{e0060}\x{e0070}\x{e007f}
0: \x{e0020}\x{e0030}\x{e0040}\x{e0050}\x{e0060}\x{e0070}\x{e007f}
- ** Failers
- 0: ** Failers
+\= Expect no match
\x{09}
No match
\x{1D}
@@ -3562,8 +3440,7 @@ No match
0: \x{a1}\x{a7}
\x{37e}
0: \x{37e}
- ** Failers
-No match
+\= Expect no match
abcde
No match
@@ -3574,8 +3451,7 @@ No match
0: \x{2028}\x{2029}\x{202f}\x{2065}
\x{3000}\x{e0002}\x{e001f}\x{e0080}
0: \x{3000}\x{e0002}\x{e001f}\x{e0080}
- ** Failers
-No match
+\= Expect no match
Letter:ABC
No match
Mark:\x{300}\x{1d172}\x{1d17b}
@@ -3614,8 +3490,7 @@ No match
0: \x{09}\x{1d}\x{85}\x{2028}\x{2029}\x{2065}
\x{e0002}\x{e001f}\x{e0080}
0: \x{e0002}\x{e001f}\x{e0080}
- ** Failers
-No match
+\= Expect no match
Space: \x{a0}
No match
\x{1680}\x{2000}\x{2001}\x{2002}\x{2003}\x{2004}\x{2005}
@@ -3664,8 +3539,7 @@ No match
/^[[:^punct:]]+$/utf,ucp
abcde
0: abcde
- ** Failers
-No match
+\= Expect no match
\$+<=>^`|~
No match
!\"#%&'()*,-./:;?@[\\]_{}
@@ -3730,6 +3604,7 @@ No match
2: \x{23a}\x{2c65}\x{23a}
/^(\x{23a})\1*(....)/i,utf
+\= Expect no match
\x{23a}\x{2c65}\x{2c65}\x{2c65}
No match
\x{23a}\x{23a}\x{2c65}\x{23a}
@@ -3741,14 +3616,91 @@ No match
"[\S\V\H]"utf
-/\C\X*TӅ;
-{0,6}\v+ F
-/utf
- Ӆ\x0a
+/[^\p{Any}]*+x/utf
+ x
+ 0: x
+
+/[[:punct:]]/utf,ucp
+ \x{b4}
+No match
+
+/[[:^ascii:]]/utf,ucp
+ \x{100}
+ 0: \x{100}
+ \x{200}
+ 0: \x{200}
+ \x{300}
+ 0: \x{300}
+ \x{37e}
+ 0: \x{37e}
+\= Expect no match
+ aa
+No match
+ 99
+No match
+
+/[[:^ascii:]\w]/utf,ucp
+ aa
+ 0: a
+ 99
+ 0: 9
+ gg
+ 0: g
+ \x{100}
+ 0: \x{100}
+ \x{200}
+ 0: \x{200}
+ \x{300}
+ 0: \x{300}
+ \x{37e}
+ 0: \x{37e}
+
+/[\w[:^ascii:]]/utf,ucp
+ aa
+ 0: a
+ 99
+ 0: 9
+ gg
+ 0: g
+ \x{100}
+ 0: \x{100}
+ \x{200}
+ 0: \x{200}
+ \x{300}
+ 0: \x{300}
+ \x{37e}
+ 0: \x{37e}
+
+/[^[:ascii:]\W]/utf,ucp
+ \x{100}
+ 0: \x{100}
+ \x{200}
+ 0: \x{200}
+\= Expect no match
+ aa
+No match
+ 99
+No match
+ gg
+No match
+ \x{37e}
No match
-/\C(\W?ſ)'?{{/utf
- \\C(\\W?ſ)'?{{
+/[^[:^ascii:]\d]/utf,ucp
+ a
+ 0: a
+ ~
+ 0: ~
+ \a
+ 0: \x{07}
+ \x{7f}
+ 0: \x{7f}
+\= Expect no match
+ 0
+No match
+ \x{389}
+No match
+ \x{20ac}
No match
# End of testinput4
diff --git a/testdata/testoutput5 b/testdata/testoutput5
index a99c12b..f19ad8c 100644
--- a/testdata/testoutput5
+++ b/testdata/testoutput5
@@ -11,14 +11,12 @@
# test 4.
/^[\p{Arabic}]/utf
- ** Failers
-No match
+\= Expect no match
\x{061c}
No match
/^[[:graph:]]+$/utf,ucp
- ** Failers
-No match
+\= Expect no match
\x{61c}
No match
\x{2066}
@@ -31,8 +29,7 @@ No match
No match
/^[[:print:]]+$/utf,ucp
- ** Failers
- 0: ** Failers
+\= Expect no match
\x{61c}
No match
\x{2066}
@@ -76,6 +73,7 @@ No match
0: A\x{85}\x{2005}Z
/^[[:graph:]]+$/utf,ucp
+\= Expect no match
\x{180e}
No match
@@ -88,6 +86,7 @@ No match
0: \x{09}\x{0a}\x{1d} \x{85}\x{a0}\x{61c}\x{1680}\x{180e}
/^[[:^print:]]+$/utf,ucp
+\= Expect no match
\x{180e}
No match
@@ -182,10 +181,6 @@ Subject length lower bound = 3
\x{212ab}\x{212ab}\x{212ab}\x{861}
0: \x{212ab}\x{212ab}\x{212ab}
-/(?<=\C)X/utf
-Failed: error 136 at offset 6: \C is not allowed in a lookbehind assertion
- Should produce an error diagnostic
-
/^[ab]/IB,utf
------------------------------------------------------------------
Bra
@@ -200,8 +195,7 @@ Overall options: anchored utf
Subject length lower bound = 1
bar
0: b
- *** Failers
-No match
+\= Expect no match
c
No match
\x{ff}
@@ -227,8 +221,7 @@ Subject length lower bound = 1
0: \x{ff}
\x{100}
0: \x{100}
- *** Failers
- 0: *
+\= Expect no match
aaa
No match
@@ -251,8 +244,7 @@ No match
\x{100}\x{100}"12"
0: \x{100}\x{100}"12"
1: "12"
- *** Failers
-No match
+\= Expect no match
\x{100}\x{100}abcd
No match
@@ -303,8 +295,7 @@ Failed: error 108 at offset 15: range out of order in character class
0: \x{100}
\x{104}
0: \x{104}
- *** Failers
-No match
+\= Expect no match
\x{105}
No match
\x{ff}
@@ -581,8 +572,7 @@ Matched, but too many substrings
0: a\x{2028}b
a\x{2029}b
0: a\x{2029}b
- ** Failers
-No match
+\= Expect no match
a\n\rb
No match
@@ -623,8 +613,7 @@ No match
0: a\x{0a}\x{0d}b
a\n\r\x{85}\x0cb
0: a\x{0a}\x{0d}\x{85}\x{0c}b
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -643,8 +632,7 @@ No match
0: a\x{0a}\x{0d}\x{0a}\x{0d}b
a\n\n\r\nb
0: a\x{0a}\x{0a}\x{0d}\x{0a}b
- ** Failers
-No match
+\= Expect no match
a\n\n\n\rb
No match
a\r
@@ -655,8 +643,7 @@ No match
0: X X\x{0a}
X\x09X\x0b
0: X\x{09}X\x{0b}
- ** Failers
-No match
+\= Expect no match
\x{a0} X\x0a
No match
@@ -667,8 +654,7 @@ No match
0: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}\x{0d}
\x09\x20\x{a0}\x0a\x0b\x0c
0: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}
- ** Failers
-No match
+\= Expect no match
\x09\x20\x{a0}\x0a\x0b
No match
@@ -677,8 +663,7 @@ No match
0: \x{3001}\x{3000}\x{2030}\x{2028}
X\x{180e}X\x{85}
0: X\x{180e}X\x{85}
- ** Failers
-No match
+\= Expect no match
\x{2009} X\x0a
No match
@@ -689,8 +674,7 @@ No match
0: \x{09}\x{205f}\x{a0}\x{0a}\x{2029}\x{0c}\x{2028}
\x09\x20\x{202f}\x0a\x0b\x0c
0: \x{09} \x{202f}\x{0a}\x{0b}\x{0c}
- ** Failers
-No match
+\= Expect no match
\x09\x{200a}\x{a0}\x{2028}\x0b
No match
@@ -755,8 +739,7 @@ Subject length lower bound = 3
0: a\x{0a}b
a\r\nb
0: a\x{0d}\x{0a}b
- ** Failers
-No match
+\= Expect no match
a\x{85}b
No match
a\x0bb
@@ -793,8 +776,7 @@ Subject length lower bound = 2
0: a\x{0a}b
a\r\nb
0: a\x{0d}\x{0a}b
- ** Failers
-No match
+\= Expect no match
a\x{85}b
No match
a\x0bb
@@ -817,14 +799,11 @@ Subject length lower bound = 2
0: a\x{85}b
a\x0bb
0: a\x{0b}b
- ** Failers
-No match
/.*a.*=.b.*/utf,newline=any
QQQ\x{2029}ABCaXYZ=!bPQR
0: ABCaXYZ=!bPQR
- ** Failers
-No match
+\= Expect no match
a\x{2029}b
No match
\x61\xe2\x80\xa9\x62
@@ -838,8 +817,7 @@ Failed: error 130 at offset 3: unknown POSIX class name
0: a\x{1234}b
a\nb
0: a\x{0a}b
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -848,8 +826,7 @@ No match
0: aXb
a\nX\nX\x{1234}b
0: a\x{0a}X\x{0a}X\x{1234}b
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -935,6 +912,7 @@ Partial match: X\x{123}\x{123}\x{123}
Partial match: X\x{123}\x{123}\x{123}\x{123}
/X\x{123}{2,4}b/utf
+\= Expect no match
Xx\=ps
No match
X\x{123}x\=ps
@@ -947,6 +925,7 @@ No match
No match
/X\x{123}{2,4}?b/utf
+\= Expect no match
Xx\=ps
No match
X\x{123}x\=ps
@@ -959,6 +938,7 @@ No match
No match
/X\x{123}{2,4}+b/utf
+\= Expect no match
Xx\=ps
No match
X\x{123}x\=ps
@@ -1745,6 +1725,7 @@ Last code unit = 'y'
Subject length lower bound = 2
/(?<!^)ETA/utf
+\= Expect no match
ETA
No match
@@ -1874,8 +1855,7 @@ Subject length lower bound = 1
0: 12-34
12+\x{661}-34
0: 12+\x{661}-34
- ** Failers
-No match
+\= Expect no match
abcd
No match
@@ -1995,8 +1975,7 @@ No match
/^\p{Cs}/utf
\x{dfff}\=no_utf_check
0: \x{dfff}
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
@@ -2021,8 +2000,7 @@ No match
0: $\x{a2}\x{a3}\x{a4}\x{a5}
\x{9f2}
0: \x{9f2}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{2c2}
@@ -2039,8 +2017,7 @@ No match
0: \x{2000}
\x{2001}
0: \x{2001}
- ** Failers
-No match
+\= Expect no match
\x{2028}
No match
\x{200d}
@@ -2052,16 +2029,14 @@ No match
/\p{^Lu}/i,utf
1234
0: 1
- ** Failers
- 0: *
+\= Expect no match
ABC
No match
/\P{Lu}/i,utf
1234
0: 1
- ** Failers
- 0: *
+\= Expect no match
ABC
No match
@@ -2070,8 +2045,7 @@ No match
0: a
Az
0: z
- ** Failers
- 0: a
+\= Expect no match
ABC
No match
@@ -2080,8 +2054,7 @@ No match
0: A
a\x{10a0}B
0: \x{10a0}
- ** Failers
- 0: F
+\= Expect no match
a
No match
\x{1d00}
@@ -2092,8 +2065,7 @@ No match
0: A
aZ
0: Z
- ** Failers
- 0: F
+\= Expect no match
abc
No match
@@ -2182,16 +2154,14 @@ No match
0: \x{a6c}
\x{10a7}
0: \x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
/^\p{Xan}+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
0: ABCD1234\x{6ca}\x{a6c}\x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
@@ -2222,16 +2192,14 @@ No match
0: \x{a6c}
\x{10a7}
0: \x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
/^[\p{Xan}]+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
0: ABCD1234\x{6ca}\x{a6c}\x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
@@ -2240,8 +2208,7 @@ No match
0: >\x{1680}
>\x{a0}
0: >\x{a0}
- ** Failers
-No match
+\= Expect no match
\x{0b}
No match
@@ -2278,8 +2245,7 @@ No match
0: >\x{1680}
>\x{a0}
0: >\x{a0}
- ** Failers
-No match
+\= Expect no match
\x{0b}
No match
@@ -2324,8 +2290,7 @@ No match
0: \x{10a7}
_ABC
0: _
- ** Failers
-No match
+\= Expect no match
[]
No match
@@ -2362,8 +2327,7 @@ No match
0: \x{10a7}
_ABC
0: _
- ** Failers
-No match
+\= Expect no match
[]
No match
@@ -2630,8 +2594,7 @@ No match
/\b...\B/utf
abc_
0: abc
- ** Failers
- 0: Fai
+\= Expect no match
\x{37e}abc\x{376}
No match
\x{37e}\x{376}\x{371}\x{393}\x{394}
@@ -2825,10 +2788,12 @@ No match
# These behaved oddly in Perl, so they are kept in this test
/(\x{23a}\x{23a}\x{23a})?\1/i,utf
+\= Expect no match
\x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
No match
/(ȺȺȺ)?\1/i,utf
+\= Expect no match
ȺȺȺⱥⱥ
No match
@@ -2843,10 +2808,12 @@ No match
1: \x{23a}\x{23a}\x{23a}
/(\x{23a}\x{23a}\x{23a})\1/i,utf
+\= Expect no match
\x{23a}\x{23a}\x{23a}\x{2c65}\x{2c65}
No match
/(ȺȺȺ)\1/i,utf
+\= Expect no match
ȺȺȺⱥⱥ
No match
@@ -2887,8 +2854,7 @@ No match
0: \x{1bc0}
\x{1bff}
0: \x{1bff}
- ** Failers
-No match
+\= Expect no match
\x{1bf4}
No match
@@ -2897,8 +2863,7 @@ No match
0: \x{11000}
\x{1106f}
0: \x{1106f}
- ** Failers
-No match
+\= Expect no match
\x{1104e}
No match
@@ -2907,8 +2872,7 @@ No match
0: \x{840}
\x{85e}
0: \x{85e}
- ** Failers
-No match
+\= Expect no match
\x{85c}
No match
\x{85d}
@@ -2933,14 +2897,10 @@ No match
/^a\X41z/alt_bsux,allow_empty_class,match_unset_backref,dupnames
aX41z
0: aX41z
- *** Failers
-No match
+\= Expect no match
aAz
No match
-/(?<=ab\Cde)X/utf
-Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion
-
/\X/
a\=ps
0: a
@@ -3138,8 +3098,7 @@ Subject length lower bound = 3
0+
/\x{3a3}++./i,utf,aftertext
- ** Failers
-No match
+\= Expect no match
\x{3a3}\x{3c3}\x{3c2}\x{3a3}\x{3c3}\x{3c2}
No match
@@ -3179,24 +3138,29 @@ No match
Ket
End
------------------------------------------------------------------
+\= Expect no match
ikt
No match
/is+t/i,utf
iSs\x{17f}t
0: iSs\x{17f}t
+\= Expect no match
ikt
No match
/is+?t/i,utf
+\= Expect no match
ikt
No match
/is?t/i,utf
+\= Expect no match
ikt
No match
/is{2}t/i,utf
+\= Expect no match
iskt
No match
@@ -3211,80 +3175,70 @@ No match
0: `
\x{1234}abc
0: \x{1234}
- ** Failers
-No match
+\= Expect no match
abc
No match
/^\p{Xuc}+/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}+?/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}+?\*/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}*
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}++/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}{3,5}/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}{3,5}?/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^[\p{Xuc}]/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^[\p{Xuc}]+/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\P{Xuc}/utf
abc
0: a
- ** Failers
- 0: *
+\= Expect no match
$abc
No match
@abc
@@ -3297,8 +3251,7 @@ No match
/^[\P{Xuc}]/utf
abc
0: a
- ** Failers
- 0: *
+\= Expect no match
$abc
No match
@abc
@@ -3843,7 +3796,7 @@ No match
End
------------------------------------------------------------------
-/\D+\X \d+\X \S+\X \s+\X \W+\X \w+\X \C+\X \R+\X \H+\X \h+\X \V+\X \v+\X a+\X \n+\X .+\X/Bx
+/\D+\X \d+\X \S+\X \s+\X \W+\X \w+\X \R+\X \H+\X \h+\X \V+\X \v+\X a+\X \n+\X .+\X/Bx
------------------------------------------------------------------
Bra
\D+
@@ -3858,8 +3811,6 @@ No match
extuni
\w+
extuni
- AllAny+
- extuni
\R+
extuni
\H+
@@ -3898,7 +3849,7 @@ No match
End
------------------------------------------------------------------
-/\X+\D \X+\d \X+\S \X+\s \X+\W \X+\w \X+. \X+\C \X+\R \X+\H \X+\h \X+\V \X+\v \X+\X \X+\Z \X+\z \X+$/Bx
+/\X+\D \X+\d \X+\S \X+\s \X+\W \X+\w \X+. \X+\R \X+\H \X+\h \X+\V \X+\v \X+\X \X+\Z \X+\z \X+$/Bx
------------------------------------------------------------------
Bra
extuni+
@@ -3916,8 +3867,6 @@ No match
extuni+
Any
extuni+
- AllAny
- extuni+
\R
extuni+
\H
@@ -4003,12 +3952,9 @@ Subject length lower bound = 1
1: 123X\x{1234}Z123
/(?<=abc)(|def)/g,utf,replace=<$0>
- 123abcáyzabcdef789abcሴqr
+ 123abcáyzabcdef789abcሴqr
4: 123abc<>\x{e1}yzabc<><def>789abc<>\x{1234}qr
-/[^\xff]((?1))/utf,debug
-Failed: error 140 at offset 11: recursion could loop indefinitely
-
/[A-`]/iB,utf
------------------------------------------------------------------
Bra
@@ -4050,4 +3996,169 @@ Failed: error 122 at offset 1227: unmatched closing parenthesis
/$(&.+[\p{Me}].\s\xdcC*?(?(<y>))(?<!^)$C((;*?(R))+(?(R)){0,6}?|){12\x8a\X*?\x8a\x0b\xd1^9\3*+(\xc1,\k'P'\xb4)\xcc(z\z(?JJ)(?'X'8};(\x0b\xd1^9\?'3*+(\xc1.]k+\x0b'Pm'\xb4\xcc4'\xd1'(?'X'))?-%--\x95$9*\4'|\xd1(''%\x95*$9)#(?'R')3\x07?('P\xed')\\x16:;()\x1e\x10*:(?<y>)\xd1+!~:(?)''(d'E:yD!\s(?'R'\x1e;\x10:U))|')g!\xb0*){29+))#(?'P'})*?/
+"(*UTF)(*UCP)(.UTF).+X(\V+;\^(\D|)!999}(?(?C{7(?C')\H*\S*/^\x5\xa\\xd3\x85n?(;\D*(?m).[^mH+((*UCP)(*U:F)})(?!^)(?'"
+Failed: error 124 at offset 113: letter or underscore expected after (?< or (?'
+
+/[\pS#moq]/
+ =
+ 0: =
+
+/(*:a\x{12345}b\t(d\)c)xxx/utf,alt_verbnames,mark
+ cxxxz
+ 0: xxx
+MK: a\x{12345}b\x{09}(d)c
+
+/abcd/utf,replace=x\x{824}y\o{3333}z(\Q12\$34$$\x34\E5$$),substitute_extended
+ abcd
+ 1: x\x{824}y\x{6db}z(12\$34$$\x345$)
+
+/a(\x{e0}\x{101})(\x{c0}\x{102})/utf,replace=a\u$1\U$1\E$1\l$2\L$2\Eab\U\x{e0}\x{101}\L\x{d0}\x{160}\EDone,substitute_extended
+ a\x{e0}\x{101}\x{c0}\x{102}
+ 1: a\x{c0}\x{101}\x{c0}\x{100}\x{e0}\x{101}\x{e0}\x{102}\x{e0}\x{103}ab\x{c0}\x{100}\x{f0}\x{161}Done
+
+/((?<digit>\d)|(?<letter>\p{L}))/g,substitute_extended,replace=<${digit:+digit; :not digit; }${letter:+letter:not a letter}>
+ ab12cde
+ 7: <not digit; letter><not digit; letter><digit; not a letter><digit; not a letter><not digit; letter><not digit; letter><not digit; letter>
+
+/[\W\p{Any}]/B
+------------------------------------------------------------------
+ Bra
+ [\x00-/:-@[-^`{-\xff\p{Any}]
+ Ket
+ End
+------------------------------------------------------------------
+ abc
+ 0: a
+ 123
+ 0: 1
+
+/[\W\pL]/B
+------------------------------------------------------------------
+ Bra
+ [\x00-/:-@[-^`{-\xff\p{L}]
+ Ket
+ End
+------------------------------------------------------------------
+ abc
+ 0: a
+\= Expect no match
+ 123
+No match
+
+/(*UCP)(*UTF)[[:>:]]X/B
+------------------------------------------------------------------
+ Bra
+ \b
+ AssertB
+ Reverse
+ prop Xwd
+ Ket
+ X
+ Ket
+ End
+------------------------------------------------------------------
+
+/abc/utf,replace=xyz
+ abc\=zero_terminate
+ 1: xyz
+
+/a[[:punct:]b]/ucp,bincode
+------------------------------------------------------------------
+ Bra
+ a
+ [b[:punct:]]
+ Ket
+ End
+------------------------------------------------------------------
+
+/a[[:punct:]b]/utf,ucp,bincode
+------------------------------------------------------------------
+ Bra
+ a
+ [b[:punct:]]
+ Ket
+ End
+------------------------------------------------------------------
+
+/a[b[:punct:]]/utf,ucp,bincode
+------------------------------------------------------------------
+ Bra
+ a
+ [b[:punct:]]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:^ascii:]]/utf,ucp,bincode
+------------------------------------------------------------------
+ Bra
+ [\x80-\xff] (neg)
+ Ket
+ End
+------------------------------------------------------------------
+
+/[[:^ascii:]\w]/utf,ucp,bincode
+------------------------------------------------------------------
+ Bra
+ [\x80-\xff\p{Xwd}\x{100}-\x{10ffff}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[\w[:^ascii:]]/utf,ucp,bincode
+------------------------------------------------------------------
+ Bra
+ [\x80-\xff\p{Xwd}\x{100}-\x{10ffff}]
+ Ket
+ End
+------------------------------------------------------------------
+
+/[^[:ascii:]\W]/utf,ucp,bincode
+------------------------------------------------------------------
+ Bra
+ [^\x00-\x7f\P{Xwd}]
+ Ket
+ End
+------------------------------------------------------------------
+ \x{de}
+ 0: \x{de}
+ \x{200}
+ 0: \x{200}
+\= Expect no match
+ \x{300}
+No match
+ \x{37e}
+No match
+
+/[[:^ascii:]a]/utf,ucp,bincode
+------------------------------------------------------------------
+ Bra
+ [a\x80-\xff] (neg)
+ Ket
+ End
+------------------------------------------------------------------
+
+/L(?#(|++<!(2)?/B,utf,no_auto_possess,auto_callout
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 14
+ L?
+ Callout 255 14 0
+ Ket
+ End
+------------------------------------------------------------------
+
+/L(?#(|++<!(2)?/B,utf,ucp,auto_callout
+------------------------------------------------------------------
+ Bra
+ Callout 255 0 14
+ L?+
+ Callout 255 14 0
+ Ket
+ End
+------------------------------------------------------------------
+
+/(*UTF)C\x09((?<!'(?x)!*H? #\xcc\x9a[^$]/
+Failed: error 114 at offset 39: missing closing parenthesis
+
# End of testinput5
diff --git a/testdata/testoutput6 b/testdata/testoutput6
index 0fef124..9ae092b 100644
--- a/testdata/testoutput6
+++ b/testdata/testoutput6
@@ -4,6 +4,7 @@
#forbid_utf
#subject dfa
+#newline_default lf anycrlf any
/abc/
abc
@@ -22,8 +23,7 @@
0: abc
abbbbbbc
0: abbbbbbc
- *** Failers
-No match
+\= Expect no match
ac
No match
ab
@@ -78,8 +78,7 @@ Matched, but offsets vector is too small to show all matches
/^abc/
abcdef
0: abc
- *** Failers
-No match
+\= Expect no match
xyzabc
No match
xyz\nabc
@@ -90,16 +89,14 @@ No match
0: abc
xyz\nabc
0: abc
- *** Failers
-No match
+\= Expect no match
xyzabc
No match
/\Aabc/
abcdef
0: abc
- *** Failers
-No match
+\= Expect no match
xyzabc
No match
xyz\nabc
@@ -108,8 +105,7 @@ No match
/\Aabc/m
abcdef
0: abc
- *** Failers
-No match
+\= Expect no match
xyzabc
No match
xyz\nabc
@@ -120,8 +116,7 @@ No match
0: abc
xyzabc\=offset=3
0: abc
- *** Failers
-No match
+\= Expect no match
xyzabc
No match
xyzabc\=offset=2
@@ -132,8 +127,7 @@ No match
0: x9yzz
x0y+z
0: x0y+z
- *** Failers
-No match
+\= Expect no match
xyz
No match
xxy0z
@@ -144,8 +138,7 @@ No match
0: x yzz
x y+z
0: x y+z
- *** Failers
-No match
+\= Expect no match
xyz
No match
xxyyz
@@ -154,8 +147,7 @@ No match
/x\wy\Wz/
xxy+z
0: xxy+z
- *** Failers
-No match
+\= Expect no match
xxy0z
No match
x+y+z
@@ -166,8 +158,7 @@ No match
0: x+y
x-y
0: x-y
- *** Failers
-No match
+\= Expect no match
x\ny
No match
@@ -186,8 +177,7 @@ No match
0: a+bc\x0adp+q
x\nyp+q
0: x\x0ayp+q
- *** Failers
-No match
+\= Expect no match
a\nbc\ndp+q
No match
a+bc\ndp\nq
@@ -198,8 +188,7 @@ No match
/a\d\z/
ba0
0: a0
- *** Failers
-No match
+\= Expect no match
ba0\n
No match
ba0\ncd
@@ -208,8 +197,7 @@ No match
/a\d\z/m
ba0
0: a0
- *** Failers
-No match
+\= Expect no match
ba0\n
No match
ba0\ncd
@@ -220,8 +208,7 @@ No match
0: a0
ba0\n
0: a0
- *** Failers
-No match
+\= Expect no match
ba0\ncd
No match
@@ -230,8 +217,7 @@ No match
0: a0
ba0\n
0: a0
- *** Failers
-No match
+\= Expect no match
ba0\ncd
No match
@@ -240,8 +226,7 @@ No match
0: a0
ba0\n
0: a0
- *** Failers
-No match
+\= Expect no match
ba0\ncd
No match
@@ -252,8 +237,6 @@ No match
0: a0
ba0\ncd
0: a0
- *** Failers
-No match
/abc/i
abc
@@ -288,8 +271,7 @@ No match
0: xxxyz
axxxxyzq
0: xxxyz
- *** Failers
-No match
+\= Expect no match
ax
No match
axx
@@ -300,8 +282,7 @@ No match
0: xxxyz
axxxxyzq
0: xxxyz
- *** Failers
-No match
+\= Expect no match
ax
No match
axx
@@ -320,8 +301,7 @@ No match
0: xxxyz
axxxxyzq
0: xxxyz
- *** Failers
-No match
+\= Expect no match
ax
No match
axx
@@ -340,12 +320,7 @@ No match
2: bcd
3: bc
4: b
- *** Failers
- 0: *** F
- 1: ***
- 2: ***
- 3: **
- 4: *
+\= Expect no match
aaaaa
No match
@@ -360,13 +335,6 @@ No match
3: bc
4: b
5:
- *** Failers
- 0: *** F
- 1: ***
- 2: ***
- 3: **
- 4: *
- 5:
aaaaa
0:
@@ -384,10 +352,7 @@ No match
0: bcdef
1: bcde
2: bcd
- *** Failers
- 0: *** F
- 1: ***
- 2: ***
+\= Expect no match
axya
No match
axa
@@ -410,16 +375,14 @@ No match
/\d+/
ab1234c56
0: 1234
- *** Failers
-No match
+\= Expect no match
xyz
No match
/\D+/
ab123c56
0: ab
- *** Failers
- 0: *** Failers
+\= Expect no match
789
No match
@@ -428,8 +391,7 @@ No match
0: 5A
ABC
0: A
- *** Failers
-No match
+\= Expect no match
XYZ
No match
@@ -440,8 +402,6 @@ No match
0: BA
9ABC
0: A
- *** Failers
-No match
/a+/
aaaa
@@ -458,8 +418,7 @@ No match
0: abcdxyz
axyz
0: axyz
- *** Failers
-No match
+\= Expect no match
xyz
No match
@@ -474,8 +433,7 @@ No match
0: 12X
123X
0: 123X
- *** Failers
-No match
+\= Expect no match
X
No match
1X
@@ -492,8 +450,7 @@ No match
0: c9
d04
0: d0
- *** Failers
-No match
+\= Expect no match
e45
No match
abcd
@@ -516,8 +473,7 @@ No match
0: abcd1
1234
0: 1
- *** Failers
-No match
+\= Expect no match
e45
No match
abcd
@@ -534,8 +490,7 @@ No match
0: d0
abcd1234
0: abcd1
- *** Failers
-No match
+\= Expect no match
1234
No match
e45
@@ -560,8 +515,7 @@ No match
0: d0
1234
0: 1
- *** Failers
-No match
+\= Expect no match
abcd1234
No match
e45
@@ -572,8 +526,7 @@ No match
0: ab4
bcd93
0: bcd9
- *** Failers
-No match
+\= Expect no match
1234
No match
a36
@@ -590,16 +543,13 @@ No match
0: abcabcabc4
42xyz
0: 4
- *** Failers
-No match
/^(abc)+\d/
abc45
0: abc4
abcabcabc45
0: abcabcabc4
- *** Failers
-No match
+\= Expect no match
42xyz
No match
@@ -608,8 +558,7 @@ No match
0: abc4
42xyz
0: 4
- *** Failers
-No match
+\= Expect no match
abcabcabc45
No match
@@ -618,8 +567,7 @@ No match
0: abcabc4
abcabcabc45
0: abcabcabc4
- *** Failers
-No match
+\= Expect no match
abcabcabcabc45
No match
abc45
@@ -650,8 +598,7 @@ No match
0: a(b)c
a(b(c))d
0: a(b(c))d
- *** Failers)
-No match
+\= Expect no match)
a(b(c)d
No match
@@ -666,8 +613,7 @@ No match
/^(?>a*)\d/
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9
- *** Failers
-No match
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -684,8 +630,7 @@ No match
0: <abc<>def>
<abc<>
0: <>
- *** Failers
-No match
+\= Expect no match
<abc
No match
@@ -694,8 +639,7 @@ No match
0: abc:
12
0: 12
- *** Failers
-No match
+\= Expect no match
123
No match
xyz
@@ -706,8 +650,7 @@ No match
0: abc:
12
0: 12
- *** Failers
-No match
+\= Expect no match
123
No match
xyz
@@ -716,8 +659,7 @@ No match
/^(?=abc)\w{5}:$/
abcde:
0: abcde:
- *** Failers
-No match
+\= Expect no match
abc..
No match
123
@@ -728,8 +670,7 @@ No match
/^(?!abc)\d\d$/
12
0: 12
- *** Failers
-No match
+\= Expect no match
abcde:
No match
abc..
@@ -744,8 +685,7 @@ No match
0: 123
wxy123z
0: 123
- *** Failers
-No match
+\= Expect no match
123abc
No match
@@ -754,8 +694,7 @@ No match
0: 123
mno123456
0: 123
- *** Failers
-No match
+\= Expect no match
abc12345
No match
wxy123z
@@ -841,8 +780,7 @@ No match
/^abc/
abcdef
0: abc
- *** Failers
-No match
+\= Expect no match
abcdef\=notbol
No match
@@ -856,8 +794,7 @@ No match
1:
xyz\=notempty
0: xyz
- *** Failers
- 0:
+\= Expect no match
bcd\=notempty
No match
@@ -866,8 +803,7 @@ No match
0: xyz
xyz\n
0: xyz
- *** Failers
-No match
+\= Expect no match
xyz\=noteol
No match
xyz\n\=noteol
@@ -884,8 +820,7 @@ No match
0: xyz
xyz\n\=noteol
0: xyz
- *** Failers
-No match
+\= Expect no match
xyz\=noteol
No match
@@ -894,8 +829,7 @@ No match
0: abc
defabcxyz\=offset=3
0: abc
- *** Failers
-No match
+\= Expect no match
defabcxyz
No match
@@ -906,8 +840,7 @@ Partial match: ab
Partial match: abcde
abcdef\=ps
0: abcdef
- *** Failers
-No match
+\= Expect no match
abx\=ps
No match
@@ -928,8 +861,7 @@ Partial match: aaaa12345
0: aa0z
aaaa4444444444444z\=ps
0: aaaa4444444444444z
- *** Failers
-No match
+\= Expect no match
az\=ps
No match
aaaaa\=ps
@@ -944,27 +876,20 @@ Partial match: abc
0: def
/(?<=foo)bar/
- xyzfo\=ps
-No match
foob\=ps,offset=2
Partial match: foob
<<<
foobar...\=ps,dfa_restart,offset=4
0: ar
- xyzfo\=ps
-No match
foobar\=offset=2
0: bar
- *** Failers
-No match
+\= Expect no match
xyzfo\=ps
No match
obar\=dfa_restart
No match
/(ab*(cd|ef))+X/
- adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
-No match
lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=ps,notbol,noteol
Partial match: abbbbbbcdaefabbbbbbbefa
cdabbbbbbbb\=ps,notbol,dfa_restart,noteol
@@ -973,14 +898,18 @@ Partial match: cdabbbbbbbb
Partial match: efabbbbbbbbbbbbbbbb
bbbbbbbbbbbbcdXyasdfadf\=ps,notbol,dfa_restart,noteol
0: bbbbbbbbbbbbcdX
+\= Expect no match
+ adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
+No match
/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
+\= Expect no match
+ The quick brown FOX
+No match
What do you know about THE QUICK BROWN FOX?
No match
@@ -1059,8 +988,7 @@ No match
0: aaaabxyzpqrrrabbxyyyypqAzz
>>>>abcxyzpqrrrabbxyyyypqAzz
0: abcxyzpqrrrabbxyyyypqAzz
- *** Failers
-No match
+\= Expect no match
abxyzpqrrabbxyyyypqAzz
No match
abxyzpqrrrrabbxyyyypqAzz
@@ -1079,8 +1007,7 @@ No match
0: abczz
abcabczz
0: abcabczz
- *** Failers
-No match
+\= Expect no match
zz
No match
abcabcabczz
@@ -1105,8 +1032,7 @@ No match
0: abbbbbbbbbbbc
bbbbbbbbbbbac
0: bbbbbbbbbbbac
- *** Failers
-No match
+\= Expect no match
aaac
No match
abbbbbbbbbbbac
@@ -1129,8 +1055,7 @@ No match
0: abbbbbbbbbbbc
bbbbbbbbbbbac
0: bbbbbbbbbbbac
- *** Failers
-No match
+\= Expect no match
aaac
No match
abbbbbbbbbbbac
@@ -1147,8 +1072,7 @@ No match
0: bbabc
bababc
0: bababc
- *** Failers
-No match
+\= Expect no match
bababbc
No match
babababc
@@ -1161,8 +1085,7 @@ No match
0: bbabc
bababc
0: bababc
- *** Failers
-No match
+\= Expect no match
bababbc
No match
babababc
@@ -1185,8 +1108,7 @@ No match
0: d
ething
0: e
- *** Failers
-No match
+\= Expect no match
fthing
No match
[thing
@@ -1203,8 +1125,7 @@ No match
0: d
ething
0: e
- *** Failers
-No match
+\= Expect no match
athing
No match
fthing
@@ -1217,8 +1138,7 @@ No match
0: [
\\thing
0: \
- *** Failers
- 0: *
+\= Expect no match
athing
No match
bthing
@@ -1237,8 +1157,7 @@ No match
0: a
fthing
0: f
- *** Failers
- 0: *
+\= Expect no match
]thing
No match
cthing
@@ -1281,8 +1200,7 @@ No match
0: 10
100
0: 100
- *** Failers
-No match
+\= Expect no match
abc
No match
@@ -1299,8 +1217,7 @@ No match
0: xxx0
xxx1234
0: xxx1234
- *** Failers
-No match
+\= Expect no match
xxx
No match
@@ -1311,12 +1228,11 @@ No match
0: xx123
123456
0: 123456
- *** Failers
-No match
- 123
-No match
x1234
0: x1234
+\= Expect no match
+ 123
+No match
/^.+?[0-9][0-9][0-9]$/
x123
@@ -1325,18 +1241,16 @@ No match
0: xx123
123456
0: 123456
- *** Failers
-No match
- 123
-No match
x1234
0: x1234
+\= Expect no match
+ 123
+No match
/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
abc!pqr=apquxz.ixr.zzz.ac.uk
0: abc!pqr=apquxz.ixr.zzz.ac.uk
- *** Failers
-No match
+\= Expect no match
!pqr=apquxz.ixr.zzz.ac.uk
No match
abc!=apquxz.ixr.zzz.ac.uk
@@ -1349,7 +1263,8 @@ No match
/:/
Well, we need a colon: somewhere
0: :
- *** Fail if we don't
+\= Expect no match
+ No match without a colon
No match
/([\da-f:]+)$/i
@@ -1369,8 +1284,7 @@ No match
0: def
Any old stuff
0: ff
- *** Failers
-No match
+\= Expect no match
0zzz
No match
gzzz
@@ -1385,8 +1299,7 @@ No match
0: .1.2.3
A.12.123.0
0: A.12.123.0
- *** Failers
-No match
+\= Expect no match
.1.2.3333
No match
1.2.3
@@ -1399,8 +1312,7 @@ No match
0: 1 IN SOA non-sp1 non-sp2(
1 IN SOA non-sp1 non-sp2 (
0: 1 IN SOA non-sp1 non-sp2 (
- *** Failers
-No match
+\= Expect no match
1IN SOA non-sp1 non-sp2(
No match
@@ -1417,8 +1329,7 @@ No match
0: sxk.zzz.ac.uk.
x-.y-.
0: x-.y-.
- *** Failers
-No match
+\= Expect no match
-abc.peq.
No match
@@ -1431,8 +1342,7 @@ No match
0: *.c3-b.c
*.c-a.b-c
0: *.c-a.b-c
- *** Failers
-No match
+\= Expect no match
*.0
No match
*.a-
@@ -1469,22 +1379,18 @@ No match
0: "abcd" ;
\"\" ; rhubarb
0: "" ; rhubarb
- *** Failers
-No match
+\= Expect 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
+\= Expect no match
abc
No match
ab cde
@@ -1493,8 +1399,7 @@ No match
/(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
ab c
0: ab c
- *** Failers
-No match
+\= Expect no match
abc
No match
ab cde
@@ -1505,8 +1410,7 @@ No match
0: a bcd
a b d
0: a b d
- *** Failers
-No match
+\= Expect no match
abcd
No match
ab d
@@ -1621,8 +1525,7 @@ No match
0: 12345678ab
12345678__
0: 12345678__
- *** Failers
-No match
+\= Expect no match
1234567
No match
@@ -1635,8 +1538,7 @@ No match
0: 12345
aaaaa
0: aaaaa
- *** Failers
-No match
+\= Expect no match
123456
No match
@@ -1664,8 +1566,7 @@ No match
0: From abcd Mon Sep 01 12:33
From abcd Mon Sep 1 12:33:02 1997
0: From abcd Mon Sep 1 12:33
- *** Failers
-No match
+\= Expect no match
From abcd Sep 01 12:33:02 1997
No match
@@ -1696,8 +1597,7 @@ No match
/^(\D*)(?=\d)(?!123)/
abc456
0: abc
- *** Failers
-No match
+\= Expect no match
abc123
No match
@@ -1723,16 +1623,14 @@ No match
/(?!^)abc/
the abc
0: abc
- *** Failers
-No match
+\= Expect no match
abc
No match
/(?=^)abc/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
the abc
No match
@@ -1988,8 +1886,7 @@ No match
A missing angle <user\@some.where
0: user@some.where
1: user@some
- *** Failers
-No match
+\= Expect no match
The quick brown fox
No match
@@ -2593,8 +2490,7 @@ No match
A missing angle <user\@some.where
0: user@some.where
1: user@some
- *** Failers
-No match
+\= Expect no match
The quick brown fox
No match
@@ -2627,8 +2523,7 @@ No match
0: A\x00\x00Z
An A\0\x0\0Z
0: A\x00\x00\x00Z
- *** Failers
-No match
+\= Expect no match
A\0Z
No match
A\0\x0\0\x0Z
@@ -2645,8 +2540,7 @@ No match
0: \x0d
\tabc
0: \x09
- *** Failers
-No match
+\= Expect no match
abc
No match
@@ -2662,8 +2556,7 @@ No match
0: abbbc
abbc
0: abbc
- *** Failers
-No match
+\= Expect no match
abc
No match
abbbbbc
@@ -2684,8 +2577,7 @@ No match
/^[W-c]+$/
WXY_^abc
0: WXY_^abc
- *** Failers
-No match
+\= Expect no match
wxy
No match
@@ -2714,8 +2606,7 @@ No match
/^abc$/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
qqq\nabc
No match
abc\nzzz
@@ -2728,8 +2619,7 @@ No match
0: abc
abc\n
0: abc
- *** Failers
-No match
+\= Expect no match
qqq\nabc
No match
abc\nzzz
@@ -2742,8 +2632,7 @@ No match
0: abc\x0adef
/\A(.)*\Z/m
- *** Failers
- 0: *** Failers
+\= Expect no match
abc\ndef
No match
@@ -2756,24 +2645,21 @@ No match
/[-az]+/
az-
0: az-
- *** Failers
- 0: a
+\= Expect no match
b
No match
/[az-]+/
za-
0: za-
- *** Failers
- 0: a
+\= Expect no match
b
No match
/[a\-z]+/
a-z
0: a-z
- *** Failers
- 0: a
+\= Expect no match
b
No match
@@ -2784,16 +2670,14 @@ No match
/[\d-]+/
12-34
0: 12-34
- *** Failers
-No match
+\= Expect no match
aaa
No match
/[\d-z]+/
12-34z
0: 12-34z
- *** Failers
-No match
+\= Expect no match
aaa
No match
@@ -2804,8 +2688,7 @@ No match
/\x20Z/
the Zoo
0: Z
- *** Failers
-No match
+\= Expect no match
Zulu
No match
@@ -2828,8 +2711,7 @@ No match
/^a.b/newline=lf
a\rb
0: a\x0db
- *** Failers
-No match
+\= Expect no match
a\nb
No match
@@ -2838,8 +2720,7 @@ No match
0: abc
abc\n
0: abc
- *** Failers
-No match
+\= Expect no match
abc\ndef
No match
@@ -2918,13 +2799,7 @@ No match
1: baNOTc
bacccd
0: baccc
- *** Failers
- 0: *** Failers
- 1: *** Failer
- 2: *** Faile
- 3: *** Fail
- 4: *** Fai
- 5: *** Fa
+\= Expect no match
anything
No match
b\bc
@@ -2955,8 +2830,7 @@ No match
/[^k]$/
abc
0: c
- *** Failers
- 0: s
+\= Expect no match
abk
No match
@@ -2967,8 +2841,7 @@ No match
0: bc
kabc
0: abc
- *** Failers
- 0: ers
+\= Expect no match
abk
No match
akb
@@ -2981,8 +2854,7 @@ No match
0: 12345678@a.b.c.d
123456789\@x.y.z
0: 123456789@x.y.z
- *** Failers
-No match
+\= Expect no match
12345678\@x.y.uk
No match
1234567\@a.b.c.d
@@ -3038,8 +2910,7 @@ No match
1: .23
1.875000282
0: .875
- *** Failers
-No match
+\= Expect no match
1.235
No match
@@ -3134,8 +3005,7 @@ Matched, but offsets vector is too small to show all matches
/^(\D*)(?=\d)(?!123)/
ABC445
0: ABC
- *** Failers
-No match
+\= Expect no match
ABC123
No match
@@ -3144,8 +3014,7 @@ No match
0: W46]
-46]789
0: -46]
- *** Failers
-No match
+\= Expect no match
Wall
No match
Zebra
@@ -3174,8 +3043,7 @@ No match
0: ]
\\backslash
0: \
- *** Failers
-No match
+\= Expect no match
-46]789
No match
well
@@ -3188,10 +3056,12 @@ No match
/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
+\= Expect no match
word cat dog elephant mussel cow horse canary baboon snake shark
No match
/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+\= Expect no match
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
@@ -3267,25 +3137,25 @@ No match
8:
/^(a){1,1}/
- bcd
-No match
abc
0: a
aab
0: a
-
-/^(a){1,2}/
+\= Expect no match
bcd
No match
+
+/^(a){1,2}/
abc
0: a
aab
0: aa
1: a
-
-/^(a){1,3}/
+\= Expect no match
bcd
No match
+
+/^(a){1,3}/
abc
0: a
aab
@@ -3295,10 +3165,11 @@ No match
0: aaa
1: aa
2: a
-
-/^(a){1,}/
+\= Expect no match
bcd
No match
+
+/^(a){1,}/
abc
0: a
aab
@@ -3317,6 +3188,9 @@ No match
5: aaa
6: aa
7: a
+\= Expect no match
+ bcd
+No match
/.*\.gif/
borfle\nbib.gif\nno
@@ -3381,8 +3255,7 @@ No match
0: 1234X
BarFoo
0: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
@@ -3399,8 +3272,7 @@ No match
0: abcde\x0a1234X
BarFoo
0: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
@@ -3417,8 +3289,7 @@ No match
0: abcde\x0a1234X
BarFoo
0: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
@@ -3427,14 +3298,12 @@ No match
0: abcde\x0a1234X
BarFoo
0: B
- *** Failers
-No match
+\= Expect no match
abcde\nBar
No match
/^.*B/
- **** Failers
-No match
+\= Expect no match
abc\nB
No match
@@ -3485,32 +3354,28 @@ No match
/^[abcdefghijklmnopqrstuvwxy0123456789]/
n
0: n
- *** Failers
-No match
+\= Expect no match
z
No match
/abcde{0,0}/
abcd
0: abcd
- *** Failers
-No match
+\= Expect no match
abce
No match
/ab[cd]{0,0}e/
abe
0: abe
- *** Failers
-No match
+\= Expect no match
abcde
No match
/ab(c){0,0}d/
abd
0: abd
- *** Failers
-No match
+\= Expect no match
abcd
No match
@@ -3521,16 +3386,14 @@ No match
0: ab
abbbb
0: abbbb
- *** Failers
- 0: a
+\= Expect no match
bbbbb
No match
/ab\d{0}e/
abe
0: abe
- *** Failers
-No match
+\= Expect no match
ab1e
No match
@@ -3584,8 +3447,7 @@ No match
/a.b/
acb
0: acb
- *** Failers
-No match
+\= Expect no match
a\nb
No match
@@ -3626,10 +3488,11 @@ No match
0: bbbbbac
/(?!\A)x/m
- x\nb\n
-No match
a\bx\n
0: x
+\= Expect no match
+ x\nb\n
+No match
/\x0{ab}/
\0{ab}
@@ -3652,8 +3515,7 @@ No match
0: foo
rfoosh
0: foo
- *** Failers
-No match
+\= Expect no match
barfoo
No match
towbarfoo
@@ -3662,8 +3524,7 @@ No match
/\w{3}(?<!bar)foo/
catfood
0: catfoo
- *** Failers
-No match
+\= Expect no match
foo
No match
barfoo
@@ -3674,8 +3535,7 @@ No match
/(?<=(foo)a)bar/
fooabar
0: bar
- *** Failers
-No match
+\= Expect no match
bar
No match
foobbar
@@ -3684,8 +3544,7 @@ No match
/\Aabc\z/m
abc
0: abc
- *** Failers
-No match
+\= Expect no match
abc\n
No match
qqq\nabc
@@ -3696,6 +3555,7 @@ No match
No match
"(?>.*/)foo"
+\= Expect no match
/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
No match
@@ -3708,16 +3568,14 @@ No match
0: .230003938
1.875000282
0: .875000282
- *** Failers
-No match
+\= Expect 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
- *** Failers
-No match
+\= Expect no match
this is not a line with only words and spaces!
No match
@@ -3737,8 +3595,7 @@ No match
/((?>\d+))(\w)/
12345a
0: 12345a
- *** Failers
-No match
+\= Expect no match
12345+
No match
@@ -3786,8 +3643,7 @@ No match
0: (abc)
(abc(def)xyz)
0: (abc(def)xyz)
- *** Failers
-No match
+\= Expect no match
((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -3796,8 +3652,7 @@ No match
0: ab
Ab
0: Ab
- *** Failers
-No match
+\= Expect no match
aB
No match
AB
@@ -3806,8 +3661,7 @@ No match
/(a (?x)b c)d e/
a bcd e
0: a bcd e
- *** Failers
-No match
+\= Expect no match
a b cd e
No match
abcd e
@@ -3818,8 +3672,7 @@ No match
/(a b(?x)c d (?-x)e f)/
a bcde f
0: a bcde f
- *** Failers
-No match
+\= Expect no match
abcdef
No match
@@ -3828,8 +3681,7 @@ No match
0: abc
aBc
0: aBc
- *** Failers
-No match
+\= Expect no match
abC
No match
aBC
@@ -3848,8 +3700,7 @@ No match
0: abc
aBc
0: aBc
- *** Failers
-No match
+\= Expect no match
ABC
No match
abC
@@ -3862,8 +3713,7 @@ No match
0: aBc
aBBc
0: aBBc
- *** Failers
-No match
+\= Expect no match
aBC
No match
aBBC
@@ -3874,8 +3724,7 @@ No match
0: abcd
abCd
0: abCd
- *** Failers
-No match
+\= Expect no match
aBCd
No match
abcD
@@ -3888,8 +3737,7 @@ No match
0: more than MILLION
more \n than Million
0: more \x0a than Million
- *** Failers
-No match
+\= Expect no match
MORE THAN MILLION
No match
more \n than \n million
@@ -3902,8 +3750,7 @@ No match
0: more than MILLION
more \n than Million
0: more \x0a than Million
- *** Failers
-No match
+\= Expect no match
MORE THAN MILLION
No match
more \n than \n million
@@ -3916,8 +3763,7 @@ No match
0: aBbc
aBBc
0: aBBc
- *** Failers
-No match
+\= Expect no match
Abc
No match
abAb
@@ -3930,8 +3776,7 @@ No match
0: abc
aBc
0: aBc
- *** Failers
-No match
+\= Expect no match
Ab
No match
abC
@@ -3944,8 +3789,7 @@ No match
0: xxc
aBxxc
0: xxc
- *** Failers
-No match
+\= Expect no match
Abxxc
No match
ABxxc
@@ -3958,8 +3802,7 @@ No match
0: abc:
12
0: 12
- *** Failers
-No match
+\= Expect no match
123
No match
xyz
@@ -3970,8 +3813,7 @@ No match
0: abc:
12
0: 12
- *** Failers
-No match
+\= Expect no match
123
No match
xyz
@@ -3986,8 +3828,7 @@ No match
0: cat
focat
0: cat
- *** Failers
-No match
+\= Expect no match
foocat
No match
@@ -4000,8 +3841,7 @@ No match
0: cat
focat
0: cat
- *** Failers
-No match
+\= Expect no match
foocat
No match
@@ -4182,8 +4022,7 @@ No match
0: 12-sep-98
12-09-98
0: 12-09-98
- *** Failers
-No match
+\= Expect no match
sep-12-98
No match
@@ -4212,8 +4051,7 @@ No match
0: bbx
BBx
0: BBx
- *** Failers
-No match
+\= Expect no match
abcX
No match
aBCX
@@ -4238,8 +4076,7 @@ No match
0: f
France
0: F
- *** Failers
-No match
+\= Expect no match
Africa
No match
@@ -4256,8 +4093,7 @@ No match
0: z
Zambesi
0: Z
- *** Failers
-No match
+\= Expect no match
aCD
No match
XY
@@ -4266,8 +4102,7 @@ No match
/(?<=foo\n)^bar/m
foo\nbar
0: bar
- *** Failers
-No match
+\= Expect no match
bar
No match
baz\nbar
@@ -4280,16 +4115,14 @@ No match
0: baz
koobarbaz
0: baz
- *** Failers
-No match
+\= Expect no match
baz
No match
foobarbaz
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
+# 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
@@ -4298,8 +4131,7 @@ No match
0: abc
ababc
0: abc
- *** Failers
-No match
+\= Expect no match
xbc
No match
axc
@@ -4334,8 +4166,7 @@ No match
/ab+bc/
abbc
0: abbc
- *** Failers
-No match
+\= Expect no match
abc
No match
abq
@@ -4358,8 +4189,7 @@ No match
0: abbbbc
/ab{4,5}bc/
- *** Failers
-No match
+\= Expect no match
abq
No match
abbbbc
@@ -4388,8 +4218,7 @@ No match
/^abc$/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
abbbbc
No match
abcc
@@ -4404,10 +4233,9 @@ No match
/abc$/
aabc
0: abc
- *** Failers
-No match
aabc
0: abc
+\= Expect no match
aabcd
No match
@@ -4432,8 +4260,7 @@ No match
/a[bc]d/
abd
0: abd
- *** Failers
-No match
+\= Expect no match
axyzd
No match
abc
@@ -4466,8 +4293,7 @@ No match
/a[^bc]d/
aed
0: aed
- *** Failers
-No match
+\= Expect no match
abd
No match
abd
@@ -4480,10 +4306,9 @@ No match
/a[^]b]c/
adc
0: adc
- *** Failers
-No match
a-c
0: a-c
+\= Expect no match
a]c
No match
@@ -4496,8 +4321,7 @@ No match
0: a
/\by\b/
- *** Failers
-No match
+\= Expect no match
xy
No match
yz
@@ -4506,8 +4330,7 @@ No match
No match
/\Ba\B/
- *** Failers
- 0: a
+\= Expect no match
a-
No match
-a
@@ -4534,10 +4357,7 @@ No match
/\W/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
a
No match
@@ -4548,10 +4368,7 @@ No match
/a\Sb/
a-b
0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
+\= Expect no match
a b
No match
@@ -4562,10 +4379,7 @@ No match
/\D/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
1
No match
@@ -4576,10 +4390,7 @@ No match
/[\W]/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
a
No match
@@ -4590,10 +4401,7 @@ No match
/a[\S]b/
a-b
0: a-b
- *** Failers
-No match
- a-b
- 0: a-b
+\= Expect no match
a b
No match
@@ -4604,10 +4412,7 @@ No match
/[\D]/
-
0: -
- *** Failers
- 0: *
- -
- 0: -
+\= Expect no match
1
No match
@@ -4634,6 +4439,9 @@ No match
0: a((b
/a\\b/
+ a\\b
+ 0: a\b
+\= Expect no match
a\b
No match
@@ -4695,14 +4503,11 @@ No match
0: cde
/abc/
- *** Failers
-No match
+\= Expect no match
b
No match
-
/a*/
-
/([abc])*d/
abbbcd
@@ -4774,8 +4579,7 @@ No match
0: adcdcde
/a[bcd]+dcdcde/
- *** Failers
-No match
+\= Expect no match
abcde
No match
adcdcde
@@ -4804,8 +4608,7 @@ No match
0: ij
reffgz
0: effgz
- *** Failers
-No match
+\= Expect no match
effg
No match
bcdd
@@ -4820,8 +4623,7 @@ No match
0: a
/multiple words of text/
- *** Failers
-No match
+\= Expect no match
aa
No match
uh-uh
@@ -4860,8 +4662,7 @@ No match
0: ABC
ABABC
0: ABC
- *** Failers
-No match
+\= Expect no match
aaxabxbaxbbx
No match
XBC
@@ -4894,8 +4695,7 @@ No match
0: ABBC
/ab+bc/i
- *** Failers
-No match
+\= Expect no match
ABC
No match
ABQ
@@ -4920,8 +4720,7 @@ No match
0: ABBBBC
/ab{4,5}?bc/i
- *** Failers
-No match
+\= Expect no match
ABQ
No match
ABBBBC
@@ -4950,8 +4749,7 @@ No match
/^abc$/i
ABC
0: ABC
- *** Failers
-No match
+\= Expect no match
ABBBBC
No match
ABCC
@@ -4986,10 +4784,9 @@ No match
0: AXYZC
/a.*c/i
- *** Failers
-No match
AABC
0: AABC
+\= Expect no match
AXYZD
No match
@@ -5000,8 +4797,7 @@ No match
/a[b-d]e/i
ACE
0: ACE
- *** Failers
-No match
+\= Expect no match
ABC
No match
ABD
@@ -5034,8 +4830,7 @@ No match
/a[^-b]c/i
ADC
0: ADC
- *** Failers
-No match
+\= Expect no match
ABD
No match
A-C
@@ -5056,8 +4851,7 @@ No match
0: EF
/$b/i
- *** Failers
-No match
+\= Expect no match
A]C
No match
B
@@ -5074,6 +4868,7 @@ No match
0: A((B
/a\\b/i
+\= Expect no match
A\=notbol
No match
@@ -5152,7 +4947,6 @@ No match
/abc/i
/a*/i
-
/([abc])*d/i
ABBBCD
@@ -5189,6 +4983,7 @@ No match
0: HIJ
/^(ab|cd)e/i
+\= Expect no match
ABCDE
No match
@@ -5250,8 +5045,7 @@ No match
0: IJ
REFFGZ
0: EFFGZ
- *** Failers
-No match
+\= Expect no match
ADCDCDE
No match
EFFG
@@ -5276,8 +5070,7 @@ No match
0: C
/multiple words of text/i
- *** Failers
-No match
+\= Expect no match
AA
No match
UH-UH
@@ -5423,8 +5216,7 @@ No match
/(?<=a)b/
ab
0: b
- *** Failers
-No match
+\= Expect no match
cb
No match
b
@@ -5489,8 +5281,7 @@ No match
0: Ab
/(?:(?i)a)b/
- *** Failers
-No match
+\= Expect no match
cb
No match
aB
@@ -5515,8 +5306,7 @@ No match
0: Ab
/(?i:a)b/
- *** Failers
-No match
+\= Expect no match
aB
No match
aB
@@ -5541,10 +5331,9 @@ No match
0: aB
/(?:(?-i)a)b/i
- *** Failers
-No match
aB
0: aB
+\= Expect no match
Ab
No match
@@ -5559,8 +5348,7 @@ No match
0: aB
/(?:(?-i)a)b/i
- *** Failers
-No match
+\= Expect no match
Ab
No match
AB
@@ -5585,8 +5373,7 @@ No match
0: aB
/(?-i:a)b/i
- *** Failers
-No match
+\= Expect no match
AB
No match
Ab
@@ -5603,8 +5390,7 @@ No match
0: aB
/(?-i:a)b/i
- *** Failers
-No match
+\= Expect no match
Ab
No match
AB
@@ -5613,8 +5399,7 @@ No match
/((?-i:a))b/i
/((?-i:a.))b/i
- *** Failers
-No match
+\= Expect no match
AB
No match
a\nB
@@ -5650,8 +5435,7 @@ No match
0: aaac
/(?<![cd])b/
- *** Failers
-No match
+\= Expect no match
B\nB
No match
dbcb
@@ -5672,8 +5456,7 @@ No match
0: b
/^(?:a?b?)*$/
- *** Failers
-No match
+\= Expect no match
dbcb
No match
a--
@@ -5718,8 +5501,7 @@ No match
/^b/
/()^b/
- *** Failers
-No match
+\= Expect no match
a\nb\nc\n
No match
a\nb\nc\n
@@ -5736,8 +5518,7 @@ No match
0: a
/(?(?=a)b|a)/
- *** Failers
-No match
+\= Expect no match
a
No match
a
@@ -5774,8 +5555,7 @@ No match
0: abcd
xy:z:::abcd
0: xy:z:::abcd
- *** Failers
- 0: Failers
+\= Expect no match
abcd:
No match
abcd:
@@ -5821,8 +5601,7 @@ No match
5: abc
/a\Z/
- *** Failers
-No match
+\= Expect no match
aaab
No match
a\nb\n
@@ -5841,26 +5620,25 @@ No match
/b\z/
a\nb
0: b
- *** Failers
-No match
/(?>.*)(?<=(abcd|wxyz))/
alphabetabcd
0: alphabetabcd
endingwxyz
0: endingwxyz
- *** Failers
-No match
+\= Expect 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
+\= Expect no match
word cat dog elephant mussel cow horse canary baboon snake shark
No match
/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
+\= Expect no match
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
@@ -5869,8 +5647,7 @@ No match
0: foo
123999foo
0: foo
- *** Failers
-No match
+\= Expect no match
123abcfoo
No match
@@ -5879,8 +5656,7 @@ No match
0: foo
123999foo
0: foo
- *** Failers
-No match
+\= Expect no match
123abcfoo
No match
@@ -5889,8 +5665,7 @@ No match
0: foo
123456foo
0: foo
- *** Failers
-No match
+\= Expect no match
123999foo
No match
@@ -5899,8 +5674,7 @@ No match
0: foo
123456foo
0: foo
- *** Failers
-No match
+\= Expect no match
123999foo
No match
@@ -5948,8 +5722,7 @@ No match
0: -
0digit
0: 0
- *** Failers
-No match
+\= Expect no match
bcdef
No match
@@ -5978,7 +5751,8 @@ No match
0: x
/(?!^)x/m
- a\nxb\n
+\= Expect no match
+ a\nxb\n
No match
/abc\Qabc\Eabc/
@@ -5992,8 +5766,7 @@ No match
/ abc\Q abc\Eabc/x
abc abcabc
0: abc abcabc
- *** Failers
-No match
+\= Expect no match
abcabcabc
No match
@@ -6033,8 +5806,7 @@ No match
/\Gabc/
abc
0: abc
- *** Failers
-No match
+\= Expect no match
xyzabc
No match
@@ -6052,8 +5824,7 @@ No match
/a(?x: b c )d/
XabcdY
0: abcd
- *** Failers
-No match
+\= Expect no match
Xa b c d Y
No match
@@ -6066,8 +5837,7 @@ No match
/(?i)AB(?-i)C/
XabCY
0: abC
- *** Failers
-No match
+\= Expect no match
XabcY
No match
@@ -6076,8 +5846,7 @@ No match
0: abCE
DE
0: DE
- *** Failers
-No match
+\= Expect no match
abcE
No match
abCe
@@ -6098,12 +5867,12 @@ No match
0: d
]
0: ]
- *** Failers
- 0: a
+\= Expect no match
b
No match
/(a+)*b/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
@@ -6150,22 +5919,21 @@ Failed: error -40: backreference condition or recursion test is not supported fo
/line\nbreak/firstline
this is a line\nbreak
0: line\x0abreak
- ** Failers
-No match
+\= Expect no match
line one\nthis is a line\nbreak in the second line
No match
/line\nbreak/m,firstline
this is a line\nbreak
0: line\x0abreak
- ** Failers
-No match
+\= Expect no match
line one\nthis is a line\nbreak in the second line
No match
/1234/
123\=ps
Partial match: 123
+\= Expect no match
a4\=ps,dfa_restart
No match
@@ -6238,8 +6006,7 @@ Subject length lower bound = 3
0: abc
xyz\r\nabc
0: abc
- ** Failers
-No match
+\= Expect no match
xyz\rabc
No match
xyzabc\r
@@ -6260,8 +6027,7 @@ Last code unit = 'c'
Subject length lower bound = 3
xyz\r\nabclf>
0: abc
- ** Failers
-No match
+\= Expect no match
xyz\nabclf
No match
xyz\rabclf
@@ -6276,8 +6042,7 @@ Last code unit = 'c'
Subject length lower bound = 3
xyz\rabc
0: abc
- ** Failers
-No match
+\= Expect no match
xyz\nabc
No match
xyz\r\nabc
@@ -6387,50 +6152,49 @@ Subject length lower bound = 5
3: a
/(a|)*\d/
- aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-No match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
-
-/(?>a|)*\d/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
+
+/(?>a|)*\d/
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
-
-/(?:a|)*\d/
+\= Expect no match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
No match
+
+/(?:a|)*\d/
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
+\= Expect no match
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
/^a.b/newline=lf
a\rb
0: a\x0db
- ** Failers
-No match
+\= Expect no match
a\nb
No match
/^a.b/newline=cr
a\nb
0: a\x0ab
- ** Failers
-No match
+\= Expect no match
a\rb
No match
/^a.b/newline=anycrlf
a\x85b
0: a\x85b
- ** Failers
-No match
+\= Expect no match
a\rb
No match
/^a.b/newline=any
- ** Failers
-No match
+\= Expect no match
a\nb
No match
a\rb
@@ -6471,8 +6235,7 @@ No match
0: a\x0cb
a\x85b
0: a\x85b
- ** Failers
-No match
+\= Expect no match
a\n\rb
No match
@@ -6513,8 +6276,7 @@ No match
0: a\x0a\x0db
a\n\r\x85\x0cb
0: a\x0a\x0d\x85\x0cb
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -6533,8 +6295,7 @@ No match
0: a\x0a\x0d\x0a\x0db
a\n\n\r\nb
0: a\x0a\x0a\x0d\x0ab
- ** Failers
-No match
+\= Expect no match
a\n\n\n\rb
No match
a\r
@@ -6543,8 +6304,7 @@ No match
/.+foo/
afoo
0: afoo
- ** Failers
-No match
+\= Expect no match
\r\nfoo
No match
\nfoo
@@ -6555,16 +6315,14 @@ No match
0: afoo
\nfoo
0: \x0afoo
- ** Failers
-No match
+\= Expect no match
\r\nfoo
No match
/.+foo/newline=any
afoo
0: afoo
- ** Failers
-No match
+\= Expect no match
\nfoo
No match
\r\nfoo
@@ -6583,16 +6341,14 @@ No match
0:
abc\n\rxyz
0:
- ** Failers
-No match
+\= Expect no match
abc\r\nxyz
No match
/^X/m
XABC
0: X
- ** Failers
-No match
+\= Expect no match
XABC\=notbol
No match
@@ -6639,8 +6395,7 @@ No match
0: abcabc
xyzabc
0: xyzabc
- ** Failers
-No match
+\= Expect no match
xyzxyz
No match
@@ -6649,8 +6404,7 @@ No match
0: X X\x0a
X\x09X\x0b
0: X\x09X\x0b
- ** Failers
-No match
+\= Expect no match
\xa0 X\x0a
No match
@@ -6661,8 +6415,7 @@ No match
0: \x09 \xa0\x0a\x0b\x0c\x0d
\x09\x20\xa0\x0a\x0b\x0c
0: \x09 \xa0\x0a\x0b\x0c
- ** Failers
-No match
+\= Expect no match
\x09\x20\xa0\x0a\x0b
No match
@@ -6682,8 +6435,7 @@ No match
0: XNNNYZ
> X NYQZ
0: X NYQZ
- ** Failers
-No match
+\= Expect no match
>XYZ
No match
> X NY Z
@@ -6696,6 +6448,7 @@ No match
0: \x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
/.+A/newline=crlf
+\= Expect no match
\r\nA
No match
@@ -6723,8 +6476,7 @@ Subject length lower bound = 3
0: a\x0ab
a\r\nb
0: a\x0d\x0ab
- ** Failers
-No match
+\= Expect no match
a\x85b
No match
a\x0bb
@@ -6759,8 +6511,7 @@ Subject length lower bound = 2
0: a\x0ab
a\r\nb
0: a\x0d\x0ab
- ** Failers
-No match
+\= Expect no match
a\x85b
No match
a\x0bb
@@ -6795,12 +6546,11 @@ Subject length lower bound = 4
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
+\= Expect no match
+ a\x0b\x0bb
No match
a\x85\x85b
No match
- a\x0b\0bb
-No match
/a\R{2,4}b/I,bsr=unicode
Capturing subpattern count = 0
@@ -6816,10 +6566,9 @@ Subject length lower bound = 4
0: a\x0d\x0a\x0a\x0d\x0db
a\x85\x85b
0: a\x85\x85b
- a\x0b\0bb
-No match
- ** Failers
-No match
+ a\x0b\x0bb
+ 0: a\x0b\x0bb
+\= Expect no match
a\r\r\r\r\rb
No match
@@ -6828,20 +6577,17 @@ No match
0: abc
/a[]b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
-No match
+\= Expect no match
ab
No match
/a[]+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
-No match
+\= Expect no match
ab
No match
/a[]*+b/alt_bsux,allow_empty_class,match_unset_backref,dupnames
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -6850,8 +6596,7 @@ No match
0: aXb
a\nb
0: a\x0ab
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -6860,16 +6605,14 @@ No match
0: aXb
a\nX\nXb
0: a\x0aX\x0aXb
- ** Failers
-No match
+\= Expect no match
ab
No match
/X$/dollar_endonly
X
0: X
- ** Failers
-No match
+\= Expect no match
X\n
No match
@@ -6894,8 +6637,7 @@ No match
+2 ^ ^ z
+3 ^ ^
0: xyz
- ** Failers
-No match
+\= Expect no match
abc
No match
abcxypqr
@@ -6912,20 +6654,7 @@ No match
+2 ^ ^ z
+3 ^ ^
0: xyz
- ** Failers
---->** Failers
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
- +0 ^ x
-No match
+\= Expect no match
abc
--->abc
+0 ^ x
@@ -7018,12 +6747,14 @@ Partial match: 123999
0: 999Y
/Z(*F)/
+\= Expect no match
Z\=ps
No match
ZA\=ps
No match
/Z(?!)/
+\= Expect no match
Z\=ps
No match
ZA\=ps
@@ -7056,6 +6787,7 @@ Partial match: dogs
/Z(*F)Q|ZXY/
Z\=ps
Partial match: Z
+\= Expect no match
ZA\=ps
No match
X\=ps
@@ -7124,8 +6856,7 @@ Subject length lower bound = 3
0: abc
the quick xyz brown fox
0: xyz
- ** Failers
-No match
+\= Expect no match
thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
No match
@@ -7137,8 +6868,7 @@ Subject length lower bound = 0
0: abc
the quick xyz brown fox
0: xyz
- ** Failers
-No match
+\= Expect no match
thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd
No match
@@ -7184,8 +6914,7 @@ Partial match: abcde
0: BC
CCD
0: CC
- ** Failers
-No match
+\= Expect no match
CAD
No match
@@ -7194,8 +6923,7 @@ No match
0: CC
BCD
0: BC
- ** Failers
-No match
+\= Expect no match
ABCD
No match
CAD
@@ -7208,8 +6936,6 @@ No match
Failed: error -42: pattern contains an item that is not supported for DFA matching
/^(?=a(*SKIP)b|ac)/
- ** Failers
-No match
ac
Failed: error -42: pattern contains an item that is not supported for DFA matching
@@ -7220,10 +6946,6 @@ Failed: error -42: pattern contains an item that is not supported for DFA matchi
/^(?=a(*PRUNE)b)/
ab
Failed: error -42: pattern contains an item that is not supported for DFA matching
- ** Failers
-No match
- ac
-Failed: error -42: pattern contains an item that is not supported for DFA matching
/^(?(?!a(*SKIP)b))/
ac
@@ -7281,12 +7003,13 @@ Partial match: abc
Partial match: abc
/abc\B/
- abc
-No match
abc\=ps
Partial match: abc
abc\=ph
Partial match: abc
+\= Expect no match
+ abc
+No match
/.+/
abc\=offset=0
@@ -7295,18 +7018,19 @@ Partial match: abc
0: bc
abc\=offset=2
0: c
- abc\=offset=3
-No match
+\= Bad offsets
abc\=offset=4
Failed: error -33: bad offset value
abc\=offset=-4
** Invalid value in 'offset=-4'
+\= Expect no match
+ abc\=offset=3
+No match
/^(?:a)++\w/
aaaab
0: aaaab
- ** Failers
-No match
+\= Expect no match
aaaa
No match
bbb
@@ -7318,8 +7042,7 @@ No match
1: aa
aaaa
0: aa
- ** Failers
-No match
+\= Expect no match
bbb
No match
@@ -7328,16 +7051,14 @@ No match
0: aaaab
bbb
0: b
- ** Failers
-No match
+\= Expect no match
aaaa
No match
/^(a)++\w/
aaaab
0: aaaab
- ** Failers
-No match
+\= Expect no match
aaaa
No match
bbb
@@ -7346,8 +7067,7 @@ No match
/^(a|)++\w/
aaaab
0: aaaab
- ** Failers
-No match
+\= Expect no match
aaaa
No match
bbb
@@ -7357,8 +7077,7 @@ No match
abcabcabc
0: abc
0+ abcabc
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -7366,8 +7085,7 @@ No match
abcabcabc
0: abc
0+ abcabc
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -7375,8 +7093,7 @@ No match
abcabcabc
0: abc
0+ abcabc
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -7385,8 +7102,7 @@ No match
0: xyz
/(?=abc){1}xyz/
- ** Failers
-No match
+\= Expect no match
xyz
No match
@@ -7458,14 +7174,6 @@ Matched, but offsets vector is too small to show all matches
2: aa
3: a
-/ab\Cde/
- abXde
- 0: abXde
-
-/(?<=ab\Cde)X/
- abZdeX
- 0: X
-
/^\R/
\r\=ps
0: \x0d
@@ -7922,6 +7630,7 @@ Callout (5): 'x\x00z'
/(?(?!)a|b)/
bbb
0: b
+\= Expect no match
aaa
No match
@@ -7938,4 +7647,30 @@ No match
0:
0:
+/abc/use_offset_limit
+ 1234abcde\=offset_limit=100
+ 0: abc
+ 1234abcde\=offset_limit=9
+ 0: abc
+ 1234abcde\=offset_limit=4
+ 0: abc
+ 1234abcde\=offset_limit=4,offset=4
+ 0: abc
+\= Expect no match
+ 1234abcde\=offset_limit=4,offset=5
+No match
+ 1234abcde\=offset_limit=3
+No match
+
+/(?<=abc)/use_offset_limit
+ 1234abc\=offset_limit=7
+ 0:
+\= Expect no match
+ 1234abc\=offset_limit=6
+No match
+
+/abcd/null_context
+ abcd\=null_context
+ 0: abcd
+
# End of testinput6
diff --git a/testdata/testoutput7 b/testdata/testoutput7
index a7f6a62..f804185 100644
--- a/testdata/testoutput7
+++ b/testdata/testoutput7
@@ -3,6 +3,7 @@
# used to force DFA matching for all tests.
#subject dfa
+#newline_default LF any anyCRLF
/\x{100}ab/utf
\x{100}ab
@@ -21,8 +22,7 @@
0: a\x{100}b
a\x{100}\x{100}b
0: a\x{100}\x{100}b
- *** Failers
-No match
+\= Expect no match
ab
No match
@@ -33,16 +33,14 @@ No match
0: X
\x{300}Xoanon
0: X
- *** Failers
-No match
+\= Expect no match
YXoanon
No match
/\BX/utf
YXoanon
0: X
- *** Failers
-No match
+\= Expect no match
Xoanon
No match
+Xoanon
@@ -57,16 +55,14 @@ No match
0: X
FAX
0: X
- *** Failers
-No match
+\= Expect no match
Xoanon
No match
/X\B/utf
Xoanon
0: X
- *** Failers
-No match
+\= Expect no match
X+oanon
No match
ZX\x{300}oanon
@@ -87,8 +83,7 @@ No match
0: \x{123}\x{123}4
\x{400}\x{401}\x{402}6
0: \x{400}\x{401}\x{402}6
- *** Failers
-No match
+\= Expect no match
d99
No match
\x{123}\x{122}4
@@ -105,8 +100,7 @@ No match
0: a\x{7f}b
a\x{100}b
0: a\x{100}b
- *** Failers
-No match
+\= Expect no match
a\nb
No match
@@ -117,8 +111,7 @@ No match
0: a\x{4000}\x{7f}yb
a\x{4000}\x{100}yb
0: a\x{4000}\x{100}yb
- *** Failers
-No match
+\= Expect no match
a\x{4000}b
No match
ac\ncb
@@ -181,8 +174,7 @@ No match
0: a\x{1234}\x{4321}yb
a\x{1234}\x{4321}\x{3412}b
0: a\x{1234}\x{4321}\x{3412}b
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
ac\ncb
@@ -200,8 +192,7 @@ No match
1: axxxxb
a\x{1234}\x{4321}\x{3412}\x{3421}b
0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
@@ -217,8 +208,7 @@ No match
1: axxxxb
a\x{1234}\x{4321}\x{3412}\x{3421}b
0: a\x{1234}\x{4321}\x{3412}\x{3421}b
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
@@ -237,8 +227,7 @@ No match
0: axbxxb
axxxxxbcdefghijb
0: axxxxxb
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
axxxxxxbcdefghijb
@@ -259,16 +248,14 @@ No match
0: axbxxb
axxxxxbcdefghijb
0: axxxxxb
- *** Failers
-No match
+\= Expect no match
a\x{1234}b
No match
axxxxxxbcdefghijb
No match
/^[a\x{c0}]/utf
- *** Failers
-No match
+\= Expect no match
\x{100}
No match
@@ -287,8 +274,7 @@ No match
/(?:\x{100}){3}b/utf
\x{100}\x{100}\x{100}b
0: \x{100}\x{100}\x{100}b
- *** Failers
-No match
+\= Expect no match
\x{100}\x{100}b
No match
@@ -297,8 +283,7 @@ No match
0: \x{ab}
\xc2\xab
0: \x{ab}
- *** Failers
-No match
+\= Expect no match
\x00{ab}
No match
@@ -307,8 +292,7 @@ No match
0: X
\x{256}XYZ
0: X
- *** Failers
-No match
+\= Expect no match
XYZ
No match
@@ -467,8 +451,7 @@ Matched, but offsets vector is too small to show all matches
/\D+/utf
12abcd34
0: abcd
- *** Failers
- 0: *** Failers
+\= Expect no match
1234
No match
@@ -477,8 +460,7 @@ No match
0: abc
12ab34
0: ab
- *** Failers
- 0: ***
+\= Expect no match
1234
No match
12a34
@@ -490,9 +472,7 @@ No match
1: ab
12ab34
0: ab
- *** Failers
- 0: ***
- 1: **
+\= Expect no match
1234
No match
12a34
@@ -501,16 +481,13 @@ No match
/\d+/utf
12abcd34
0: 12
- *** Failers
-No match
/\d{2,3}/utf
12abcd34
0: 12
1234abcd
0: 123
- *** Failers
-No match
+\= Expect no match
1.4
No match
@@ -520,16 +497,14 @@ No match
1234abcd
0: 123
1: 12
- *** Failers
-No match
+\= Expect no match
1.4
No match
/\S+/utf
12abcd34
0: 12abcd34
- *** Failers
- 0: ***
+\= Expect no match
\ \
No match
@@ -538,8 +513,7 @@ No match
0: 12a
1234abcd
0: 123
- *** Failers
- 0: ***
+\= Expect no match
\ \
No match
@@ -550,25 +524,20 @@ No match
1234abcd
0: 123
1: 12
- *** Failers
- 0: ***
- 1: **
+\= Expect no match
\ \
No match
/>\s+</utf
12> <34
0: > <
- *** Failers
-No match
/>\s{2,3}</utf
ab> <cd
0: > <
ab> <ce
0: > <
- *** Failers
-No match
+\= Expect no match
ab> <cd
No match
@@ -577,16 +546,14 @@ No match
0: > <
ab> <ce
0: > <
- *** Failers
-No match
+\= Expect no match
ab> <cd
No match
/\w+/utf
12 34
0: 12
- *** Failers
- 0: Failers
+\= Expect no match
+++=*!
No match
@@ -595,8 +562,7 @@ No match
0: ab
abcd ce
0: abc
- *** Failers
- 0: Fai
+\= Expect no match
a.b.c
No match
@@ -606,17 +572,14 @@ No match
abcd ce
0: abc
1: ab
- *** Failers
- 0: Fai
- 1: Fa
+\= Expect no match
a.b.c
No match
/\W+/utf
12====34
0: ====
- *** Failers
- 0: ***
+\= Expect no match
abcd
No match
@@ -625,8 +588,7 @@ No match
0: ===
ab==cd
0: ==
- *** Failers
- 0: ***
+\= Expect no match
a.b.c
No match
@@ -636,9 +598,7 @@ No match
1: ==
ab==cd
0: ==
- *** Failers
- 0: ***
- 1: **
+\= Expect no match
a.b.c
No match
@@ -649,8 +609,6 @@ No match
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[Z\x{100}]/utf
Z\x{100}
@@ -659,16 +617,12 @@ No match
0: \x{100}
\x{100}Z
0: \x{100}
- *** Failers
-No match
/[\x{100}\x{200}]/utf
ab\x{100}cd
0: \x{100}
ab\x{200}cd
0: \x{200}
- *** Failers
-No match
/[\x{100}-\x{200}]/utf
ab\x{100}cd
@@ -677,8 +631,6 @@ No match
0: \x{200}
ab\x{111}cd
0: \x{111}
- *** Failers
-No match
/[z-\x{200}]/utf
ab\x{100}cd
@@ -691,8 +643,6 @@ No match
0: z
ab|cd
0: |
- *** Failers
-No match
/[Q\x{100}\x{200}]/utf
ab\x{100}cd
@@ -701,8 +651,6 @@ No match
0: \x{200}
Q?
0: Q
- *** Failers
-No match
/[Q\x{100}-\x{200}]/utf
ab\x{100}cd
@@ -713,8 +661,6 @@ No match
0: \x{111}
Q?
0: Q
- *** Failers
-No match
/[Qz-\x{200}]/utf
ab\x{100}cd
@@ -729,8 +675,6 @@ No match
0: |
Q?
0: Q
- *** Failers
-No match
/[\x{100}\x{200}]{1,3}/utf
ab\x{100}cd
@@ -739,8 +683,6 @@ No match
0: \x{200}
ab\x{200}\x{100}\x{200}\x{100}cd
0: \x{200}\x{100}\x{200}
- *** Failers
-No match
/[\x{100}\x{200}]{1,3}?/utf
ab\x{100}cd
@@ -751,8 +693,6 @@ No match
0: \x{200}\x{100}\x{200}
1: \x{200}\x{100}
2: \x{200}
- *** Failers
-No match
/[Q\x{100}\x{200}]{1,3}/utf
ab\x{100}cd
@@ -761,8 +701,6 @@ No match
0: \x{200}
ab\x{200}\x{100}\x{200}\x{100}cd
0: \x{200}\x{100}\x{200}
- *** Failers
-No match
/[Q\x{100}\x{200}]{1,3}?/utf
ab\x{100}cd
@@ -773,16 +711,13 @@ No match
0: \x{200}\x{100}\x{200}
1: \x{200}\x{100}
2: \x{200}
- *** Failers
-No match
/(?<=[\x{100}\x{200}])X/utf
abc\x{200}X
0: X
abc\x{100}X
0: X
- *** Failers
-No match
+\= Expect no match
X
No match
@@ -793,16 +728,14 @@ No match
0: X
abQX
0: X
- *** Failers
-No match
+\= Expect no match
X
No match
/(?<=[\x{100}\x{200}]{3})X/utf
abc\x{100}\x{200}\x{100}X
0: X
- *** Failers
-No match
+\= Expect no match
abc\x{200}X
No match
X
@@ -815,8 +748,7 @@ No match
0: \x{150}X
\x{500}X
0: \x{500}X
- *** Failers
-No match
+\= Expect no match
\x{100}X
No match
\x{200}X
@@ -829,8 +761,7 @@ No match
0: \x{150}X
\x{500}X
0: \x{500}X
- *** Failers
-No match
+\= Expect no match
\x{100}X
No match
\x{200}X
@@ -843,8 +774,7 @@ No match
0: AX
\x{500}X
0: \x{500}X
- *** Failers
-No match
+\= Expect no match
\x{100}X
No match
\x{150}X
@@ -859,8 +789,7 @@ No match
0: Z
\x{100}
0: \x{100}
- *** Failers
-No match
+\= Expect no match
\x{102}
No match
y
@@ -885,23 +814,28 @@ No match
0: \x{123}
/^[ac]*b/utf
- xb
+\= Expect no match
+ xb
No match
/^[ac\x{100}]*b/utf
- xb
+\= Expect no match
+ xb
No match
/^[^x]*b/i,utf
- xb
+\= Expect no match
+ xb
No match
/^[^x]*b/utf
- xb
+\= Expect no match
+ xb
No match
/^\d*b/utf
- xb
+\= Expect no match
+ xb
No match
/(|a)/g,utf
@@ -967,8 +901,7 @@ No match
0: a\x{2028}b
a\x{2029}b
0: a\x{2029}b
- ** Failers
-No match
+\= Expect no match
a\n\rb
No match
@@ -1009,8 +942,7 @@ No match
0: a\x{0a}\x{0d}b
a\n\r\x{85}\x0cb
0: a\x{0a}\x{0d}\x{85}\x{0c}b
- ** Failers
-No match
+\= Expect no match
ab
No match
@@ -1029,8 +961,7 @@ No match
0: a\x{0a}\x{0d}\x{0a}\x{0d}b
a\n\n\r\nb
0: a\x{0a}\x{0a}\x{0d}\x{0a}b
- ** Failers
-No match
+\= Expect no match
a\n\n\n\rb
No match
a\r
@@ -1059,8 +990,7 @@ No match
0: X X\x{0a}
X\x09X\x0b
0: X\x{09}X\x{0b}
- ** Failers
-No match
+\= Expect no match
\x{a0} X\x0a
No match
@@ -1073,8 +1003,7 @@ No match
1: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}
\x09\x20\x{a0}\x0a\x0b\x0c
0: \x{09} \x{a0}\x{0a}\x{0b}\x{0c}
- ** Failers
-No match
+\= Expect no match
\x09\x20\x{a0}\x0a\x0b
No match
@@ -1083,8 +1012,7 @@ No match
0: \x{3001}\x{3000}\x{2030}\x{2028}
X\x{180e}X\x{85}
0: X\x{180e}X\x{85}
- ** Failers
-No match
+\= Expect no match
\x{2009} X\x0a
No match
@@ -1097,8 +1025,7 @@ No match
1: \x{09}\x{205f}\x{a0}\x{0a}\x{2029}\x{0c}
\x09\x20\x{202f}\x0a\x0b\x0c
0: \x{09} \x{202f}\x{0a}\x{0b}\x{0c}
- ** Failers
-No match
+\= Expect no match
\x09\x{200a}\x{a0}\x{2028}\x0b
No match
@@ -1115,8 +1042,7 @@ Subject length lower bound = 3
0: a\x{0a}b
a\r\nb
0: a\x{0d}\x{0a}b
- ** Failers
-No match
+\= Expect no match
a\x{85}b
No match
a\x0bb
@@ -1153,8 +1079,7 @@ Subject length lower bound = 2
0: a\x{0a}b
a\r\nb
0: a\x{0d}\x{0a}b
- ** Failers
-No match
+\= Expect no match
a\x{85}b
No match
a\x0bb
@@ -1216,13 +1141,6 @@ Partial match: abcde
the cat\=ph
Partial match: the cat
-/ab\Cde/utf
- abXde
-Failed: error -42: pattern contains an item that is not supported for DFA matching
-
-/(?<=ab\Cde)X/utf
-Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion
-
/./newline=crlf,utf
\r\=ps
0: \x{0d}
@@ -1269,8 +1187,7 @@ Partial match: \x{0d}\x{0d}\x{0d}
/\pL\P{Nd}/utf
AB
0: AB
- *** Failers
- 0: Fa
+\= Expect no match
A0
No match
00
@@ -1283,8 +1200,7 @@ No match
0: A\x{300}B
A\x{300}\x{301}\x{302}BC
0: A\x{300}\x{301}\x{302}B
- *** Failers
- 0: **
+\= Expect no match
\x{300}
No match
@@ -1295,8 +1211,7 @@ No match
0: A\x{300}B\x{300}\x{301}
A\x{300}\x{301}\x{302}BC
0: A\x{300}\x{301}\x{302}B
- *** Failers
- 0: **
+\= Expect no match
\x{300}
No match
@@ -1305,16 +1220,13 @@ No match
0: abcd
a
0: a
- *** Failers
-No match
/^\PL+/utf
1234
0: 1234
=
0: =
- *** Failers
- 0: ***
+\= Expect no match
abcd
No match
@@ -1327,8 +1239,6 @@ No match
0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}
a
0: a
- *** Failers
- 0: *** Failers
\x{300}\x{301}\x{302}
0: \x{300}\x{301}\x{302}
@@ -1341,20 +1251,17 @@ No match
0: A\x{300}abc
\x{300}abc
0: \x{300}abc
- *** Failers
-No match
/^\X?abc/utf
abc
0: abc
A\x{300}abc
0: A\x{300}abc
- *** Failers
-No match
- A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
-No match
\x{300}abc
0: \x{300}abc
+\= Expect no match
+ A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+No match
/\X*abc/utf
abc
@@ -1365,8 +1272,6 @@ No match
0: A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abc
\x{300}abc
0: \x{300}abc
- *** Failers
-No match
/^\X*abc/utf
abc
@@ -1375,8 +1280,6 @@ No match
0: A\x{300}abc
A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
0: A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abc
- *** Failers
-No match
\x{300}abc
0: \x{300}abc
@@ -1385,8 +1288,7 @@ No match
0: A=b
=c
0: =c
- *** Failers
-No match
+\= Expect no match
1=2
No match
AAAA=b
@@ -1397,8 +1299,7 @@ No match
0: AAAA=b
=c
0: =c
- *** Failers
-No match
+\= Expect no match
1=2
No match
@@ -1407,8 +1308,7 @@ No match
0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
- *** Failers
-No match
+\= Expect no match
X
No match
A\x{300}\x{301}\x{302}X
@@ -1421,64 +1321,56 @@ No match
0: \x{7f}\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
\np\x{300}9!\$ <
0: \x{0a}p\x{300}9!$ <
- ** Failers
-No match
+\= Expect no match
ap\x{300}9!\$ <
No match
/^\PC/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x7f
No match
/^\PL/utf
9
0: 9
- ** Failers
- 0: *
+\= Expect no match
\x{c0}
No match
/^\PM/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{30f}
No match
/^\PN/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{660}
No match
/^\PP/utf
X
0: X
- ** Failers
-No match
+\= Expect no match
\x{66c}
No match
/^\PS/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{f01}
No match
/^\PZ/utf
X
0: X
- ** Failers
- 0: *
+\= Expect no match
\x{1680}
No match
@@ -1487,8 +1379,7 @@ No match
0: \x{17}
\x{09f}
0: \x{9f}
- ** Failers
-No match
+\= Expect no match
\x{0600}
No match
@@ -1507,38 +1398,33 @@ No match
0: \x{2068}
\x{2069}
0: \x{2069}
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
/^\p{Cn}/utf
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
/^\p{Co}/utf
\x{f8ff}
0: \x{f8ff}
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
/^\p{Cs}/utf
\x{dfff}\=no_utf_check
0: \x{dfff}
- ** Failers
-No match
+\= Expect no match
\x{09f}
No match
/^\p{Ll}/utf
a
0: a
- ** Failers
-No match
+\= Expect no match
Z
No match
\x{e000}
@@ -1547,16 +1433,14 @@ No match
/^\p{Lm}/utf
\x{2b0}
0: \x{2b0}
- ** Failers
-No match
+\= Expect no match
a
No match
/^\p{Lo}/utf
\x{1bb}
0: \x{1bb}
- ** Failers
-No match
+\= Expect no match
a
No match
\x{2b0}
@@ -1565,8 +1449,7 @@ No match
/^\p{Lt}/utf
\x{1c5}
0: \x{1c5}
- ** Failers
-No match
+\= Expect no match
a
No match
\x{2b0}
@@ -1575,16 +1458,14 @@ No match
/^\p{Lu}/utf
A
0: A
- ** Failers
-No match
+\= Expect no match
\x{2b0}
No match
/^\p{Mc}/utf
\x{903}
0: \x{903}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{300}
@@ -1593,8 +1474,7 @@ No match
/^\p{Me}/utf
\x{488}
0: \x{488}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{903}
@@ -1607,8 +1487,7 @@ No match
0: \x{300}
\x{1a1b}
0: \x{1a1b}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{903}
@@ -1654,16 +1533,14 @@ Matched, but offsets vector is too small to show all matches
7: \x{966}\x{967}\x{968}
8: \x{966}\x{967}
9: \x{966}
- ** Failers
-No match
+\= Expect no match
X
No match
/^\p{Nl}/utf
\x{16ee}
0: \x{16ee}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{966}
@@ -1674,8 +1551,7 @@ No match
0: \x{b2}
\x{b3}
0: \x{b3}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{16ee}
@@ -1686,8 +1562,7 @@ No match
0: _
\x{203f}
0: \x{203f}
- ** Failers
-No match
+\= Expect no match
X
No match
-
@@ -1700,8 +1575,7 @@ No match
0: -
\x{58a}
0: \x{58a}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1720,8 +1594,7 @@ No match
0: \x{2309}
\x{230b}
0: \x{230b}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1740,8 +1613,7 @@ No match
0: \x{bb}
\x{2019}
0: \x{2019}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1752,8 +1624,7 @@ No match
0: \x{ab}
\x{2018}
0: \x{2018}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{203f}
@@ -1764,8 +1635,7 @@ No match
0: !
\x{37e}
0: \x{37e}
- ** Failers
- 0: *
+\= Expect no match
X
No match
\x{203f}
@@ -1784,8 +1654,7 @@ No match
0: \x{2308}
\x{230a}
0: \x{230a}
- ** Failers
-No match
+\= Expect no match
X
No match
)
@@ -1802,8 +1671,7 @@ No match
0: $\x{a2}\x{a3}\x{a4}\x{a5}
\x{9f2}
0: \x{9f2}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{2c2}
@@ -1812,8 +1680,7 @@ No match
/^\p{Sk}/utf
\x{2c2}
0: \x{2c2}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{9f2}
@@ -1822,8 +1689,7 @@ No match
/^\p{Sm}+/utf
+<|~\x{ac}\x{2044}
0: +<|~\x{ac}\x{2044}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{9f2}
@@ -1834,8 +1700,7 @@ No match
0: \x{a6}
\x{482}
0: \x{482}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{9f2}
@@ -1844,8 +1709,7 @@ No match
/^\p{Zl}/utf
\x{2028}
0: \x{2028}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{2029}
@@ -1854,8 +1718,7 @@ No match
/^\p{Zp}/utf
\x{2029}
0: \x{2029}
- ** Failers
-No match
+\= Expect no match
X
No match
\x{2028}
@@ -1872,8 +1735,7 @@ No match
0: \x{2000}
\x{2001}
0: \x{2001}
- ** Failers
-No match
+\= Expect no match
\x{2028}
No match
\x{200d}
@@ -1948,8 +1810,7 @@ No match
0: \x{660}\x{661}\x{662}ABC
/\p{Nd}*+(....)/utf
- ** Failers
- 0: ** F
+\= Expect no match
\x{660}\x{661}\x{662}ABC
No match
@@ -1958,8 +1819,7 @@ No match
0: A
a\x{10a0}B
0: \x{10a0}
- ** Failers
- 0: F
+\= Expect no match
a
No match
\x{1d00}
@@ -1968,16 +1828,14 @@ No match
/\p{^Lu}/i,utf
1234
0: 1
- ** Failers
- 0: *
+\= Expect no match
ABC
No match
/\P{Lu}/i,utf
1234
0: 1
- ** Failers
- 0: *
+\= Expect no match
ABC
No match
@@ -1988,8 +1846,7 @@ No match
0: XYZ
ABA\x{660}XYZpqr
0: XYZ
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
XYZ
@@ -2002,8 +1859,7 @@ No match
0: XYZ
XYZ
0: XYZ
- ** Failers
-No match
+\= Expect no match
WXYZ
No match
@@ -2018,22 +1874,18 @@ No match
0: 12-34
12+\x{661}-34
0: 12+\x{661}-34
- ** Failers
-No match
+\= Expect no match
abcd
No match
/[\P{Nd}]+/utf
abcd
0: abcd
- ** Failers
- 0: ** Failers
+\= Expect no match
1234
No match
/\D+/utf,no_auto_possess
- 11111111111111111111111111111111111111111111111111111111111111111111111
-No match
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Matched, but offsets vector is too small to show all matches
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -2051,10 +1903,11 @@ Matched, but offsets vector is too small to show all matches
12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/\P{Nd}+/utf,no_auto_possess
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/\P{Nd}+/utf,no_auto_possess
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Matched, but offsets vector is too small to show all matches
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -2072,10 +1925,11 @@ Matched, but offsets vector is too small to show all matches
12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\D]+/utf,no_auto_possess
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/[\D]+/utf,no_auto_possess
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Matched, but offsets vector is too small to show all matches
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -2093,10 +1947,11 @@ Matched, but offsets vector is too small to show all matches
12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\P{Nd}]+/utf,no_auto_possess
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/[\P{Nd}]+/utf,no_auto_possess
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Matched, but offsets vector is too small to show all matches
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -2114,10 +1969,11 @@ Matched, but offsets vector is too small to show all matches
12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-/[\D\P{Nd}]+/utf,no_auto_possess
+\= Expect no match
11111111111111111111111111111111111111111111111111111111111111111111111
No match
+
+/[\D\P{Nd}]+/utf,no_auto_possess
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Matched, but offsets vector is too small to show all matches
0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -2135,6 +1991,9 @@ Matched, but offsets vector is too small to show all matches
12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+\= Expect no match
+ 11111111111111111111111111111111111111111111111111111111111111111111111
+No match
/\pL/utf
a
@@ -2153,8 +2012,7 @@ Matched, but offsets vector is too small to show all matches
0: A
aZ
0: Z
- ** Failers
- 0: F
+\= Expect no match
abc
No match
@@ -2163,8 +2021,7 @@ No match
0: A
aZ
0: Z
- ** Failers
- 0: F
+\= Expect no match
abc
No match
@@ -2173,8 +2030,7 @@ No match
0: a
Az
0: z
- ** Failers
- 0: a
+\= Expect no match
ABC
No match
@@ -2183,8 +2039,7 @@ No match
0: a
Az
0: z
- ** Failers
- 0: a
+\= Expect no match
ABC
No match
@@ -2203,8 +2058,7 @@ No match
/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
A\x{391}\x{10427}\x{ff3a}\x{1fb0}
0: A\x{391}\x{10427}\x{ff3a}\x{1fb0}
- ** Failers
-No match
+\= Expect no match
a\x{391}\x{10427}\x{ff3a}\x{1fb0}
No match
A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
@@ -2269,8 +2123,7 @@ No match
0: \x{105}
\x{109}
0: \x{109}
- ** Failers
-No match
+\= Expect no match
\x{100}
No match
\x{10a}
@@ -2295,8 +2148,7 @@ No match
0: \x{100}
\x{101}
0: \x{101}
- ** Failers
-No match
+\= Expect no match
\x{102}
No match
Y
@@ -2313,8 +2165,6 @@ No match
0: A\x{300}
A\x{300}\x{301}\x{302}BC
0: A\x{300}\x{301}\x{302}
- *** Failers
- 0: *
\x{300}
0: \x{300}
@@ -2359,8 +2209,7 @@ No match
4: A
/^\X(.)/utf
- *** Failers
- 0: **
+\= Expect no match
A\x{300}\x{301}\x{302}
No match
@@ -2393,8 +2242,7 @@ No match
0: 12X
123X
0: 123X
- *** Failers
-No match
+\= Expect no match
X
No match
1X
@@ -2411,16 +2259,14 @@ No match
/^\p{Han}+/utf
\x{2e81}\x{3007}\x{2f804}\x{31a0}
0: \x{2e81}\x{3007}\x{2f804}
- ** Failers
-No match
+\= Expect no match
\x{2e7f}
No match
/^\P{Katakana}+/utf
\x{3105}
0: \x{3105}
- ** Failers
- 0: ** Failers
+\= Expect no match
\x{30ff}
No match
@@ -2429,16 +2275,14 @@ No match
0: \x{6e9}
\x{060b}
0: \x{60b}
- ** Failers
-No match
+\= Expect no match
X\x{06e9}
No match
/^[\P{Yi}]/utf
\x{2f800}
0: \x{2f800}
- ** Failers
- 0: *
+\= Expect no match
\x{a014}
No match
\x{a4c6}
@@ -2449,14 +2293,12 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
X
No match
/^\P{Any}X/utf
- ** Failers
-No match
+\= Expect no match
AX
No match
@@ -2467,16 +2309,14 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
ABXYZ
No match
/^\P{Any}?X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2491,14 +2331,12 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
+\= Expect no match
XYZ
No match
/^\P{Any}+X/utf
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2517,14 +2355,11 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
/^\P{Any}*X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2537,14 +2372,12 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
X
No match
/^[\P{Any}]X/utf
- ** Failers
-No match
+\= Expect no match
AX
No match
@@ -2555,16 +2388,14 @@ No match
0: AX
\x{1234}XYZ
0: \x{1234}X
- ** Failers
-No match
+\= Expect no match
ABXYZ
No match
/^[\P{Any}]?X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2579,14 +2410,12 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
+\= Expect no match
XYZ
No match
/^[\P{Any}]+X/utf
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2605,14 +2434,11 @@ No match
0: \x{1234}X
A\x{1234}XYZ
0: A\x{1234}X
- ** Failers
-No match
/^[\P{Any}]*X/utf
XYZ
0: X
- ** Failers
-No match
+\= Expect no match
AXYZ
No match
\x{1234}XYZ
@@ -2637,8 +2463,7 @@ No match
0: \x{1234}\x{0a}\x{0d}\x{3456}x
/^\P{Any}{3,5}?/utf
- ** Failers
-No match
+\= Expect no match
abcdefgh
No match
\x{1234}\n\r\x{3456}xyz
@@ -2651,8 +2476,7 @@ No match
0: aX
\x{1c5}XY
0: \x{1c5}X
- ** Failers
-No match
+\= Expect no match
\x{1bb}XY
No match
\x{2b0}XY
@@ -2667,8 +2491,7 @@ No match
0: aX
\x{1c5}XY
0: \x{1c5}X
- ** Failers
-No match
+\= Expect no match
\x{1bb}XY
No match
\x{2b0}XY
@@ -2688,8 +2511,7 @@ No match
abcDEXypqreXlmn
0: abcDEXypqreX
1: abcDEX
- ** Failers
-No match
+\= Expect no match
\x{1bb}XY
No match
\x{2b0}XY
@@ -2709,8 +2531,7 @@ No match
abcDEXypqreXlmn
0: abcDEXypqreX
1: abcDEX
- ** Failers
-No match
+\= Expect no match
\x{1bb}XY
No match
\x{2b0}XY
@@ -2730,8 +2551,7 @@ No match
abcDEXypqreXlmn
0: abcDEXypqreX
1: abcDEX
- ** Failers
-No match
+\= Expect no match
\x{1bb}XY
No match
\x{2b0}XY
@@ -2751,8 +2571,7 @@ No match
abcDEXypqreXlmn
0: abcDEXypqreX
1: abcDEX
- ** Failers
-No match
+\= Expect no match
\x{1bb}XY
No match
\x{2b0}XY
@@ -2767,8 +2586,7 @@ No match
0: \x{1bb}X
\x{2b0}XY
0: \x{2b0}X
- ** Failers
-No match
+\= Expect no match
\x{1c5}XY
No match
AXY
@@ -2781,8 +2599,7 @@ No match
0: \x{1bb}X
\x{2b0}XY
0: \x{2b0}X
- ** Failers
-No match
+\= Expect no match
\x{1c5}XY
No match
AXY
@@ -2804,7 +2621,7 @@ No match
\x{c0}\x{e0}\x{116}\x{117}
0: \x{c0}\x{e0}\x{116}\x{117}
-/Check property support in non-UTF-8 mode/
+# Check property support in non-UTF-8 mode
/\p{L}{4}/
123abcdefg
@@ -2825,8 +2642,7 @@ No match
/\x{a77d}\x{1d79}/utf
\x{a77d}\x{1d79}
0: \x{a77d}\x{1d79}
- ** Failers
-No match
+\= Expect no match
\x{1d79}\x{a77d}
No match
@@ -2841,16 +2657,14 @@ No match
0: \x{a6c}
\x{10a7}
0: \x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
/^\p{Xan}+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
0: ABCD1234\x{6ca}\x{a6c}\x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
@@ -2873,24 +2687,21 @@ No match
0: \x{a6c}
\x{10a7}
0: \x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
/^[\p{Xan}]+/utf
ABCD1234\x{6ca}\x{a6c}\x{10a7}_
0: ABCD1234\x{6ca}\x{a6c}\x{10a7}
- ** Failers
-No match
+\= Expect no match
_ABC
No match
/^>\p{Xsp}/utf
>\x{1680}\x{2028}\x{0b}
0: >\x{1680}
- ** Failers
-No match
+\= Expect no match
\x{0b}
No match
@@ -2951,8 +2762,7 @@ No match
0: >\x{1680}
>\x{a0}
0: >\x{a0}
- ** Failers
-No match
+\= Expect no match
\x{0b}
No match
@@ -3006,8 +2816,7 @@ No match
0: \x{10a7}
_ABC
0: _
- ** Failers
-No match
+\= Expect no match
[]
No match
@@ -3036,8 +2845,7 @@ No match
0: \x{10a7}
_ABC
0: _
- ** Failers
-No match
+\= Expect no match
[]
No match
@@ -3064,8 +2872,7 @@ No match
/\b...\B/utf
abc_
0: abc
- ** Failers
- 0: Fai
+\= Expect no match
\x{37e}abc\x{376}
No match
\x{37e}\x{376}\x{371}\x{393}\x{394}
@@ -3170,9 +2977,7 @@ Partial match: AA
\x{1b04}\x{1b04}X
0: \x{1b04}\x{1b04}
0+ X
- *These match up to the roman letters
- 0: *
- 0+ These match up to the roman letters
+\= These match up to the roman letters
\x{1111}\x{1111}L,L
0: \x{1111}\x{1111}
0+ L,L
@@ -3203,9 +3008,7 @@ Partial match: AA
\x{ad89}\x{11fe}\x{11fe}LVT, T, T
0: \x{ad89}\x{11fe}\x{11fe}
0+ LVT, T, T
- *These match just the first codepoint (invalid sequence)
- 0: *
- 0+ These match just the first codepoint (invalid sequence)
+\= These match just the first codepoint (invalid sequence)
\x{1111}\x{11fe}L, T
0: \x{1111}
0+ \x{11fe}L, T
@@ -3251,9 +3054,7 @@ Partial match: AA
\x{11fe}\x{ad89}T, LVT
0: \x{11fe}
0+ \x{ad89}T, LVT
- *Test extend and spacing mark
- 0: *
- 0+ Test extend and spacing mark
+\= Test extend and spacing mark
\x{1111}\x{ae4c}\x{0711}L, LV, extend
0: \x{1111}\x{ae4c}\x{711}
0+ L, LV, extend
@@ -3263,9 +3064,7 @@ Partial match: AA
\x{1111}\x{ae4c}\x{1b04}\x{0711}\x{1b04}L, LV, spacing mark, extend, spacing mark
0: \x{1111}\x{ae4c}\x{1b04}\x{711}\x{1b04}
0+ L, LV, spacing mark, extend, spacing mark
- *Test CR, LF, and control
- 0: *
- 0+ Test CR, LF, and control
+\= Test CR, LF, and control
\x0d\x{0711}CR, extend
0: \x{0d}
0+ \x{711}CR, extend
@@ -3284,9 +3083,7 @@ Partial match: AA
\x09\x{1b04}Control, spacingmark
0: \x{09}
0+ \x{1b04}Control, spacingmark
- *There are no Prepend characters, so we can't test Prepend, CR
- 0: *
- 0+ There are no Prepend characters, so we can't test Prepend, CR
+\= There are no Prepend characters, so we can't test Prepend, CR
/^(?>\X{2})X/utf,aftertext
\x{1111}\x{ae4c}\x{1111}\x{ae4c}X
@@ -3366,7 +3163,6 @@ Partial match: AA
\x{00c5}\x{00e5}\x{212b}
0: \x{c5}\x{e5}\x{212b}
-
/\x{01c4}+/i,utf
\x{01c4}\x{01c5}\x{01c6}
0: \x{1c4}\x{1c5}\x{1c6}
@@ -3379,7 +3175,6 @@ Partial match: AA
\x{01c4}\x{01c5}\x{01c6}
0: \x{1c4}\x{1c5}\x{1c6}
-
/\x{01c7}+/i,utf
\x{01c7}\x{01c8}\x{01c9}
0: \x{1c7}\x{1c8}\x{1c9}
@@ -3405,7 +3200,6 @@ Partial match: AA
\x{01ca}\x{01cb}\x{01cc}
0: \x{1ca}\x{1cb}\x{1cc}
-
/\x{01f1}+/i,utf
\x{01f1}\x{01f2}\x{01f3}
0: \x{1f1}\x{1f2}\x{1f3}
@@ -3418,7 +3212,6 @@ Partial match: AA
\x{01f1}\x{01f2}\x{01f3}
0: \x{1f1}\x{1f2}\x{1f3}
-
/\x{0345}+/i,utf
\x{0345}\x{0399}\x{03b9}\x{1fbe}
0: \x{345}\x{399}\x{3b9}\x{1fbe}
@@ -3435,7 +3228,6 @@ Partial match: AA
\x{0345}\x{0399}\x{03b9}\x{1fbe}
0: \x{345}\x{399}\x{3b9}\x{1fbe}
-
/\x{0392}+/i,utf
\x{0392}\x{03b2}\x{03d0}
0: \x{392}\x{3b2}\x{3d0}
@@ -3461,7 +3253,6 @@ Partial match: AA
\x{0395}\x{03b5}\x{03f5}
0: \x{395}\x{3b5}\x{3f5}
-
/\x{0398}+/i,utf
\x{0398}\x{03b8}\x{03d1}\x{03f4}
0: \x{398}\x{3b8}\x{3d1}\x{3f4}
@@ -3477,7 +3268,6 @@ Partial match: AA
/\x{03f4}+/i,utf
\x{0398}\x{03b8}\x{03d1}\x{03f4}
0: \x{398}\x{3b8}\x{3d1}\x{3f4}
-
/\x{039a}+/i,utf
\x{039a}\x{03ba}\x{03f0}
@@ -3491,7 +3281,6 @@ Partial match: AA
\x{039a}\x{03ba}\x{03f0}
0: \x{39a}\x{3ba}\x{3f0}
-
/\x{03a0}+/i,utf
\x{03a0}\x{03c0}\x{03d6}
0: \x{3a0}\x{3c0}\x{3d6}
@@ -3504,7 +3293,6 @@ Partial match: AA
\x{03a0}\x{03c0}\x{03d6}
0: \x{3a0}\x{3c0}\x{3d6}
-
/\x{03a1}+/i,utf
\x{03a1}\x{03c1}\x{03f1}
0: \x{3a1}\x{3c1}\x{3f1}
@@ -3517,7 +3305,6 @@ Partial match: AA
\x{03a1}\x{03c1}\x{03f1}
0: \x{3a1}\x{3c1}\x{3f1}
-
/\x{03a3}+/i,utf
\x{03A3}\x{03C2}\x{03C3}
0: \x{3a3}\x{3c2}\x{3c3}
@@ -3529,7 +3316,6 @@ Partial match: AA
/\x{03c3}+/i,utf
\x{03A3}\x{03C2}\x{03C3}
0: \x{3a3}\x{3c2}\x{3c3}
-
/\x{03a6}+/i,utf
\x{03a6}\x{03c6}\x{03d5}
@@ -3543,7 +3329,6 @@ Partial match: AA
\x{03a6}\x{03c6}\x{03d5}
0: \x{3a6}\x{3c6}\x{3d5}
-
/\x{03c9}+/i,utf
\x{03c9}\x{03a9}\x{2126}
0: \x{3c9}\x{3a9}\x{2126}
@@ -3556,7 +3341,6 @@ Partial match: AA
\x{03c9}\x{03a9}\x{2126}
0: \x{3c9}\x{3a9}\x{2126}
-
/\x{1e60}+/i,utf
\x{1e60}\x{1e61}\x{1e9b}
0: \x{1e60}\x{1e61}\x{1e9b}
@@ -3569,7 +3353,6 @@ Partial match: AA
\x{1e60}\x{1e61}\x{1e9b}
0: \x{1e60}\x{1e61}\x{1e9b}
-
/\x{1e9e}+/i,utf
\x{1e9e}\x{00df}
0: \x{1e9e}\x{df}
@@ -3578,7 +3361,6 @@ Partial match: AA
\x{1e9e}\x{00df}
0: \x{1e9e}\x{df}
-
/\x{1f88}+/i,utf
\x{1f88}\x{1f80}
0: \x{1f88}\x{1f80}
@@ -3599,7 +3381,6 @@ Partial match: AA
\x{004b}\x{006b}\x{212a}
0: Kk\x{212a}
-
/\x{0053}+/i,utf
\x{0053}\x{0073}\x{017f}
0: Ss\x{17f}
@@ -3613,24 +3394,29 @@ Partial match: AA
0: Ss\x{17f}
/ist/i,utf
+\= Expect no match
ikt
No match
/is+t/i,utf
iSs\x{17f}t
0: iSs\x{17f}t
+\= Expect no match
ikt
No match
/is+?t/i,utf
+\= Expect no match
ikt
No match
/is?t/i,utf
+\= Expect no match
ikt
No match
/is{2}t/i,utf
+\= Expect no match
iskt
No match
@@ -3643,16 +3429,14 @@ No match
0: `
\x{1234}abc
0: \x{1234}
- ** Failers
-No match
+\= Expect no match
abc
No match
/^\p{Xuc}+/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
@@ -3664,32 +3448,28 @@ No match
3: $@`
4: $@
5: $
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}+?\*/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}*
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}++/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\p{Xuc}{3,5}/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
@@ -3698,32 +3478,28 @@ No match
0: $@`\x{a0}\x{1234}
1: $@`\x{a0}
2: $@`
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^[\p{Xuc}]/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^[\p{Xuc}]+/utf
$@`\x{a0}\x{1234}\x{e000}**
0: $@`\x{a0}\x{1234}\x{e000}
- ** Failers
-No match
+\= Expect no match
\x{9f}
No match
/^\P{Xuc}/utf
abc
0: a
- ** Failers
- 0: *
+\= Expect no match
$abc
No match
@abc
@@ -3736,8 +3512,7 @@ No match
/^[\P{Xuc}]/utf
abc
0: a
- ** Failers
- 0: *
+\= Expect no match
$abc
No match
@abc
diff --git a/testdata/testoutput8-16 b/testdata/testoutput8-16-2
index 0f9fa6a..05669bb 100644
--- a/testdata/testoutput8-16
+++ b/testdata/testoutput8-16-2
@@ -1,8 +1,11 @@
-# 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.
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
#pattern fullbincode,memory
@@ -378,7 +381,7 @@ Options: utf
First code unit = 'A'
Last code unit = '.'
Subject length lower bound = 4
-
+
/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
Memory allocation (code space): 22
------------------------------------------------------------------
@@ -842,11 +845,186 @@ Memory allocation (code space): 14
# Check the absolute limit on nesting (?| etc. This varies with code unit
# width because the workspace is a different number of bytes. It will fail
-# in 8-bit and 16-bit but not in 32-bit.
-
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
/parens_nest_limit=1000,-fullbincode
Failed: error 184 at offset 1540: (?| and/or (?J: or (?x: parentheses are too deeply nested
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+Failed: error 186 at offset 594: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+Failed: error 186 at offset 594: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+Failed: error 186 at offset 594: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+Failed: error 186 at offset 594: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 594: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 79 Bra
+ 2 70 Once
+ 4 6 Cond
+ 6 1 Cond ref
+ 8 74 Recurse
+ 10 6 Ket
+ 12 6 Cond
+ 14 1 Cond ref
+ 16 74 Recurse
+ 18 6 Ket
+ 20 6 Cond
+ 22 1 Cond ref
+ 24 74 Recurse
+ 26 6 Ket
+ 28 6 Cond
+ 30 1 Cond ref
+ 32 74 Recurse
+ 34 6 Ket
+ 36 6 Cond
+ 38 1 Cond ref
+ 40 74 Recurse
+ 42 6 Ket
+ 44 6 Cond
+ 46 1 Cond ref
+ 48 74 Recurse
+ 50 6 Ket
+ 52 6 Cond
+ 54 1 Cond ref
+ 56 74 Recurse
+ 58 6 Ket
+ 60 10 SBraPos
+ 62 6 SCond
+ 64 1 Cond ref
+ 66 74 Recurse
+ 68 6 Ket
+ 70 10 KetRpos
+ 72 70 Ket
+ 74 3 CBra 1
+ 77 3 Ket
+ 79 79 Ket
+ 81 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 43 Bra
+ 2 34 Once
+ 4 4 Cond
+ 6 1 Cond ref
+ 8 8 Alt
+ 10 a
+ 12 38 Recurse
+ 14 b
+ 16 12 Ket
+ 18 16 SBraPos
+ 20 4 SCond
+ 22 1 Cond ref
+ 24 8 Alt
+ 26 a
+ 28 38 Recurse
+ 30 b
+ 32 12 Ket
+ 34 16 KetRpos
+ 36 34 Ket
+ 38 3 CBra 1
+ 41 3 Ket
+ 43 43 Ket
+ 45 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 133 Bra
+ 2 41 CBra 1
+ 5 2 Recurse
+ 7 88 Recurse
+ 9 93 Recurse
+ 11 98 Recurse
+ 13 103 Recurse
+ 15 108 Recurse
+ 17 113 Recurse
+ 19 118 Recurse
+ 21 123 Recurse
+ 23 123 Recurse
+ 25 118 Recurse
+ 27 113 Recurse
+ 29 108 Recurse
+ 31 103 Recurse
+ 33 98 Recurse
+ 35 93 Recurse
+ 37 88 Recurse
+ 39 2 Recurse
+ 41 0 Recurse
+ 43 41 Ket
+ 45 41 SCBra 1
+ 48 2 Recurse
+ 50 88 Recurse
+ 52 93 Recurse
+ 54 98 Recurse
+ 56 103 Recurse
+ 58 108 Recurse
+ 60 113 Recurse
+ 62 118 Recurse
+ 64 123 Recurse
+ 66 123 Recurse
+ 68 118 Recurse
+ 70 113 Recurse
+ 72 108 Recurse
+ 74 103 Recurse
+ 76 98 Recurse
+ 78 93 Recurse
+ 80 88 Recurse
+ 82 2 Recurse
+ 84 0 Recurse
+ 86 41 KetRmax
+ 88 3 CBra 2
+ 91 3 Ket
+ 93 3 CBra 3
+ 96 3 Ket
+ 98 3 CBra 4
+101 3 Ket
+103 3 CBra 5
+106 3 Ket
+108 3 CBra 6
+111 3 Ket
+113 3 CBra 7
+116 3 Ket
+118 3 CBra 8
+121 3 Ket
+123 3 CBra 9
+126 3 Ket
+128 3 CBra 10
+131 3 Ket
+133 133 Ket
+135 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
# End of testinput8
diff --git a/testdata/testoutput8-16-3 b/testdata/testoutput8-16-3
new file mode 100644
index 0000000..31884e1
--- /dev/null
+++ b/testdata/testoutput8-16-3
@@ -0,0 +1,1026 @@
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
+
+#pattern fullbincode,memory
+
+/((?i)b)/
+Memory allocation (code space): 32
+------------------------------------------------------------------
+ 0 12 Bra
+ 3 6 CBra 1
+ 7 /i b
+ 9 6 Ket
+ 12 12 Ket
+ 15 End
+------------------------------------------------------------------
+
+/(?s)(.*X|^B)/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 20 Bra
+ 3 8 CBra 1
+ 7 AllAny*
+ 9 X
+ 11 6 Alt
+ 14 ^
+ 15 B
+ 17 14 Ket
+ 20 20 Ket
+ 23 End
+------------------------------------------------------------------
+
+/(?s:.*X|^B)/
+Memory allocation (code space): 46
+------------------------------------------------------------------
+ 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:]]/
+Memory allocation (code space): 50
+------------------------------------------------------------------
+ 0 21 Bra
+ 3 ^
+ 4 [0-9A-Za-z]
+ 21 21 Ket
+ 24 End
+------------------------------------------------------------------
+
+/#/Ix
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 3 Bra
+ 3 3 Ket
+ 6 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+May match empty string
+Options: extended
+Subject length lower bound = 0
+
+/a#/Ix
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 a
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: extended
+First code unit = 'a'
+Subject length lower bound = 1
+
+/x?+/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 x?+
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/x++/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 x++
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/x{1,3}+/
+Memory allocation (code space): 24
+------------------------------------------------------------------
+ 0 8 Bra
+ 3 x
+ 5 x{0,2}+
+ 8 8 Ket
+ 11 End
+------------------------------------------------------------------
+
+/(x)*+/
+Memory allocation (code space): 34
+------------------------------------------------------------------
+ 0 13 Bra
+ 3 Braposzero
+ 4 6 CBraPos 1
+ 8 x
+ 10 6 KetRpos
+ 13 13 Ket
+ 16 End
+------------------------------------------------------------------
+
+/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+Memory allocation (code space): 166
+------------------------------------------------------------------
+ 0 79 Bra
+ 3 ^
+ 4 72 CBra 1
+ 8 6 CBra 2
+ 12 a+
+ 14 6 Ket
+ 17 22 CBra 3
+ 21 [ab]+?
+ 39 22 Ket
+ 42 22 CBra 4
+ 46 [bc]+
+ 64 22 Ket
+ 67 6 CBra 5
+ 71 \w*+
+ 73 6 Ket
+ 76 72 Ket
+ 79 79 Ket
+ 82 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"
+Memory allocation (code space): 1652
+------------------------------------------------------------------
+ 0 822 Bra
+ 3 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
+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"
+Memory allocation (code space): 1632
+------------------------------------------------------------------
+ 0 812 Bra
+ 3 $<.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
+811 \b
+812 812 Ket
+815 End
+------------------------------------------------------------------
+
+/(a(?1)b)/
+Memory allocation (code space): 42
+------------------------------------------------------------------
+ 0 17 Bra
+ 3 11 CBra 1
+ 7 a
+ 9 3 Recurse
+ 12 b
+ 14 11 Ket
+ 17 17 Ket
+ 20 End
+------------------------------------------------------------------
+
+/(a(?1)+b)/
+Memory allocation (code space): 54
+------------------------------------------------------------------
+ 0 23 Bra
+ 3 17 CBra 1
+ 7 a
+ 9 6 Once
+ 12 3 Recurse
+ 15 6 KetRmax
+ 18 b
+ 20 17 Ket
+ 23 23 Ket
+ 26 End
+------------------------------------------------------------------
+
+/a(?P<name1>b|c)d(?P<longername2>e)/
+Memory allocation (code space): 68
+------------------------------------------------------------------
+ 0 30 Bra
+ 3 a
+ 5 6 CBra 1
+ 9 b
+ 11 5 Alt
+ 14 c
+ 16 11 Ket
+ 19 d
+ 21 6 CBra 2
+ 25 e
+ 27 6 Ket
+ 30 30 Ket
+ 33 End
+------------------------------------------------------------------
+
+/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+Memory allocation (code space): 84
+------------------------------------------------------------------
+ 0 38 Bra
+ 3 23 Bra
+ 6 a
+ 8 15 CBra 1
+ 12 c
+ 14 6 CBra 2
+ 18 d
+ 20 6 Ket
+ 23 15 Ket
+ 26 23 Ket
+ 29 6 CBra 3
+ 33 a
+ 35 6 Ket
+ 38 38 Ket
+ 41 End
+------------------------------------------------------------------
+
+/(?P<a>a)...(?P=a)bbb(?P>a)d/
+Memory allocation (code space): 64
+------------------------------------------------------------------
+ 0 28 Bra
+ 3 6 CBra 1
+ 7 a
+ 9 6 Ket
+ 12 Any
+ 13 Any
+ 14 Any
+ 15 \1
+ 17 bbb
+ 23 3 Recurse
+ 26 d
+ 28 28 Ket
+ 31 End
+------------------------------------------------------------------
+
+/abc(?C255)de(?C)f/
+Memory allocation (code space): 62
+------------------------------------------------------------------
+ 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/auto_callout
+Memory allocation (code space): 106
+------------------------------------------------------------------
+ 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}/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{100}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/\x{1000}/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{1000}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/\x{10000}/utf
+Memory allocation (code space): 20
+------------------------------------------------------------------
+ 0 6 Bra
+ 3 \x{10000}
+ 6 6 Ket
+ 9 End
+------------------------------------------------------------------
+
+/\x{100000}/utf
+Memory allocation (code space): 20
+------------------------------------------------------------------
+ 0 6 Bra
+ 3 \x{100000}
+ 6 6 Ket
+ 9 End
+------------------------------------------------------------------
+
+/\x{10ffff}/utf
+Memory allocation (code space): 20
+------------------------------------------------------------------
+ 0 6 Bra
+ 3 \x{10ffff}
+ 6 6 Ket
+ 9 End
+------------------------------------------------------------------
+
+/\x{110000}/utf
+Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+
+/[\x{ff}]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{ff}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[\x{100}]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{100}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/\x80/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{80}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/\xff/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{ff}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 A\x{2262}\x{391}.
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = 'A'
+Last code unit = '.'
+Subject length lower bound = 4
+
+/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+Memory allocation (code space): 26
+------------------------------------------------------------------
+ 0 9 Bra
+ 3 \x{d55c}\x{ad6d}\x{c5b4}
+ 9 9 Ket
+ 12 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \x{d55c}
+Last code unit = \x{c5b4}
+Subject length lower bound = 3
+
+/\x{65e5}\x{672c}\x{8a9e}/I,utf
+Memory allocation (code space): 26
+------------------------------------------------------------------
+ 0 9 Bra
+ 3 \x{65e5}\x{672c}\x{8a9e}
+ 9 9 Ket
+ 12 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \x{65e5}
+Last code unit = \x{8a9e}
+Subject length lower bound = 3
+
+/[\x{100}]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{100}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[Z\x{100}]/utf
+Memory allocation (code space): 60
+------------------------------------------------------------------
+ 0 26 Bra
+ 3 [Z\x{100}]
+ 26 26 Ket
+ 29 End
+------------------------------------------------------------------
+
+/^[\x{100}\E-\Q\E\x{150}]/utf
+Memory allocation (code space): 32
+------------------------------------------------------------------
+ 0 12 Bra
+ 3 ^
+ 4 [\x{100}-\x{150}]
+ 12 12 Ket
+ 15 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E]/utf
+Memory allocation (code space): 32
+------------------------------------------------------------------
+ 0 12 Bra
+ 3 ^
+ 4 [\x{100}-\x{150}]
+ 12 12 Ket
+ 15 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E/utf
+Failed: error 106 at offset 13: missing terminating ] for character class
+
+/[\p{L}]/
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [\p{L}]
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[\p{^L}]/
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [\P{L}]
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[\P{L}]/
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [\P{L}]
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[\P{^L}]/
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [\p{L}]
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[abc\p{L}\x{0660}]/utf
+Memory allocation (code space): 66
+------------------------------------------------------------------
+ 0 29 Bra
+ 3 [a-c\p{L}\x{660}]
+ 29 29 Ket
+ 32 End
+------------------------------------------------------------------
+
+/[\p{Nd}]/utf
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [\p{Nd}]
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[\p{Nd}+-]+/utf
+Memory allocation (code space): 64
+------------------------------------------------------------------
+ 0 28 Bra
+ 3 [+\-\p{Nd}]++
+ 28 28 Ket
+ 31 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+Memory allocation (code space): 36
+------------------------------------------------------------------
+ 0 14 Bra
+ 3 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 14 14 Ket
+ 17 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+Memory allocation (code space): 36
+------------------------------------------------------------------
+ 0 14 Bra
+ 3 A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 14 14 Ket
+ 17 End
+------------------------------------------------------------------
+
+/[\x{105}-\x{109}]/i,utf
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [\x{104}-\x{109}]
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+
+/( ( (?(1)0|) )* )/x
+Memory allocation (code space): 70
+------------------------------------------------------------------
+ 0 31 Bra
+ 3 25 CBra 1
+ 7 Brazero
+ 8 17 SCBra 2
+ 12 7 Cond
+ 15 1 Cond ref
+ 17 0
+ 19 3 Alt
+ 22 10 Ket
+ 25 17 KetRmax
+ 28 25 Ket
+ 31 31 Ket
+ 34 End
+------------------------------------------------------------------
+
+/( (?(1)0|)* )/x
+Memory allocation (code space): 56
+------------------------------------------------------------------
+ 0 24 Bra
+ 3 18 CBra 1
+ 7 Brazero
+ 8 7 SCond
+ 11 1 Cond ref
+ 13 0
+ 15 3 Alt
+ 18 10 KetRmax
+ 21 18 Ket
+ 24 24 Ket
+ 27 End
+------------------------------------------------------------------
+
+/[a]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 a
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[a]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 a
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[\xaa]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{aa}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[\xaa]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 \x{aa}
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[^a]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 [^a]
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[^a]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 [^a]
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[^\xaa]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 [^\x{aa}]
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+/[^\xaa]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 5 Bra
+ 3 [^\x{aa}]
+ 5 5 Ket
+ 8 End
+------------------------------------------------------------------
+
+#pattern -memory
+
+/[^\d]/utf,ucp
+------------------------------------------------------------------
+ 0 11 Bra
+ 3 [^\p{Nd}]
+ 11 11 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[[:^alpha:][:^cntrl:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 15 Bra
+ 3 [\P{L}\P{Cc}]++
+ 15 15 Ket
+ 18 End
+------------------------------------------------------------------
+
+/[[:^cntrl:][:^alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 15 Bra
+ 3 [\P{Cc}\P{L}]++
+ 15 15 Ket
+ 18 End
+------------------------------------------------------------------
+
+/[[:alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 12 Bra
+ 3 [\p{L}]++
+ 12 12 Ket
+ 15 End
+------------------------------------------------------------------
+
+/[[:^alpha:]\S]+/utf,ucp
+------------------------------------------------------------------
+ 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)/
+------------------------------------------------------------------
+ 0 70 Bra
+ 3 abc
+ 9 6 CBra 1
+ 13 d
+ 15 5 Alt
+ 18 e
+ 20 11 Ket
+ 23 *THEN
+ 24 x
+ 26 13 CBra 2
+ 30 123
+ 36 *THEN
+ 37 4
+ 39 28 Alt
+ 42 567
+ 48 6 CBra 3
+ 52 b
+ 54 5 Alt
+ 57 q
+ 59 11 Ket
+ 62 *THEN
+ 63 xx
+ 67 41 Ket
+ 70 70 Ket
+ 73 End
+------------------------------------------------------------------
+
+/(((a\2)|(a*)\g<-1>))*a?/
+------------------------------------------------------------------
+ 0 52 Bra
+ 3 Brazero
+ 4 43 SCBra 1
+ 8 36 Once
+ 11 15 CBra 2
+ 15 8 CBra 3
+ 19 a
+ 21 \2
+ 23 8 Ket
+ 26 15 Alt
+ 29 6 CBra 4
+ 33 a*
+ 35 6 Ket
+ 38 29 Recurse
+ 41 30 Ket
+ 44 36 Ket
+ 47 43 KetRmax
+ 50 a?+
+ 52 52 Ket
+ 55 End
+------------------------------------------------------------------
+
+/((?+1)(\1))/
+------------------------------------------------------------------
+ 0 28 Bra
+ 3 22 Once
+ 6 16 CBra 1
+ 10 13 Recurse
+ 13 6 CBra 2
+ 17 \1
+ 19 6 Ket
+ 22 16 Ket
+ 25 22 Ket
+ 28 28 Ket
+ 31 End
+------------------------------------------------------------------
+
+"(?1)(?#?'){2}(a)"
+------------------------------------------------------------------
+ 0 30 Bra
+ 3 6 Once
+ 6 21 Recurse
+ 9 6 Ket
+ 12 6 Once
+ 15 21 Recurse
+ 18 6 Ket
+ 21 6 CBra 1
+ 25 a
+ 27 6 Ket
+ 30 30 Ket
+ 33 End
+------------------------------------------------------------------
+
+/.((?2)(?R)|\1|$)()/
+------------------------------------------------------------------
+ 0 39 Bra
+ 3 Any
+ 4 25 Once
+ 7 10 CBra 1
+ 11 32 Recurse
+ 14 0 Recurse
+ 17 5 Alt
+ 20 \1
+ 22 4 Alt
+ 25 $
+ 26 19 Ket
+ 29 25 Ket
+ 32 4 CBra 2
+ 36 4 Ket
+ 39 39 Ket
+ 42 End
+------------------------------------------------------------------
+
+/.((?3)(?R)()(?2)|\1|$)()/
+------------------------------------------------------------------
+ 0 49 Bra
+ 3 Any
+ 4 35 Once
+ 7 20 CBra 1
+ 11 42 Recurse
+ 14 0 Recurse
+ 17 4 CBra 2
+ 21 4 Ket
+ 24 17 Recurse
+ 27 5 Alt
+ 30 \1
+ 32 4 Alt
+ 35 $
+ 36 29 Ket
+ 39 35 Ket
+ 42 4 CBra 3
+ 46 4 Ket
+ 49 49 Ket
+ 52 End
+------------------------------------------------------------------
+
+/(?1)()((((((\1++))\x85)+)|))/
+------------------------------------------------------------------
+ 0 69 Bra
+ 3 6 Recurse
+ 6 4 CBra 1
+ 10 4 Ket
+ 13 53 CBra 2
+ 17 43 CBra 3
+ 21 36 CBra 4
+ 25 29 CBra 5
+ 29 20 CBra 6
+ 33 13 CBra 7
+ 37 6 Once
+ 40 \1+
+ 43 6 Ket
+ 46 13 Ket
+ 49 20 Ket
+ 52 \x{85}
+ 54 29 KetRmax
+ 57 36 Ket
+ 60 3 Alt
+ 63 46 Ket
+ 66 53 Ket
+ 69 69 Ket
+ 72 End
+------------------------------------------------------------------
+
+# Check the absolute limit on nesting (?| etc. This varies with code unit
+# width because the workspace is a different number of bytes. It will fail
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
+/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
+)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+/parens_nest_limit=1000,-fullbincode
+
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+Failed: error 186 at offset 1147: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 1147: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 110 Bra
+ 3 97 Once
+ 6 8 Cond
+ 9 1 Cond ref
+ 11 103 Recurse
+ 14 8 Ket
+ 17 8 Cond
+ 20 1 Cond ref
+ 22 103 Recurse
+ 25 8 Ket
+ 28 8 Cond
+ 31 1 Cond ref
+ 33 103 Recurse
+ 36 8 Ket
+ 39 8 Cond
+ 42 1 Cond ref
+ 44 103 Recurse
+ 47 8 Ket
+ 50 8 Cond
+ 53 1 Cond ref
+ 55 103 Recurse
+ 58 8 Ket
+ 61 8 Cond
+ 64 1 Cond ref
+ 66 103 Recurse
+ 69 8 Ket
+ 72 8 Cond
+ 75 1 Cond ref
+ 77 103 Recurse
+ 80 8 Ket
+ 83 14 SBraPos
+ 86 8 SCond
+ 89 1 Cond ref
+ 91 103 Recurse
+ 94 8 Ket
+ 97 14 KetRpos
+100 97 Ket
+103 4 CBra 1
+107 4 Ket
+110 110 Ket
+113 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 58 Bra
+ 3 45 Once
+ 6 5 Cond
+ 9 1 Cond ref
+ 11 10 Alt
+ 14 a
+ 16 51 Recurse
+ 19 b
+ 21 15 Ket
+ 24 21 SBraPos
+ 27 5 SCond
+ 30 1 Cond ref
+ 32 10 Alt
+ 35 a
+ 37 51 Recurse
+ 40 b
+ 42 15 Ket
+ 45 21 KetRpos
+ 48 45 Ket
+ 51 4 CBra 1
+ 55 4 Ket
+ 58 58 Ket
+ 61 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 194 Bra
+ 3 61 CBra 1
+ 7 3 Recurse
+ 10 131 Recurse
+ 13 138 Recurse
+ 16 145 Recurse
+ 19 152 Recurse
+ 22 159 Recurse
+ 25 166 Recurse
+ 28 173 Recurse
+ 31 180 Recurse
+ 34 180 Recurse
+ 37 173 Recurse
+ 40 166 Recurse
+ 43 159 Recurse
+ 46 152 Recurse
+ 49 145 Recurse
+ 52 138 Recurse
+ 55 131 Recurse
+ 58 3 Recurse
+ 61 0 Recurse
+ 64 61 Ket
+ 67 61 SCBra 1
+ 71 3 Recurse
+ 74 131 Recurse
+ 77 138 Recurse
+ 80 145 Recurse
+ 83 152 Recurse
+ 86 159 Recurse
+ 89 166 Recurse
+ 92 173 Recurse
+ 95 180 Recurse
+ 98 180 Recurse
+101 173 Recurse
+104 166 Recurse
+107 159 Recurse
+110 152 Recurse
+113 145 Recurse
+116 138 Recurse
+119 131 Recurse
+122 3 Recurse
+125 0 Recurse
+128 61 KetRmax
+131 4 CBra 2
+135 4 Ket
+138 4 CBra 3
+142 4 Ket
+145 4 CBra 4
+149 4 Ket
+152 4 CBra 5
+156 4 Ket
+159 4 CBra 6
+163 4 Ket
+166 4 CBra 7
+170 4 Ket
+173 4 CBra 8
+177 4 Ket
+180 4 CBra 9
+184 4 Ket
+187 4 CBra 10
+191 4 Ket
+194 194 Ket
+197 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
+# End of testinput8
diff --git a/testdata/testoutput8-32 b/testdata/testoutput8-32-2
index 1b843a5..babd0c7 100644
--- a/testdata/testoutput8-32
+++ b/testdata/testoutput8-32-2
@@ -1,8 +1,11 @@
-# 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.
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
#pattern fullbincode,memory
@@ -378,7 +381,7 @@ Options: utf
First code unit = 'A'
Last code unit = '.'
Subject length lower bound = 4
-
+
/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
Memory allocation (code space): 44
------------------------------------------------------------------
@@ -842,10 +845,182 @@ Memory allocation (code space): 28
# Check the absolute limit on nesting (?| etc. This varies with code unit
# width because the workspace is a different number of bytes. It will fail
-# in 8-bit and 16-bit but not in 32-bit.
-
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
/parens_nest_limit=1000,-fullbincode
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+Failed: error 186 at offset 979: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 979: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 79 Bra
+ 2 70 Once
+ 4 6 Cond
+ 6 1 Cond ref
+ 8 74 Recurse
+ 10 6 Ket
+ 12 6 Cond
+ 14 1 Cond ref
+ 16 74 Recurse
+ 18 6 Ket
+ 20 6 Cond
+ 22 1 Cond ref
+ 24 74 Recurse
+ 26 6 Ket
+ 28 6 Cond
+ 30 1 Cond ref
+ 32 74 Recurse
+ 34 6 Ket
+ 36 6 Cond
+ 38 1 Cond ref
+ 40 74 Recurse
+ 42 6 Ket
+ 44 6 Cond
+ 46 1 Cond ref
+ 48 74 Recurse
+ 50 6 Ket
+ 52 6 Cond
+ 54 1 Cond ref
+ 56 74 Recurse
+ 58 6 Ket
+ 60 10 SBraPos
+ 62 6 SCond
+ 64 1 Cond ref
+ 66 74 Recurse
+ 68 6 Ket
+ 70 10 KetRpos
+ 72 70 Ket
+ 74 3 CBra 1
+ 77 3 Ket
+ 79 79 Ket
+ 81 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 43 Bra
+ 2 34 Once
+ 4 4 Cond
+ 6 1 Cond ref
+ 8 8 Alt
+ 10 a
+ 12 38 Recurse
+ 14 b
+ 16 12 Ket
+ 18 16 SBraPos
+ 20 4 SCond
+ 22 1 Cond ref
+ 24 8 Alt
+ 26 a
+ 28 38 Recurse
+ 30 b
+ 32 12 Ket
+ 34 16 KetRpos
+ 36 34 Ket
+ 38 3 CBra 1
+ 41 3 Ket
+ 43 43 Ket
+ 45 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 133 Bra
+ 2 41 CBra 1
+ 5 2 Recurse
+ 7 88 Recurse
+ 9 93 Recurse
+ 11 98 Recurse
+ 13 103 Recurse
+ 15 108 Recurse
+ 17 113 Recurse
+ 19 118 Recurse
+ 21 123 Recurse
+ 23 123 Recurse
+ 25 118 Recurse
+ 27 113 Recurse
+ 29 108 Recurse
+ 31 103 Recurse
+ 33 98 Recurse
+ 35 93 Recurse
+ 37 88 Recurse
+ 39 2 Recurse
+ 41 0 Recurse
+ 43 41 Ket
+ 45 41 SCBra 1
+ 48 2 Recurse
+ 50 88 Recurse
+ 52 93 Recurse
+ 54 98 Recurse
+ 56 103 Recurse
+ 58 108 Recurse
+ 60 113 Recurse
+ 62 118 Recurse
+ 64 123 Recurse
+ 66 123 Recurse
+ 68 118 Recurse
+ 70 113 Recurse
+ 72 108 Recurse
+ 74 103 Recurse
+ 76 98 Recurse
+ 78 93 Recurse
+ 80 88 Recurse
+ 82 2 Recurse
+ 84 0 Recurse
+ 86 41 KetRmax
+ 88 3 CBra 2
+ 91 3 Ket
+ 93 3 CBra 3
+ 96 3 Ket
+ 98 3 CBra 4
+101 3 Ket
+103 3 CBra 5
+106 3 Ket
+108 3 CBra 6
+111 3 Ket
+113 3 CBra 7
+116 3 Ket
+118 3 CBra 8
+121 3 Ket
+123 3 CBra 9
+126 3 Ket
+128 3 CBra 10
+131 3 Ket
+133 133 Ket
+135 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
# End of testinput8
diff --git a/testdata/testoutput8-32-3 b/testdata/testoutput8-32-3
new file mode 100644
index 0000000..babd0c7
--- /dev/null
+++ b/testdata/testoutput8-32-3
@@ -0,0 +1,1026 @@
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
+
+#pattern fullbincode,memory
+
+/((?i)b)/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 5 CBra 1
+ 5 /i b
+ 7 5 Ket
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/(?s)(.*X|^B)/
+Memory allocation (code space): 76
+------------------------------------------------------------------
+ 0 16 Bra
+ 2 7 CBra 1
+ 5 AllAny*
+ 7 X
+ 9 5 Alt
+ 11 ^
+ 12 B
+ 14 12 Ket
+ 16 16 Ket
+ 18 End
+------------------------------------------------------------------
+
+/(?s:.*X|^B)/
+Memory allocation (code space): 72
+------------------------------------------------------------------
+ 0 15 Bra
+ 2 6 Bra
+ 4 AllAny*
+ 6 X
+ 8 5 Alt
+ 10 ^
+ 11 B
+ 13 11 Ket
+ 15 15 Ket
+ 17 End
+------------------------------------------------------------------
+
+/^[[:alnum:]]/
+Memory allocation (code space): 60
+------------------------------------------------------------------
+ 0 12 Bra
+ 2 ^
+ 3 [0-9A-Za-z]
+ 12 12 Ket
+ 14 End
+------------------------------------------------------------------
+
+/#/Ix
+Memory allocation (code space): 20
+------------------------------------------------------------------
+ 0 2 Bra
+ 2 2 Ket
+ 4 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+May match empty string
+Options: extended
+Subject length lower bound = 0
+
+/a#/Ix
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 a
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: extended
+First code unit = 'a'
+Subject length lower bound = 1
+
+/x?+/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 x?+
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/x++/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 x++
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/x{1,3}+/
+Memory allocation (code space): 40
+------------------------------------------------------------------
+ 0 7 Bra
+ 2 x
+ 4 x{0,2}+
+ 7 7 Ket
+ 9 End
+------------------------------------------------------------------
+
+/(x)*+/
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 Braposzero
+ 3 5 CBraPos 1
+ 6 x
+ 8 5 KetRpos
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+Memory allocation (code space): 220
+------------------------------------------------------------------
+ 0 52 Bra
+ 2 ^
+ 3 47 CBra 1
+ 6 5 CBra 2
+ 9 a+
+ 11 5 Ket
+ 13 13 CBra 3
+ 16 [ab]+?
+ 26 13 Ket
+ 28 13 CBra 4
+ 31 [bc]+
+ 41 13 Ket
+ 43 5 CBra 5
+ 46 \w*+
+ 48 5 Ket
+ 50 47 Ket
+ 52 52 Ket
+ 54 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"
+Memory allocation (code space): 3296
+------------------------------------------------------------------
+ 0 821 Bra
+ 2 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
+820 \b
+821 821 Ket
+823 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"
+Memory allocation (code space): 3256
+------------------------------------------------------------------
+ 0 811 Bra
+ 2 $<.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
+810 \b
+811 811 Ket
+813 End
+------------------------------------------------------------------
+
+/(a(?1)b)/
+Memory allocation (code space): 64
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 9 CBra 1
+ 5 a
+ 7 2 Recurse
+ 9 b
+ 11 9 Ket
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/(a(?1)+b)/
+Memory allocation (code space): 80
+------------------------------------------------------------------
+ 0 17 Bra
+ 2 13 CBra 1
+ 5 a
+ 7 4 Once
+ 9 2 Recurse
+ 11 4 KetRmax
+ 13 b
+ 15 13 Ket
+ 17 17 Ket
+ 19 End
+------------------------------------------------------------------
+
+/a(?P<name1>b|c)d(?P<longername2>e)/
+Memory allocation (code space): 108
+------------------------------------------------------------------
+ 0 24 Bra
+ 2 a
+ 4 5 CBra 1
+ 7 b
+ 9 4 Alt
+ 11 c
+ 13 9 Ket
+ 15 d
+ 17 5 CBra 2
+ 20 e
+ 22 5 Ket
+ 24 24 Ket
+ 26 End
+------------------------------------------------------------------
+
+/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+Memory allocation (code space): 128
+------------------------------------------------------------------
+ 0 29 Bra
+ 2 18 Bra
+ 4 a
+ 6 12 CBra 1
+ 9 c
+ 11 5 CBra 2
+ 14 d
+ 16 5 Ket
+ 18 12 Ket
+ 20 18 Ket
+ 22 5 CBra 3
+ 25 a
+ 27 5 Ket
+ 29 29 Ket
+ 31 End
+------------------------------------------------------------------
+
+/(?P<a>a)...(?P=a)bbb(?P>a)d/
+Memory allocation (code space): 108
+------------------------------------------------------------------
+ 0 24 Bra
+ 2 5 CBra 1
+ 5 a
+ 7 5 Ket
+ 9 Any
+ 10 Any
+ 11 Any
+ 12 \1
+ 14 bbb
+ 20 2 Recurse
+ 22 d
+ 24 24 Ket
+ 26 End
+------------------------------------------------------------------
+
+/abc(?C255)de(?C)f/
+Memory allocation (code space): 100
+------------------------------------------------------------------
+ 0 22 Bra
+ 2 abc
+ 8 Callout 255 10 1
+ 12 de
+ 16 Callout 0 16 1
+ 20 f
+ 22 22 Ket
+ 24 End
+------------------------------------------------------------------
+
+/abcde/auto_callout
+Memory allocation (code space): 156
+------------------------------------------------------------------
+ 0 36 Bra
+ 2 Callout 255 0 1
+ 6 a
+ 8 Callout 255 1 1
+ 12 b
+ 14 Callout 255 2 1
+ 18 c
+ 20 Callout 255 3 1
+ 24 d
+ 26 Callout 255 4 1
+ 30 e
+ 32 Callout 255 5 0
+ 36 36 Ket
+ 38 End
+------------------------------------------------------------------
+
+/\x{100}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{1000}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{1000}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{10000}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{10000}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{100000}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100000}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{10ffff}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{10ffff}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{110000}/utf
+Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+
+/[\x{ff}]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{ff}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[\x{100}]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x80/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{80}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\xff/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{ff}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 A\x{2262}\x{391}.
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = 'A'
+Last code unit = '.'
+Subject length lower bound = 4
+
+/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+Memory allocation (code space): 44
+------------------------------------------------------------------
+ 0 8 Bra
+ 2 \x{d55c}\x{ad6d}\x{c5b4}
+ 8 8 Ket
+ 10 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \x{d55c}
+Last code unit = \x{c5b4}
+Subject length lower bound = 3
+
+/\x{65e5}\x{672c}\x{8a9e}/I,utf
+Memory allocation (code space): 44
+------------------------------------------------------------------
+ 0 8 Bra
+ 2 \x{65e5}\x{672c}\x{8a9e}
+ 8 8 Ket
+ 10 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \x{65e5}
+Last code unit = \x{8a9e}
+Subject length lower bound = 3
+
+/[\x{100}]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[Z\x{100}]/utf
+Memory allocation (code space): 76
+------------------------------------------------------------------
+ 0 16 Bra
+ 2 [Z\x{100}]
+ 16 16 Ket
+ 18 End
+------------------------------------------------------------------
+
+/^[\x{100}\E-\Q\E\x{150}]/utf
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 ^
+ 3 [\x{100}-\x{150}]
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E]/utf
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 ^
+ 3 [\x{100}-\x{150}]
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E/utf
+Failed: error 106 at offset 13: missing terminating ] for character class
+
+/[\p{L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\p{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\p{^L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\P{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\P{L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\P{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\P{^L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\p{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[abc\p{L}\x{0660}]/utf
+Memory allocation (code space): 88
+------------------------------------------------------------------
+ 0 19 Bra
+ 2 [a-c\p{L}\x{660}]
+ 19 19 Ket
+ 21 End
+------------------------------------------------------------------
+
+/[\p{Nd}]/utf
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\p{Nd}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\p{Nd}+-]+/utf
+Memory allocation (code space): 84
+------------------------------------------------------------------
+ 0 18 Bra
+ 2 [+\-\p{Nd}]++
+ 18 18 Ket
+ 20 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+Memory allocation (code space): 60
+------------------------------------------------------------------
+ 0 12 Bra
+ 2 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 12 12 Ket
+ 14 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+Memory allocation (code space): 60
+------------------------------------------------------------------
+ 0 12 Bra
+ 2 A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 12 12 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[\x{105}-\x{109}]/i,utf
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\x{104}-\x{109}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/( ( (?(1)0|) )* )/x
+Memory allocation (code space): 104
+------------------------------------------------------------------
+ 0 23 Bra
+ 2 19 CBra 1
+ 5 Brazero
+ 6 13 SCBra 2
+ 9 6 Cond
+ 11 1 Cond ref
+ 13 0
+ 15 2 Alt
+ 17 8 Ket
+ 19 13 KetRmax
+ 21 19 Ket
+ 23 23 Ket
+ 25 End
+------------------------------------------------------------------
+
+/( (?(1)0|)* )/x
+Memory allocation (code space): 84
+------------------------------------------------------------------
+ 0 18 Bra
+ 2 14 CBra 1
+ 5 Brazero
+ 6 6 SCond
+ 8 1 Cond ref
+ 10 0
+ 12 2 Alt
+ 14 8 KetRmax
+ 16 14 Ket
+ 18 18 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[a]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 a
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[a]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 a
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[\xaa]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{aa}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[\xaa]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{aa}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^a]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^a]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^a]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^a]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^\xaa]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^\x{aa}]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^\xaa]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^\x{aa}]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+#pattern -memory
+
+/[^\d]/utf,ucp
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [^\p{Nd}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[[:^alpha:][:^cntrl:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 [\P{L}\P{Cc}]++
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/[[:^cntrl:][:^alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 [\P{Cc}\P{L}]++
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/[[:alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 [\p{L}]++
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[[:^alpha:]\S]+/utf,ucp
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 [\P{L}\P{Xsp}]++
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/
+------------------------------------------------------------------
+ 0 60 Bra
+ 2 abc
+ 8 5 CBra 1
+ 11 d
+ 13 4 Alt
+ 15 e
+ 17 9 Ket
+ 19 *THEN
+ 20 x
+ 22 12 CBra 2
+ 25 123
+ 31 *THEN
+ 32 4
+ 34 24 Alt
+ 36 567
+ 42 5 CBra 3
+ 45 b
+ 47 4 Alt
+ 49 q
+ 51 9 Ket
+ 53 *THEN
+ 54 xx
+ 58 36 Ket
+ 60 60 Ket
+ 62 End
+------------------------------------------------------------------
+
+/(((a\2)|(a*)\g<-1>))*a?/
+------------------------------------------------------------------
+ 0 39 Bra
+ 2 Brazero
+ 3 32 SCBra 1
+ 6 27 Once
+ 8 12 CBra 2
+ 11 7 CBra 3
+ 14 a
+ 16 \2
+ 18 7 Ket
+ 20 11 Alt
+ 22 5 CBra 4
+ 25 a*
+ 27 5 Ket
+ 29 22 Recurse
+ 31 23 Ket
+ 33 27 Ket
+ 35 32 KetRmax
+ 37 a?+
+ 39 39 Ket
+ 41 End
+------------------------------------------------------------------
+
+/((?+1)(\1))/
+------------------------------------------------------------------
+ 0 20 Bra
+ 2 16 Once
+ 4 12 CBra 1
+ 7 9 Recurse
+ 9 5 CBra 2
+ 12 \1
+ 14 5 Ket
+ 16 12 Ket
+ 18 16 Ket
+ 20 20 Ket
+ 22 End
+------------------------------------------------------------------
+
+"(?1)(?#?'){2}(a)"
+------------------------------------------------------------------
+ 0 21 Bra
+ 2 4 Once
+ 4 14 Recurse
+ 6 4 Ket
+ 8 4 Once
+ 10 14 Recurse
+ 12 4 Ket
+ 14 5 CBra 1
+ 17 a
+ 19 5 Ket
+ 21 21 Ket
+ 23 End
+------------------------------------------------------------------
+
+/.((?2)(?R)|\1|$)()/
+------------------------------------------------------------------
+ 0 28 Bra
+ 2 Any
+ 3 18 Once
+ 5 7 CBra 1
+ 8 23 Recurse
+ 10 0 Recurse
+ 12 4 Alt
+ 14 \1
+ 16 3 Alt
+ 18 $
+ 19 14 Ket
+ 21 18 Ket
+ 23 3 CBra 2
+ 26 3 Ket
+ 28 28 Ket
+ 30 End
+------------------------------------------------------------------
+
+/.((?3)(?R)()(?2)|\1|$)()/
+------------------------------------------------------------------
+ 0 35 Bra
+ 2 Any
+ 3 25 Once
+ 5 14 CBra 1
+ 8 30 Recurse
+ 10 0 Recurse
+ 12 3 CBra 2
+ 15 3 Ket
+ 17 12 Recurse
+ 19 4 Alt
+ 21 \1
+ 23 3 Alt
+ 25 $
+ 26 21 Ket
+ 28 25 Ket
+ 30 3 CBra 3
+ 33 3 Ket
+ 35 35 Ket
+ 37 End
+------------------------------------------------------------------
+
+/(?1)()((((((\1++))\x85)+)|))/
+------------------------------------------------------------------
+ 0 50 Bra
+ 2 4 Recurse
+ 4 3 CBra 1
+ 7 3 Ket
+ 9 39 CBra 2
+ 12 32 CBra 3
+ 15 27 CBra 4
+ 18 22 CBra 5
+ 21 15 CBra 6
+ 24 10 CBra 7
+ 27 5 Once
+ 29 \1+
+ 32 5 Ket
+ 34 10 Ket
+ 36 15 Ket
+ 38 \x{85}
+ 40 22 KetRmax
+ 42 27 Ket
+ 44 2 Alt
+ 46 34 Ket
+ 48 39 Ket
+ 50 50 Ket
+ 52 End
+------------------------------------------------------------------
+
+# Check the absolute limit on nesting (?| etc. This varies with code unit
+# width because the workspace is a different number of bytes. It will fail
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
+/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
+)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+/parens_nest_limit=1000,-fullbincode
+
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+Failed: error 186 at offset 979: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 979: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 79 Bra
+ 2 70 Once
+ 4 6 Cond
+ 6 1 Cond ref
+ 8 74 Recurse
+ 10 6 Ket
+ 12 6 Cond
+ 14 1 Cond ref
+ 16 74 Recurse
+ 18 6 Ket
+ 20 6 Cond
+ 22 1 Cond ref
+ 24 74 Recurse
+ 26 6 Ket
+ 28 6 Cond
+ 30 1 Cond ref
+ 32 74 Recurse
+ 34 6 Ket
+ 36 6 Cond
+ 38 1 Cond ref
+ 40 74 Recurse
+ 42 6 Ket
+ 44 6 Cond
+ 46 1 Cond ref
+ 48 74 Recurse
+ 50 6 Ket
+ 52 6 Cond
+ 54 1 Cond ref
+ 56 74 Recurse
+ 58 6 Ket
+ 60 10 SBraPos
+ 62 6 SCond
+ 64 1 Cond ref
+ 66 74 Recurse
+ 68 6 Ket
+ 70 10 KetRpos
+ 72 70 Ket
+ 74 3 CBra 1
+ 77 3 Ket
+ 79 79 Ket
+ 81 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 43 Bra
+ 2 34 Once
+ 4 4 Cond
+ 6 1 Cond ref
+ 8 8 Alt
+ 10 a
+ 12 38 Recurse
+ 14 b
+ 16 12 Ket
+ 18 16 SBraPos
+ 20 4 SCond
+ 22 1 Cond ref
+ 24 8 Alt
+ 26 a
+ 28 38 Recurse
+ 30 b
+ 32 12 Ket
+ 34 16 KetRpos
+ 36 34 Ket
+ 38 3 CBra 1
+ 41 3 Ket
+ 43 43 Ket
+ 45 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 133 Bra
+ 2 41 CBra 1
+ 5 2 Recurse
+ 7 88 Recurse
+ 9 93 Recurse
+ 11 98 Recurse
+ 13 103 Recurse
+ 15 108 Recurse
+ 17 113 Recurse
+ 19 118 Recurse
+ 21 123 Recurse
+ 23 123 Recurse
+ 25 118 Recurse
+ 27 113 Recurse
+ 29 108 Recurse
+ 31 103 Recurse
+ 33 98 Recurse
+ 35 93 Recurse
+ 37 88 Recurse
+ 39 2 Recurse
+ 41 0 Recurse
+ 43 41 Ket
+ 45 41 SCBra 1
+ 48 2 Recurse
+ 50 88 Recurse
+ 52 93 Recurse
+ 54 98 Recurse
+ 56 103 Recurse
+ 58 108 Recurse
+ 60 113 Recurse
+ 62 118 Recurse
+ 64 123 Recurse
+ 66 123 Recurse
+ 68 118 Recurse
+ 70 113 Recurse
+ 72 108 Recurse
+ 74 103 Recurse
+ 76 98 Recurse
+ 78 93 Recurse
+ 80 88 Recurse
+ 82 2 Recurse
+ 84 0 Recurse
+ 86 41 KetRmax
+ 88 3 CBra 2
+ 91 3 Ket
+ 93 3 CBra 3
+ 96 3 Ket
+ 98 3 CBra 4
+101 3 Ket
+103 3 CBra 5
+106 3 Ket
+108 3 CBra 6
+111 3 Ket
+113 3 CBra 7
+116 3 Ket
+118 3 CBra 8
+121 3 Ket
+123 3 CBra 9
+126 3 Ket
+128 3 CBra 10
+131 3 Ket
+133 133 Ket
+135 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
+# End of testinput8
diff --git a/testdata/testoutput8-32-4 b/testdata/testoutput8-32-4
new file mode 100644
index 0000000..babd0c7
--- /dev/null
+++ b/testdata/testoutput8-32-4
@@ -0,0 +1,1026 @@
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
+
+#pattern fullbincode,memory
+
+/((?i)b)/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 5 CBra 1
+ 5 /i b
+ 7 5 Ket
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/(?s)(.*X|^B)/
+Memory allocation (code space): 76
+------------------------------------------------------------------
+ 0 16 Bra
+ 2 7 CBra 1
+ 5 AllAny*
+ 7 X
+ 9 5 Alt
+ 11 ^
+ 12 B
+ 14 12 Ket
+ 16 16 Ket
+ 18 End
+------------------------------------------------------------------
+
+/(?s:.*X|^B)/
+Memory allocation (code space): 72
+------------------------------------------------------------------
+ 0 15 Bra
+ 2 6 Bra
+ 4 AllAny*
+ 6 X
+ 8 5 Alt
+ 10 ^
+ 11 B
+ 13 11 Ket
+ 15 15 Ket
+ 17 End
+------------------------------------------------------------------
+
+/^[[:alnum:]]/
+Memory allocation (code space): 60
+------------------------------------------------------------------
+ 0 12 Bra
+ 2 ^
+ 3 [0-9A-Za-z]
+ 12 12 Ket
+ 14 End
+------------------------------------------------------------------
+
+/#/Ix
+Memory allocation (code space): 20
+------------------------------------------------------------------
+ 0 2 Bra
+ 2 2 Ket
+ 4 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+May match empty string
+Options: extended
+Subject length lower bound = 0
+
+/a#/Ix
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 a
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: extended
+First code unit = 'a'
+Subject length lower bound = 1
+
+/x?+/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 x?+
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/x++/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 x++
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/x{1,3}+/
+Memory allocation (code space): 40
+------------------------------------------------------------------
+ 0 7 Bra
+ 2 x
+ 4 x{0,2}+
+ 7 7 Ket
+ 9 End
+------------------------------------------------------------------
+
+/(x)*+/
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 Braposzero
+ 3 5 CBraPos 1
+ 6 x
+ 8 5 KetRpos
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+Memory allocation (code space): 220
+------------------------------------------------------------------
+ 0 52 Bra
+ 2 ^
+ 3 47 CBra 1
+ 6 5 CBra 2
+ 9 a+
+ 11 5 Ket
+ 13 13 CBra 3
+ 16 [ab]+?
+ 26 13 Ket
+ 28 13 CBra 4
+ 31 [bc]+
+ 41 13 Ket
+ 43 5 CBra 5
+ 46 \w*+
+ 48 5 Ket
+ 50 47 Ket
+ 52 52 Ket
+ 54 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"
+Memory allocation (code space): 3296
+------------------------------------------------------------------
+ 0 821 Bra
+ 2 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
+820 \b
+821 821 Ket
+823 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"
+Memory allocation (code space): 3256
+------------------------------------------------------------------
+ 0 811 Bra
+ 2 $<.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
+810 \b
+811 811 Ket
+813 End
+------------------------------------------------------------------
+
+/(a(?1)b)/
+Memory allocation (code space): 64
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 9 CBra 1
+ 5 a
+ 7 2 Recurse
+ 9 b
+ 11 9 Ket
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/(a(?1)+b)/
+Memory allocation (code space): 80
+------------------------------------------------------------------
+ 0 17 Bra
+ 2 13 CBra 1
+ 5 a
+ 7 4 Once
+ 9 2 Recurse
+ 11 4 KetRmax
+ 13 b
+ 15 13 Ket
+ 17 17 Ket
+ 19 End
+------------------------------------------------------------------
+
+/a(?P<name1>b|c)d(?P<longername2>e)/
+Memory allocation (code space): 108
+------------------------------------------------------------------
+ 0 24 Bra
+ 2 a
+ 4 5 CBra 1
+ 7 b
+ 9 4 Alt
+ 11 c
+ 13 9 Ket
+ 15 d
+ 17 5 CBra 2
+ 20 e
+ 22 5 Ket
+ 24 24 Ket
+ 26 End
+------------------------------------------------------------------
+
+/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+Memory allocation (code space): 128
+------------------------------------------------------------------
+ 0 29 Bra
+ 2 18 Bra
+ 4 a
+ 6 12 CBra 1
+ 9 c
+ 11 5 CBra 2
+ 14 d
+ 16 5 Ket
+ 18 12 Ket
+ 20 18 Ket
+ 22 5 CBra 3
+ 25 a
+ 27 5 Ket
+ 29 29 Ket
+ 31 End
+------------------------------------------------------------------
+
+/(?P<a>a)...(?P=a)bbb(?P>a)d/
+Memory allocation (code space): 108
+------------------------------------------------------------------
+ 0 24 Bra
+ 2 5 CBra 1
+ 5 a
+ 7 5 Ket
+ 9 Any
+ 10 Any
+ 11 Any
+ 12 \1
+ 14 bbb
+ 20 2 Recurse
+ 22 d
+ 24 24 Ket
+ 26 End
+------------------------------------------------------------------
+
+/abc(?C255)de(?C)f/
+Memory allocation (code space): 100
+------------------------------------------------------------------
+ 0 22 Bra
+ 2 abc
+ 8 Callout 255 10 1
+ 12 de
+ 16 Callout 0 16 1
+ 20 f
+ 22 22 Ket
+ 24 End
+------------------------------------------------------------------
+
+/abcde/auto_callout
+Memory allocation (code space): 156
+------------------------------------------------------------------
+ 0 36 Bra
+ 2 Callout 255 0 1
+ 6 a
+ 8 Callout 255 1 1
+ 12 b
+ 14 Callout 255 2 1
+ 18 c
+ 20 Callout 255 3 1
+ 24 d
+ 26 Callout 255 4 1
+ 30 e
+ 32 Callout 255 5 0
+ 36 36 Ket
+ 38 End
+------------------------------------------------------------------
+
+/\x{100}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{1000}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{1000}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{10000}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{10000}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{100000}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100000}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{10ffff}/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{10ffff}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{110000}/utf
+Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+
+/[\x{ff}]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{ff}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[\x{100}]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x80/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{80}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\xff/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{ff}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 A\x{2262}\x{391}.
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = 'A'
+Last code unit = '.'
+Subject length lower bound = 4
+
+/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+Memory allocation (code space): 44
+------------------------------------------------------------------
+ 0 8 Bra
+ 2 \x{d55c}\x{ad6d}\x{c5b4}
+ 8 8 Ket
+ 10 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \x{d55c}
+Last code unit = \x{c5b4}
+Subject length lower bound = 3
+
+/\x{65e5}\x{672c}\x{8a9e}/I,utf
+Memory allocation (code space): 44
+------------------------------------------------------------------
+ 0 8 Bra
+ 2 \x{65e5}\x{672c}\x{8a9e}
+ 8 8 Ket
+ 10 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \x{65e5}
+Last code unit = \x{8a9e}
+Subject length lower bound = 3
+
+/[\x{100}]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{100}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[Z\x{100}]/utf
+Memory allocation (code space): 76
+------------------------------------------------------------------
+ 0 16 Bra
+ 2 [Z\x{100}]
+ 16 16 Ket
+ 18 End
+------------------------------------------------------------------
+
+/^[\x{100}\E-\Q\E\x{150}]/utf
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 ^
+ 3 [\x{100}-\x{150}]
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E]/utf
+Memory allocation (code space): 52
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 ^
+ 3 [\x{100}-\x{150}]
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E/utf
+Failed: error 106 at offset 13: missing terminating ] for character class
+
+/[\p{L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\p{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\p{^L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\P{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\P{L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\P{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\P{^L}]/
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\p{L}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[abc\p{L}\x{0660}]/utf
+Memory allocation (code space): 88
+------------------------------------------------------------------
+ 0 19 Bra
+ 2 [a-c\p{L}\x{660}]
+ 19 19 Ket
+ 21 End
+------------------------------------------------------------------
+
+/[\p{Nd}]/utf
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\p{Nd}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\p{Nd}+-]+/utf
+Memory allocation (code space): 84
+------------------------------------------------------------------
+ 0 18 Bra
+ 2 [+\-\p{Nd}]++
+ 18 18 Ket
+ 20 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+Memory allocation (code space): 60
+------------------------------------------------------------------
+ 0 12 Bra
+ 2 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 12 12 Ket
+ 14 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+Memory allocation (code space): 60
+------------------------------------------------------------------
+ 0 12 Bra
+ 2 A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 12 12 Ket
+ 14 End
+------------------------------------------------------------------
+
+/[\x{105}-\x{109}]/i,utf
+Memory allocation (code space): 48
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [\x{104}-\x{109}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/( ( (?(1)0|) )* )/x
+Memory allocation (code space): 104
+------------------------------------------------------------------
+ 0 23 Bra
+ 2 19 CBra 1
+ 5 Brazero
+ 6 13 SCBra 2
+ 9 6 Cond
+ 11 1 Cond ref
+ 13 0
+ 15 2 Alt
+ 17 8 Ket
+ 19 13 KetRmax
+ 21 19 Ket
+ 23 23 Ket
+ 25 End
+------------------------------------------------------------------
+
+/( (?(1)0|)* )/x
+Memory allocation (code space): 84
+------------------------------------------------------------------
+ 0 18 Bra
+ 2 14 CBra 1
+ 5 Brazero
+ 6 6 SCond
+ 8 1 Cond ref
+ 10 0
+ 12 2 Alt
+ 14 8 KetRmax
+ 16 14 Ket
+ 18 18 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[a]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 a
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[a]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 a
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[\xaa]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{aa}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[\xaa]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 \x{aa}
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^a]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^a]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^a]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^a]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^\xaa]/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^\x{aa}]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+/[^\xaa]/utf
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 4 Bra
+ 2 [^\x{aa}]
+ 4 4 Ket
+ 6 End
+------------------------------------------------------------------
+
+#pattern -memory
+
+/[^\d]/utf,ucp
+------------------------------------------------------------------
+ 0 9 Bra
+ 2 [^\p{Nd}]
+ 9 9 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[[:^alpha:][:^cntrl:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 [\P{L}\P{Cc}]++
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/[[:^cntrl:][:^alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 [\P{Cc}\P{L}]++
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/[[:alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 10 Bra
+ 2 [\p{L}]++
+ 10 10 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[[:^alpha:]\S]+/utf,ucp
+------------------------------------------------------------------
+ 0 13 Bra
+ 2 [\P{L}\P{Xsp}]++
+ 13 13 Ket
+ 15 End
+------------------------------------------------------------------
+
+/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/
+------------------------------------------------------------------
+ 0 60 Bra
+ 2 abc
+ 8 5 CBra 1
+ 11 d
+ 13 4 Alt
+ 15 e
+ 17 9 Ket
+ 19 *THEN
+ 20 x
+ 22 12 CBra 2
+ 25 123
+ 31 *THEN
+ 32 4
+ 34 24 Alt
+ 36 567
+ 42 5 CBra 3
+ 45 b
+ 47 4 Alt
+ 49 q
+ 51 9 Ket
+ 53 *THEN
+ 54 xx
+ 58 36 Ket
+ 60 60 Ket
+ 62 End
+------------------------------------------------------------------
+
+/(((a\2)|(a*)\g<-1>))*a?/
+------------------------------------------------------------------
+ 0 39 Bra
+ 2 Brazero
+ 3 32 SCBra 1
+ 6 27 Once
+ 8 12 CBra 2
+ 11 7 CBra 3
+ 14 a
+ 16 \2
+ 18 7 Ket
+ 20 11 Alt
+ 22 5 CBra 4
+ 25 a*
+ 27 5 Ket
+ 29 22 Recurse
+ 31 23 Ket
+ 33 27 Ket
+ 35 32 KetRmax
+ 37 a?+
+ 39 39 Ket
+ 41 End
+------------------------------------------------------------------
+
+/((?+1)(\1))/
+------------------------------------------------------------------
+ 0 20 Bra
+ 2 16 Once
+ 4 12 CBra 1
+ 7 9 Recurse
+ 9 5 CBra 2
+ 12 \1
+ 14 5 Ket
+ 16 12 Ket
+ 18 16 Ket
+ 20 20 Ket
+ 22 End
+------------------------------------------------------------------
+
+"(?1)(?#?'){2}(a)"
+------------------------------------------------------------------
+ 0 21 Bra
+ 2 4 Once
+ 4 14 Recurse
+ 6 4 Ket
+ 8 4 Once
+ 10 14 Recurse
+ 12 4 Ket
+ 14 5 CBra 1
+ 17 a
+ 19 5 Ket
+ 21 21 Ket
+ 23 End
+------------------------------------------------------------------
+
+/.((?2)(?R)|\1|$)()/
+------------------------------------------------------------------
+ 0 28 Bra
+ 2 Any
+ 3 18 Once
+ 5 7 CBra 1
+ 8 23 Recurse
+ 10 0 Recurse
+ 12 4 Alt
+ 14 \1
+ 16 3 Alt
+ 18 $
+ 19 14 Ket
+ 21 18 Ket
+ 23 3 CBra 2
+ 26 3 Ket
+ 28 28 Ket
+ 30 End
+------------------------------------------------------------------
+
+/.((?3)(?R)()(?2)|\1|$)()/
+------------------------------------------------------------------
+ 0 35 Bra
+ 2 Any
+ 3 25 Once
+ 5 14 CBra 1
+ 8 30 Recurse
+ 10 0 Recurse
+ 12 3 CBra 2
+ 15 3 Ket
+ 17 12 Recurse
+ 19 4 Alt
+ 21 \1
+ 23 3 Alt
+ 25 $
+ 26 21 Ket
+ 28 25 Ket
+ 30 3 CBra 3
+ 33 3 Ket
+ 35 35 Ket
+ 37 End
+------------------------------------------------------------------
+
+/(?1)()((((((\1++))\x85)+)|))/
+------------------------------------------------------------------
+ 0 50 Bra
+ 2 4 Recurse
+ 4 3 CBra 1
+ 7 3 Ket
+ 9 39 CBra 2
+ 12 32 CBra 3
+ 15 27 CBra 4
+ 18 22 CBra 5
+ 21 15 CBra 6
+ 24 10 CBra 7
+ 27 5 Once
+ 29 \1+
+ 32 5 Ket
+ 34 10 Ket
+ 36 15 Ket
+ 38 \x{85}
+ 40 22 KetRmax
+ 42 27 Ket
+ 44 2 Alt
+ 46 34 Ket
+ 48 39 Ket
+ 50 50 Ket
+ 52 End
+------------------------------------------------------------------
+
+# Check the absolute limit on nesting (?| etc. This varies with code unit
+# width because the workspace is a different number of bytes. It will fail
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
+/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
+)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+/parens_nest_limit=1000,-fullbincode
+
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+Failed: error 186 at offset 979: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 979: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 79 Bra
+ 2 70 Once
+ 4 6 Cond
+ 6 1 Cond ref
+ 8 74 Recurse
+ 10 6 Ket
+ 12 6 Cond
+ 14 1 Cond ref
+ 16 74 Recurse
+ 18 6 Ket
+ 20 6 Cond
+ 22 1 Cond ref
+ 24 74 Recurse
+ 26 6 Ket
+ 28 6 Cond
+ 30 1 Cond ref
+ 32 74 Recurse
+ 34 6 Ket
+ 36 6 Cond
+ 38 1 Cond ref
+ 40 74 Recurse
+ 42 6 Ket
+ 44 6 Cond
+ 46 1 Cond ref
+ 48 74 Recurse
+ 50 6 Ket
+ 52 6 Cond
+ 54 1 Cond ref
+ 56 74 Recurse
+ 58 6 Ket
+ 60 10 SBraPos
+ 62 6 SCond
+ 64 1 Cond ref
+ 66 74 Recurse
+ 68 6 Ket
+ 70 10 KetRpos
+ 72 70 Ket
+ 74 3 CBra 1
+ 77 3 Ket
+ 79 79 Ket
+ 81 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 43 Bra
+ 2 34 Once
+ 4 4 Cond
+ 6 1 Cond ref
+ 8 8 Alt
+ 10 a
+ 12 38 Recurse
+ 14 b
+ 16 12 Ket
+ 18 16 SBraPos
+ 20 4 SCond
+ 22 1 Cond ref
+ 24 8 Alt
+ 26 a
+ 28 38 Recurse
+ 30 b
+ 32 12 Ket
+ 34 16 KetRpos
+ 36 34 Ket
+ 38 3 CBra 1
+ 41 3 Ket
+ 43 43 Ket
+ 45 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 133 Bra
+ 2 41 CBra 1
+ 5 2 Recurse
+ 7 88 Recurse
+ 9 93 Recurse
+ 11 98 Recurse
+ 13 103 Recurse
+ 15 108 Recurse
+ 17 113 Recurse
+ 19 118 Recurse
+ 21 123 Recurse
+ 23 123 Recurse
+ 25 118 Recurse
+ 27 113 Recurse
+ 29 108 Recurse
+ 31 103 Recurse
+ 33 98 Recurse
+ 35 93 Recurse
+ 37 88 Recurse
+ 39 2 Recurse
+ 41 0 Recurse
+ 43 41 Ket
+ 45 41 SCBra 1
+ 48 2 Recurse
+ 50 88 Recurse
+ 52 93 Recurse
+ 54 98 Recurse
+ 56 103 Recurse
+ 58 108 Recurse
+ 60 113 Recurse
+ 62 118 Recurse
+ 64 123 Recurse
+ 66 123 Recurse
+ 68 118 Recurse
+ 70 113 Recurse
+ 72 108 Recurse
+ 74 103 Recurse
+ 76 98 Recurse
+ 78 93 Recurse
+ 80 88 Recurse
+ 82 2 Recurse
+ 84 0 Recurse
+ 86 41 KetRmax
+ 88 3 CBra 2
+ 91 3 Ket
+ 93 3 CBra 3
+ 96 3 Ket
+ 98 3 CBra 4
+101 3 Ket
+103 3 CBra 5
+106 3 Ket
+108 3 CBra 6
+111 3 Ket
+113 3 CBra 7
+116 3 Ket
+118 3 CBra 8
+121 3 Ket
+123 3 CBra 9
+126 3 Ket
+128 3 CBra 10
+131 3 Ket
+133 133 Ket
+135 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
+# End of testinput8
diff --git a/testdata/testoutput8-8 b/testdata/testoutput8-8-2
index a12cc71..6a9aa0a 100644
--- a/testdata/testoutput8-8
+++ b/testdata/testoutput8-8-2
@@ -1,8 +1,11 @@
-# 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.
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
#pattern fullbincode,memory
@@ -378,7 +381,7 @@ Options: utf
First code unit = 'A'
Last code unit = '.'
Subject length lower bound = 4
-
+
/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
Memory allocation (code space): 19
------------------------------------------------------------------
@@ -842,11 +845,185 @@ Memory allocation (code space): 10
# Check the absolute limit on nesting (?| etc. This varies with code unit
# width because the workspace is a different number of bytes. It will fail
-# in 8-bit and 16-bit but not in 32-bit.
-
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
/parens_nest_limit=1000,-fullbincode
Failed: error 184 at offset 1540: (?| and/or (?J: or (?x: parentheses are too deeply nested
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+Failed: error 186 at offset 637: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+Failed: error 186 at offset 637: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+Failed: error 186 at offset 637: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 637: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 119 Bra
+ 3 105 Once
+ 6 9 Cond
+ 9 1 Cond ref
+ 12 111 Recurse
+ 15 9 Ket
+ 18 9 Cond
+ 21 1 Cond ref
+ 24 111 Recurse
+ 27 9 Ket
+ 30 9 Cond
+ 33 1 Cond ref
+ 36 111 Recurse
+ 39 9 Ket
+ 42 9 Cond
+ 45 1 Cond ref
+ 48 111 Recurse
+ 51 9 Ket
+ 54 9 Cond
+ 57 1 Cond ref
+ 60 111 Recurse
+ 63 9 Ket
+ 66 9 Cond
+ 69 1 Cond ref
+ 72 111 Recurse
+ 75 9 Ket
+ 78 9 Cond
+ 81 1 Cond ref
+ 84 111 Recurse
+ 87 9 Ket
+ 90 15 SBraPos
+ 93 9 SCond
+ 96 1 Cond ref
+ 99 111 Recurse
+102 9 Ket
+105 15 KetRpos
+108 105 Ket
+111 5 CBra 1
+116 5 Ket
+119 119 Ket
+122 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 61 Bra
+ 3 47 Once
+ 6 6 Cond
+ 9 1 Cond ref
+ 12 10 Alt
+ 15 a
+ 17 53 Recurse
+ 20 b
+ 22 16 Ket
+ 25 22 SBraPos
+ 28 6 SCond
+ 31 1 Cond ref
+ 34 10 Alt
+ 37 a
+ 39 53 Recurse
+ 42 b
+ 44 16 Ket
+ 47 22 KetRpos
+ 50 47 Ket
+ 53 5 CBra 1
+ 58 5 Ket
+ 61 61 Ket
+ 64 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 205 Bra
+ 3 62 CBra 1
+ 8 3 Recurse
+ 11 133 Recurse
+ 14 141 Recurse
+ 17 149 Recurse
+ 20 157 Recurse
+ 23 165 Recurse
+ 26 173 Recurse
+ 29 181 Recurse
+ 32 189 Recurse
+ 35 189 Recurse
+ 38 181 Recurse
+ 41 173 Recurse
+ 44 165 Recurse
+ 47 157 Recurse
+ 50 149 Recurse
+ 53 141 Recurse
+ 56 133 Recurse
+ 59 3 Recurse
+ 62 0 Recurse
+ 65 62 Ket
+ 68 62 SCBra 1
+ 73 3 Recurse
+ 76 133 Recurse
+ 79 141 Recurse
+ 82 149 Recurse
+ 85 157 Recurse
+ 88 165 Recurse
+ 91 173 Recurse
+ 94 181 Recurse
+ 97 189 Recurse
+100 189 Recurse
+103 181 Recurse
+106 173 Recurse
+109 165 Recurse
+112 157 Recurse
+115 149 Recurse
+118 141 Recurse
+121 133 Recurse
+124 3 Recurse
+127 0 Recurse
+130 62 KetRmax
+133 5 CBra 2
+138 5 Ket
+141 5 CBra 3
+146 5 Ket
+149 5 CBra 4
+154 5 Ket
+157 5 CBra 5
+162 5 Ket
+165 5 CBra 6
+170 5 Ket
+173 5 CBra 7
+178 5 Ket
+181 5 CBra 8
+186 5 Ket
+189 5 CBra 9
+194 5 Ket
+197 5 CBra 10
+202 5 Ket
+205 205 Ket
+208 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
# End of testinput8
diff --git a/testdata/testoutput8-8-3 b/testdata/testoutput8-8-3
new file mode 100644
index 0000000..2fe1168
--- /dev/null
+++ b/testdata/testoutput8-8-3
@@ -0,0 +1,1027 @@
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
+
+#pattern fullbincode,memory
+
+/((?i)b)/
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 16 Bra
+ 4 8 CBra 1
+ 10 /i b
+ 12 8 Ket
+ 16 16 Ket
+ 20 End
+------------------------------------------------------------------
+
+/(?s)(.*X|^B)/
+Memory allocation (code space): 30
+------------------------------------------------------------------
+ 0 25 Bra
+ 4 10 CBra 1
+ 10 AllAny*
+ 12 X
+ 14 7 Alt
+ 18 ^
+ 19 B
+ 21 17 Ket
+ 25 25 Ket
+ 29 End
+------------------------------------------------------------------
+
+/(?s:.*X|^B)/
+Memory allocation (code space): 28
+------------------------------------------------------------------
+ 0 23 Bra
+ 4 8 Bra
+ 8 AllAny*
+ 10 X
+ 12 7 Alt
+ 16 ^
+ 17 B
+ 19 15 Ket
+ 23 23 Ket
+ 27 End
+------------------------------------------------------------------
+
+/^[[:alnum:]]/
+Memory allocation (code space): 43
+------------------------------------------------------------------
+ 0 38 Bra
+ 4 ^
+ 5 [0-9A-Za-z]
+ 38 38 Ket
+ 42 End
+------------------------------------------------------------------
+
+/#/Ix
+Memory allocation (code space): 9
+------------------------------------------------------------------
+ 0 4 Bra
+ 4 4 Ket
+ 8 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+May match empty string
+Options: extended
+Subject length lower bound = 0
+
+/a#/Ix
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 a
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: extended
+First code unit = 'a'
+Subject length lower bound = 1
+
+/x?+/
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 x?+
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/x++/
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 x++
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/x{1,3}+/
+Memory allocation (code space): 15
+------------------------------------------------------------------
+ 0 10 Bra
+ 4 x
+ 6 x{0,2}+
+ 10 10 Ket
+ 14 End
+------------------------------------------------------------------
+
+/(x)*+/
+Memory allocation (code space): 22
+------------------------------------------------------------------
+ 0 17 Bra
+ 4 Braposzero
+ 5 8 CBraPos 1
+ 11 x
+ 13 8 KetRpos
+ 17 17 Ket
+ 21 End
+------------------------------------------------------------------
+
+/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+Memory allocation (code space): 132
+------------------------------------------------------------------
+ 0 127 Bra
+ 4 ^
+ 5 118 CBra 1
+ 11 8 CBra 2
+ 17 a+
+ 19 8 Ket
+ 23 40 CBra 3
+ 29 [ab]+?
+ 63 40 Ket
+ 67 40 CBra 4
+ 73 [bc]+
+107 40 Ket
+111 8 CBra 5
+117 \w*+
+119 8 Ket
+123 118 Ket
+127 127 Ket
+131 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"
+Memory allocation (code space): 828
+------------------------------------------------------------------
+ 0 823 Bra
+ 4 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
+822 \b
+823 823 Ket
+827 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"
+Memory allocation (code space): 818
+------------------------------------------------------------------
+ 0 813 Bra
+ 4 $<.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
+812 \b
+813 813 Ket
+817 End
+------------------------------------------------------------------
+
+/(a(?1)b)/
+Memory allocation (code space): 27
+------------------------------------------------------------------
+ 0 22 Bra
+ 4 14 CBra 1
+ 10 a
+ 12 4 Recurse
+ 16 b
+ 18 14 Ket
+ 22 22 Ket
+ 26 End
+------------------------------------------------------------------
+
+/(a(?1)+b)/
+Memory allocation (code space): 35
+------------------------------------------------------------------
+ 0 30 Bra
+ 4 22 CBra 1
+ 10 a
+ 12 8 Once
+ 16 4 Recurse
+ 20 8 KetRmax
+ 24 b
+ 26 22 Ket
+ 30 30 Ket
+ 34 End
+------------------------------------------------------------------
+
+/a(?P<name1>b|c)d(?P<longername2>e)/
+Memory allocation (code space): 43
+------------------------------------------------------------------
+ 0 38 Bra
+ 4 a
+ 6 8 CBra 1
+ 12 b
+ 14 6 Alt
+ 18 c
+ 20 14 Ket
+ 24 d
+ 26 8 CBra 2
+ 32 e
+ 34 8 Ket
+ 38 38 Ket
+ 42 End
+------------------------------------------------------------------
+
+/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+Memory allocation (code space): 55
+------------------------------------------------------------------
+ 0 50 Bra
+ 4 30 Bra
+ 8 a
+ 10 20 CBra 1
+ 16 c
+ 18 8 CBra 2
+ 24 d
+ 26 8 Ket
+ 30 20 Ket
+ 34 30 Ket
+ 38 8 CBra 3
+ 44 a
+ 46 8 Ket
+ 50 50 Ket
+ 54 End
+------------------------------------------------------------------
+
+/(?P<a>a)...(?P=a)bbb(?P>a)d/
+Memory allocation (code space): 39
+------------------------------------------------------------------
+ 0 34 Bra
+ 4 8 CBra 1
+ 10 a
+ 12 8 Ket
+ 16 Any
+ 17 Any
+ 18 Any
+ 19 \1
+ 22 bbb
+ 28 4 Recurse
+ 32 d
+ 34 34 Ket
+ 38 End
+------------------------------------------------------------------
+
+/abc(?C255)de(?C)f/
+Memory allocation (code space): 37
+------------------------------------------------------------------
+ 0 32 Bra
+ 4 abc
+ 10 Callout 255 10 1
+ 18 de
+ 22 Callout 0 16 1
+ 30 f
+ 32 32 Ket
+ 36 End
+------------------------------------------------------------------
+
+/abcde/auto_callout
+Memory allocation (code space): 67
+------------------------------------------------------------------
+ 0 62 Bra
+ 4 Callout 255 0 1
+ 12 a
+ 14 Callout 255 1 1
+ 22 b
+ 24 Callout 255 2 1
+ 32 c
+ 34 Callout 255 3 1
+ 42 d
+ 44 Callout 255 4 1
+ 52 e
+ 54 Callout 255 5 0
+ 62 62 Ket
+ 66 End
+------------------------------------------------------------------
+
+/\x{100}/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 \x{100}
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+/\x{1000}/utf
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 8 Bra
+ 4 \x{1000}
+ 8 8 Ket
+ 12 End
+------------------------------------------------------------------
+
+/\x{10000}/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 9 Bra
+ 4 \x{10000}
+ 9 9 Ket
+ 13 End
+------------------------------------------------------------------
+
+/\x{100000}/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 9 Bra
+ 4 \x{100000}
+ 9 9 Ket
+ 13 End
+------------------------------------------------------------------
+
+/\x{10ffff}/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 9 Bra
+ 4 \x{10ffff}
+ 9 9 Ket
+ 13 End
+------------------------------------------------------------------
+
+/\x{110000}/utf
+Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+
+/[\x{ff}]/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 \x{ff}
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[\x{100}]/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 \x{100}
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+/\x80/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 \x{80}
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+/\xff/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 \x{ff}
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+/\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+Memory allocation (code space): 20
+------------------------------------------------------------------
+ 0 15 Bra
+ 4 A\x{2262}\x{391}.
+ 15 15 Ket
+ 19 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = 'A'
+Last code unit = '.'
+Subject length lower bound = 4
+
+/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 16 Bra
+ 4 \x{d55c}\x{ad6d}\x{c5b4}
+ 16 16 Ket
+ 20 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \xed
+Last code unit = \xb4
+Subject length lower bound = 3
+
+/\x{65e5}\x{672c}\x{8a9e}/I,utf
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 16 Bra
+ 4 \x{65e5}\x{672c}\x{8a9e}
+ 16 16 Ket
+ 20 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \xe6
+Last code unit = \x9e
+Subject length lower bound = 3
+
+/[\x{100}]/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 \x{100}
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[Z\x{100}]/utf
+Memory allocation (code space): 50
+------------------------------------------------------------------
+ 0 45 Bra
+ 4 [Z\x{100}]
+ 45 45 Ket
+ 49 End
+------------------------------------------------------------------
+
+/^[\x{100}\E-\Q\E\x{150}]/utf
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 16 Bra
+ 4 ^
+ 5 [\x{100}-\x{150}]
+ 16 16 Ket
+ 20 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E]/utf
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 16 Bra
+ 4 ^
+ 5 [\x{100}-\x{150}]
+ 16 16 Ket
+ 20 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E/utf
+Failed: error 106 at offset 15: missing terminating ] for character class
+
+/[\p{L}]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 13 Bra
+ 4 [\p{L}]
+ 13 13 Ket
+ 17 End
+------------------------------------------------------------------
+
+/[\p{^L}]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 13 Bra
+ 4 [\P{L}]
+ 13 13 Ket
+ 17 End
+------------------------------------------------------------------
+
+/[\P{L}]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 13 Bra
+ 4 [\P{L}]
+ 13 13 Ket
+ 17 End
+------------------------------------------------------------------
+
+/[\P{^L}]/
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 13 Bra
+ 4 [\p{L}]
+ 13 13 Ket
+ 17 End
+------------------------------------------------------------------
+
+/[abc\p{L}\x{0660}]/utf
+Memory allocation (code space): 53
+------------------------------------------------------------------
+ 0 48 Bra
+ 4 [a-c\p{L}\x{660}]
+ 48 48 Ket
+ 52 End
+------------------------------------------------------------------
+
+/[\p{Nd}]/utf
+Memory allocation (code space): 18
+------------------------------------------------------------------
+ 0 13 Bra
+ 4 [\p{Nd}]
+ 13 13 Ket
+ 17 End
+------------------------------------------------------------------
+
+/[\p{Nd}+-]+/utf
+Memory allocation (code space): 51
+------------------------------------------------------------------
+ 0 46 Bra
+ 4 [+\-\p{Nd}]++
+ 46 46 Ket
+ 50 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+Memory allocation (code space): 27
+------------------------------------------------------------------
+ 0 22 Bra
+ 4 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 22 22 Ket
+ 26 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+Memory allocation (code space): 27
+------------------------------------------------------------------
+ 0 22 Bra
+ 4 A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 22 22 Ket
+ 26 End
+------------------------------------------------------------------
+
+/[\x{105}-\x{109}]/i,utf
+Memory allocation (code space): 20
+------------------------------------------------------------------
+ 0 15 Bra
+ 4 [\x{104}-\x{109}]
+ 15 15 Ket
+ 19 End
+------------------------------------------------------------------
+
+/( ( (?(1)0|) )* )/x
+Memory allocation (code space): 47
+------------------------------------------------------------------
+ 0 42 Bra
+ 4 34 CBra 1
+ 10 Brazero
+ 11 23 SCBra 2
+ 17 9 Cond
+ 21 1 Cond ref
+ 24 0
+ 26 4 Alt
+ 30 13 Ket
+ 34 23 KetRmax
+ 38 34 Ket
+ 42 42 Ket
+ 46 End
+------------------------------------------------------------------
+
+/( (?(1)0|)* )/x
+Memory allocation (code space): 37
+------------------------------------------------------------------
+ 0 32 Bra
+ 4 24 CBra 1
+ 10 Brazero
+ 11 9 SCond
+ 15 1 Cond ref
+ 18 0
+ 20 4 Alt
+ 24 13 KetRmax
+ 28 24 Ket
+ 32 32 Ket
+ 36 End
+------------------------------------------------------------------
+
+/[a]/
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 a
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/[a]/utf
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 a
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/[\xaa]/
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 \x{aa}
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/[\xaa]/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 \x{aa}
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+/[^a]/
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 [^a]
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/[^a]/utf
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 [^a]
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/[^\xaa]/
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 6 Bra
+ 4 [^\x{aa}]
+ 6 6 Ket
+ 10 End
+------------------------------------------------------------------
+
+/[^\xaa]/utf
+Memory allocation (code space): 12
+------------------------------------------------------------------
+ 0 7 Bra
+ 4 [^\x{aa}]
+ 7 7 Ket
+ 11 End
+------------------------------------------------------------------
+
+#pattern -memory
+
+/[^\d]/utf,ucp
+------------------------------------------------------------------
+ 0 13 Bra
+ 4 [^\p{Nd}]
+ 13 13 Ket
+ 17 End
+------------------------------------------------------------------
+
+/[[:^alpha:][:^cntrl:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 17 Bra
+ 4 [\P{L}\P{Cc}]++
+ 17 17 Ket
+ 21 End
+------------------------------------------------------------------
+
+/[[:^cntrl:][:^alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 17 Bra
+ 4 [\P{Cc}\P{L}]++
+ 17 17 Ket
+ 21 End
+------------------------------------------------------------------
+
+/[[:alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 14 Bra
+ 4 [\p{L}]++
+ 14 14 Ket
+ 18 End
+------------------------------------------------------------------
+
+/[[:^alpha:]\S]+/utf,ucp
+------------------------------------------------------------------
+ 0 17 Bra
+ 4 [\P{L}\P{Xsp}]++
+ 17 17 Ket
+ 21 End
+------------------------------------------------------------------
+
+/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/
+------------------------------------------------------------------
+ 0 83 Bra
+ 4 abc
+ 10 8 CBra 1
+ 16 d
+ 18 6 Alt
+ 22 e
+ 24 14 Ket
+ 28 *THEN
+ 29 x
+ 31 15 CBra 2
+ 37 123
+ 43 *THEN
+ 44 4
+ 46 33 Alt
+ 50 567
+ 56 8 CBra 3
+ 62 b
+ 64 6 Alt
+ 68 q
+ 70 14 Ket
+ 74 *THEN
+ 75 xx
+ 79 48 Ket
+ 83 83 Ket
+ 87 End
+------------------------------------------------------------------
+
+/(((a\2)|(a*)\g<-1>))*a?/
+------------------------------------------------------------------
+ 0 70 Bra
+ 4 Brazero
+ 5 59 SCBra 1
+ 11 49 Once
+ 15 21 CBra 2
+ 21 11 CBra 3
+ 27 a
+ 29 \2
+ 32 11 Ket
+ 36 20 Alt
+ 40 8 CBra 4
+ 46 a*
+ 48 8 Ket
+ 52 40 Recurse
+ 56 41 Ket
+ 60 49 Ket
+ 64 59 KetRmax
+ 68 a?+
+ 70 70 Ket
+ 74 End
+------------------------------------------------------------------
+
+/((?+1)(\1))/
+------------------------------------------------------------------
+ 0 39 Bra
+ 4 31 Once
+ 8 23 CBra 1
+ 14 18 Recurse
+ 18 9 CBra 2
+ 24 \1
+ 27 9 Ket
+ 31 23 Ket
+ 35 31 Ket
+ 39 39 Ket
+ 43 End
+------------------------------------------------------------------
+
+"(?1)(?#?'){2}(a)"
+------------------------------------------------------------------
+ 0 40 Bra
+ 4 8 Once
+ 8 28 Recurse
+ 12 8 Ket
+ 16 8 Once
+ 20 28 Recurse
+ 24 8 Ket
+ 28 8 CBra 1
+ 34 a
+ 36 8 Ket
+ 40 40 Ket
+ 44 End
+------------------------------------------------------------------
+
+/.((?2)(?R)|\1|$)()/
+------------------------------------------------------------------
+ 0 53 Bra
+ 4 Any
+ 5 34 Once
+ 9 14 CBra 1
+ 15 43 Recurse
+ 19 0 Recurse
+ 23 7 Alt
+ 27 \1
+ 30 5 Alt
+ 34 $
+ 35 26 Ket
+ 39 34 Ket
+ 43 6 CBra 2
+ 49 6 Ket
+ 53 53 Ket
+ 57 End
+------------------------------------------------------------------
+
+/.((?3)(?R)()(?2)|\1|$)()/
+------------------------------------------------------------------
+ 0 67 Bra
+ 4 Any
+ 5 48 Once
+ 9 28 CBra 1
+ 15 57 Recurse
+ 19 0 Recurse
+ 23 6 CBra 2
+ 29 6 Ket
+ 33 23 Recurse
+ 37 7 Alt
+ 41 \1
+ 44 5 Alt
+ 48 $
+ 49 40 Ket
+ 53 48 Ket
+ 57 6 CBra 3
+ 63 6 Ket
+ 67 67 Ket
+ 71 End
+------------------------------------------------------------------
+
+/(?1)()((((((\1++))\x85)+)|))/
+------------------------------------------------------------------
+ 0 96 Bra
+ 4 8 Recurse
+ 8 6 CBra 1
+ 14 6 Ket
+ 18 74 CBra 2
+ 24 60 CBra 3
+ 30 50 CBra 4
+ 36 40 CBra 5
+ 42 28 CBra 6
+ 48 18 CBra 7
+ 54 8 Once
+ 58 \1+
+ 62 8 Ket
+ 66 18 Ket
+ 70 28 Ket
+ 74 \x{85}
+ 76 40 KetRmax
+ 80 50 Ket
+ 84 4 Alt
+ 88 64 Ket
+ 92 74 Ket
+ 96 96 Ket
+100 End
+------------------------------------------------------------------
+
+# Check the absolute limit on nesting (?| etc. This varies with code unit
+# width because the workspace is a different number of bytes. It will fail
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
+/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
+)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+/parens_nest_limit=1000,-fullbincode
+
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+Failed: error 186 at offset 936: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+Failed: error 186 at offset 936: regular expression is too complicated
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 936: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 150 Bra
+ 4 132 Once
+ 8 11 Cond
+ 12 1 Cond ref
+ 15 140 Recurse
+ 19 11 Ket
+ 23 11 Cond
+ 27 1 Cond ref
+ 30 140 Recurse
+ 34 11 Ket
+ 38 11 Cond
+ 42 1 Cond ref
+ 45 140 Recurse
+ 49 11 Ket
+ 53 11 Cond
+ 57 1 Cond ref
+ 60 140 Recurse
+ 64 11 Ket
+ 68 11 Cond
+ 72 1 Cond ref
+ 75 140 Recurse
+ 79 11 Ket
+ 83 11 Cond
+ 87 1 Cond ref
+ 90 140 Recurse
+ 94 11 Ket
+ 98 11 Cond
+102 1 Cond ref
+105 140 Recurse
+109 11 Ket
+113 19 SBraPos
+117 11 SCond
+121 1 Cond ref
+124 140 Recurse
+128 11 Ket
+132 19 KetRpos
+136 132 Ket
+140 6 CBra 1
+146 6 Ket
+150 150 Ket
+154 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 76 Bra
+ 4 58 Once
+ 8 7 Cond
+ 12 1 Cond ref
+ 15 12 Alt
+ 19 a
+ 21 66 Recurse
+ 25 b
+ 27 19 Ket
+ 31 27 SBraPos
+ 35 7 SCond
+ 39 1 Cond ref
+ 42 12 Alt
+ 46 a
+ 48 66 Recurse
+ 52 b
+ 54 19 Ket
+ 58 27 KetRpos
+ 62 58 Ket
+ 66 6 CBra 1
+ 72 6 Ket
+ 76 76 Ket
+ 80 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 266 Bra
+ 4 82 CBra 1
+ 10 4 Recurse
+ 14 176 Recurse
+ 18 186 Recurse
+ 22 196 Recurse
+ 26 206 Recurse
+ 30 216 Recurse
+ 34 226 Recurse
+ 38 236 Recurse
+ 42 246 Recurse
+ 46 246 Recurse
+ 50 236 Recurse
+ 54 226 Recurse
+ 58 216 Recurse
+ 62 206 Recurse
+ 66 196 Recurse
+ 70 186 Recurse
+ 74 176 Recurse
+ 78 4 Recurse
+ 82 0 Recurse
+ 86 82 Ket
+ 90 82 SCBra 1
+ 96 4 Recurse
+100 176 Recurse
+104 186 Recurse
+108 196 Recurse
+112 206 Recurse
+116 216 Recurse
+120 226 Recurse
+124 236 Recurse
+128 246 Recurse
+132 246 Recurse
+136 236 Recurse
+140 226 Recurse
+144 216 Recurse
+148 206 Recurse
+152 196 Recurse
+156 186 Recurse
+160 176 Recurse
+164 4 Recurse
+168 0 Recurse
+172 82 KetRmax
+176 6 CBra 2
+182 6 Ket
+186 6 CBra 3
+192 6 Ket
+196 6 CBra 4
+202 6 Ket
+206 6 CBra 5
+212 6 Ket
+216 6 CBra 6
+222 6 Ket
+226 6 CBra 7
+232 6 Ket
+236 6 CBra 8
+242 6 Ket
+246 6 CBra 9
+252 6 Ket
+256 6 CBra 10
+262 6 Ket
+266 266 Ket
+270 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
+# End of testinput8
diff --git a/testdata/testoutput8-8-4 b/testdata/testoutput8-8-4
new file mode 100644
index 0000000..91993b2
--- /dev/null
+++ b/testdata/testoutput8-8-4
@@ -0,0 +1,1025 @@
+# There are two sorts of patterns in this test. A number of them are
+# representative patterns whose lengths and offsets are checked. This is just a
+# doublecheck test to ensure the sizes don't go horribly wrong when something
+# is changed. The operation of these patterns is checked in other tests.
+#
+# This file also contains tests whose output varies with code unit size and/or
+# link size. Unicode support is required for these tests. There are separate
+# output files for each code unit size and link size.
+
+#pattern fullbincode,memory
+
+/((?i)b)/
+Memory allocation (code space): 25
+------------------------------------------------------------------
+ 0 19 Bra
+ 5 9 CBra 1
+ 12 /i b
+ 14 9 Ket
+ 19 19 Ket
+ 24 End
+------------------------------------------------------------------
+
+/(?s)(.*X|^B)/
+Memory allocation (code space): 35
+------------------------------------------------------------------
+ 0 29 Bra
+ 5 11 CBra 1
+ 12 AllAny*
+ 14 X
+ 16 8 Alt
+ 21 ^
+ 22 B
+ 24 19 Ket
+ 29 29 Ket
+ 34 End
+------------------------------------------------------------------
+
+/(?s:.*X|^B)/
+Memory allocation (code space): 33
+------------------------------------------------------------------
+ 0 27 Bra
+ 5 9 Bra
+ 10 AllAny*
+ 12 X
+ 14 8 Alt
+ 19 ^
+ 20 B
+ 22 17 Ket
+ 27 27 Ket
+ 32 End
+------------------------------------------------------------------
+
+/^[[:alnum:]]/
+Memory allocation (code space): 45
+------------------------------------------------------------------
+ 0 39 Bra
+ 5 ^
+ 6 [0-9A-Za-z]
+ 39 39 Ket
+ 44 End
+------------------------------------------------------------------
+
+/#/Ix
+Memory allocation (code space): 11
+------------------------------------------------------------------
+ 0 5 Bra
+ 5 5 Ket
+ 10 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+May match empty string
+Options: extended
+Subject length lower bound = 0
+
+/a#/Ix
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 a
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: extended
+First code unit = 'a'
+Subject length lower bound = 1
+
+/x?+/
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 x?+
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/x++/
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 x++
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/x{1,3}+/
+Memory allocation (code space): 17
+------------------------------------------------------------------
+ 0 11 Bra
+ 5 x
+ 7 x{0,2}+
+ 11 11 Ket
+ 16 End
+------------------------------------------------------------------
+
+/(x)*+/
+Memory allocation (code space): 26
+------------------------------------------------------------------
+ 0 20 Bra
+ 5 Braposzero
+ 6 9 CBraPos 1
+ 13 x
+ 15 9 KetRpos
+ 20 20 Ket
+ 25 End
+------------------------------------------------------------------
+
+/^((a+)(?U)([ab]+)(?-U)([bc]+)(\w*))/
+Memory allocation (code space): 144
+------------------------------------------------------------------
+ 0 138 Bra
+ 5 ^
+ 6 127 CBra 1
+ 13 9 CBra 2
+ 20 a+
+ 22 9 Ket
+ 27 41 CBra 3
+ 34 [ab]+?
+ 68 41 Ket
+ 73 41 CBra 4
+ 80 [bc]+
+114 41 Ket
+119 9 CBra 5
+126 \w*+
+128 9 Ket
+133 127 Ket
+138 138 Ket
+143 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"
+Memory allocation (code space): 830
+------------------------------------------------------------------
+ 0 824 Bra
+ 5 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
+823 \b
+824 824 Ket
+829 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"
+Memory allocation (code space): 820
+------------------------------------------------------------------
+ 0 814 Bra
+ 5 $<.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
+813 \b
+814 814 Ket
+819 End
+------------------------------------------------------------------
+
+/(a(?1)b)/
+Memory allocation (code space): 32
+------------------------------------------------------------------
+ 0 26 Bra
+ 5 16 CBra 1
+ 12 a
+ 14 5 Recurse
+ 19 b
+ 21 16 Ket
+ 26 26 Ket
+ 31 End
+------------------------------------------------------------------
+
+/(a(?1)+b)/
+Memory allocation (code space): 42
+------------------------------------------------------------------
+ 0 36 Bra
+ 5 26 CBra 1
+ 12 a
+ 14 10 Once
+ 19 5 Recurse
+ 24 10 KetRmax
+ 29 b
+ 31 26 Ket
+ 36 36 Ket
+ 41 End
+------------------------------------------------------------------
+
+/a(?P<name1>b|c)d(?P<longername2>e)/
+Memory allocation (code space): 50
+------------------------------------------------------------------
+ 0 44 Bra
+ 5 a
+ 7 9 CBra 1
+ 14 b
+ 16 7 Alt
+ 21 c
+ 23 16 Ket
+ 28 d
+ 30 9 CBra 2
+ 37 e
+ 39 9 Ket
+ 44 44 Ket
+ 49 End
+------------------------------------------------------------------
+
+/(?:a(?P<c>c(?P<d>d)))(?P<a>a)/
+Memory allocation (code space): 65
+------------------------------------------------------------------
+ 0 59 Bra
+ 5 35 Bra
+ 10 a
+ 12 23 CBra 1
+ 19 c
+ 21 9 CBra 2
+ 28 d
+ 30 9 Ket
+ 35 23 Ket
+ 40 35 Ket
+ 45 9 CBra 3
+ 52 a
+ 54 9 Ket
+ 59 59 Ket
+ 64 End
+------------------------------------------------------------------
+
+/(?P<a>a)...(?P=a)bbb(?P>a)d/
+Memory allocation (code space): 44
+------------------------------------------------------------------
+ 0 38 Bra
+ 5 9 CBra 1
+ 12 a
+ 14 9 Ket
+ 19 Any
+ 20 Any
+ 21 Any
+ 22 \1
+ 25 bbb
+ 31 5 Recurse
+ 36 d
+ 38 38 Ket
+ 43 End
+------------------------------------------------------------------
+
+/abc(?C255)de(?C)f/
+Memory allocation (code space): 43
+------------------------------------------------------------------
+ 0 37 Bra
+ 5 abc
+ 11 Callout 255 10 1
+ 21 de
+ 25 Callout 0 16 1
+ 35 f
+ 37 37 Ket
+ 42 End
+------------------------------------------------------------------
+
+/abcde/auto_callout
+Memory allocation (code space): 81
+------------------------------------------------------------------
+ 0 75 Bra
+ 5 Callout 255 0 1
+ 15 a
+ 17 Callout 255 1 1
+ 27 b
+ 29 Callout 255 2 1
+ 39 c
+ 41 Callout 255 3 1
+ 51 d
+ 53 Callout 255 4 1
+ 63 e
+ 65 Callout 255 5 0
+ 75 75 Ket
+ 80 End
+------------------------------------------------------------------
+
+/\x{100}/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 \x{100}
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+/\x{1000}/utf
+Memory allocation (code space): 15
+------------------------------------------------------------------
+ 0 9 Bra
+ 5 \x{1000}
+ 9 9 Ket
+ 14 End
+------------------------------------------------------------------
+
+/\x{10000}/utf
+Memory allocation (code space): 16
+------------------------------------------------------------------
+ 0 10 Bra
+ 5 \x{10000}
+ 10 10 Ket
+ 15 End
+------------------------------------------------------------------
+
+/\x{100000}/utf
+Memory allocation (code space): 16
+------------------------------------------------------------------
+ 0 10 Bra
+ 5 \x{100000}
+ 10 10 Ket
+ 15 End
+------------------------------------------------------------------
+
+/\x{10ffff}/utf
+Memory allocation (code space): 16
+------------------------------------------------------------------
+ 0 10 Bra
+ 5 \x{10ffff}
+ 10 10 Ket
+ 15 End
+------------------------------------------------------------------
+
+/\x{110000}/utf
+Failed: error 134 at offset 9: character code point value in \x{} or \o{} is too large
+
+/[\x{ff}]/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 \x{ff}
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+/[\x{100}]/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 \x{100}
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+/\x80/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 \x{80}
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+/\xff/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 \x{ff}
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+/\x{0041}\x{2262}\x{0391}\x{002e}/I,utf
+Memory allocation (code space): 22
+------------------------------------------------------------------
+ 0 16 Bra
+ 5 A\x{2262}\x{391}.
+ 16 16 Ket
+ 21 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = 'A'
+Last code unit = '.'
+Subject length lower bound = 4
+
+/\x{D55c}\x{ad6d}\x{C5B4}/I,utf
+Memory allocation (code space): 23
+------------------------------------------------------------------
+ 0 17 Bra
+ 5 \x{d55c}\x{ad6d}\x{c5b4}
+ 17 17 Ket
+ 22 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \xed
+Last code unit = \xb4
+Subject length lower bound = 3
+
+/\x{65e5}\x{672c}\x{8a9e}/I,utf
+Memory allocation (code space): 23
+------------------------------------------------------------------
+ 0 17 Bra
+ 5 \x{65e5}\x{672c}\x{8a9e}
+ 17 17 Ket
+ 22 End
+------------------------------------------------------------------
+Capturing subpattern count = 0
+Options: utf
+First code unit = \xe6
+Last code unit = \x9e
+Subject length lower bound = 3
+
+/[\x{100}]/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 \x{100}
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+/[Z\x{100}]/utf
+Memory allocation (code space): 53
+------------------------------------------------------------------
+ 0 47 Bra
+ 5 [Z\x{100}]
+ 47 47 Ket
+ 52 End
+------------------------------------------------------------------
+
+/^[\x{100}\E-\Q\E\x{150}]/utf
+Memory allocation (code space): 24
+------------------------------------------------------------------
+ 0 18 Bra
+ 5 ^
+ 6 [\x{100}-\x{150}]
+ 18 18 Ket
+ 23 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E]/utf
+Memory allocation (code space): 24
+------------------------------------------------------------------
+ 0 18 Bra
+ 5 ^
+ 6 [\x{100}-\x{150}]
+ 18 18 Ket
+ 23 End
+------------------------------------------------------------------
+
+/^[\QĀ\E-\QŐ\E/utf
+Failed: error 106 at offset 15: missing terminating ] for character class
+
+/[\p{L}]/
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 15 Bra
+ 5 [\p{L}]
+ 15 15 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[\p{^L}]/
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 15 Bra
+ 5 [\P{L}]
+ 15 15 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[\P{L}]/
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 15 Bra
+ 5 [\P{L}]
+ 15 15 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[\P{^L}]/
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 15 Bra
+ 5 [\p{L}]
+ 15 15 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[abc\p{L}\x{0660}]/utf
+Memory allocation (code space): 56
+------------------------------------------------------------------
+ 0 50 Bra
+ 5 [a-c\p{L}\x{660}]
+ 50 50 Ket
+ 55 End
+------------------------------------------------------------------
+
+/[\p{Nd}]/utf
+Memory allocation (code space): 21
+------------------------------------------------------------------
+ 0 15 Bra
+ 5 [\p{Nd}]
+ 15 15 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[\p{Nd}+-]+/utf
+Memory allocation (code space): 54
+------------------------------------------------------------------
+ 0 48 Bra
+ 5 [+\-\p{Nd}]++
+ 48 48 Ket
+ 53 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/i,utf
+Memory allocation (code space): 29
+------------------------------------------------------------------
+ 0 23 Bra
+ 5 /i A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 23 23 Ket
+ 28 End
+------------------------------------------------------------------
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/utf
+Memory allocation (code space): 29
+------------------------------------------------------------------
+ 0 23 Bra
+ 5 A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 23 23 Ket
+ 28 End
+------------------------------------------------------------------
+
+/[\x{105}-\x{109}]/i,utf
+Memory allocation (code space): 23
+------------------------------------------------------------------
+ 0 17 Bra
+ 5 [\x{104}-\x{109}]
+ 17 17 Ket
+ 22 End
+------------------------------------------------------------------
+
+/( ( (?(1)0|) )* )/x
+Memory allocation (code space): 56
+------------------------------------------------------------------
+ 0 50 Bra
+ 5 40 CBra 1
+ 12 Brazero
+ 13 27 SCBra 2
+ 20 10 Cond
+ 25 1 Cond ref
+ 28 0
+ 30 5 Alt
+ 35 15 Ket
+ 40 27 KetRmax
+ 45 40 Ket
+ 50 50 Ket
+ 55 End
+------------------------------------------------------------------
+
+/( (?(1)0|)* )/x
+Memory allocation (code space): 44
+------------------------------------------------------------------
+ 0 38 Bra
+ 5 28 CBra 1
+ 12 Brazero
+ 13 10 SCond
+ 18 1 Cond ref
+ 21 0
+ 23 5 Alt
+ 28 15 KetRmax
+ 33 28 Ket
+ 38 38 Ket
+ 43 End
+------------------------------------------------------------------
+
+/[a]/
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 a
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[a]/utf
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 a
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[\xaa]/
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 \x{aa}
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[\xaa]/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 \x{aa}
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+/[^a]/
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 [^a]
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[^a]/utf
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 [^a]
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[^\xaa]/
+Memory allocation (code space): 13
+------------------------------------------------------------------
+ 0 7 Bra
+ 5 [^\x{aa}]
+ 7 7 Ket
+ 12 End
+------------------------------------------------------------------
+
+/[^\xaa]/utf
+Memory allocation (code space): 14
+------------------------------------------------------------------
+ 0 8 Bra
+ 5 [^\x{aa}]
+ 8 8 Ket
+ 13 End
+------------------------------------------------------------------
+
+#pattern -memory
+
+/[^\d]/utf,ucp
+------------------------------------------------------------------
+ 0 15 Bra
+ 5 [^\p{Nd}]
+ 15 15 Ket
+ 20 End
+------------------------------------------------------------------
+
+/[[:^alpha:][:^cntrl:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 19 Bra
+ 5 [\P{L}\P{Cc}]++
+ 19 19 Ket
+ 24 End
+------------------------------------------------------------------
+
+/[[:^cntrl:][:^alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 19 Bra
+ 5 [\P{Cc}\P{L}]++
+ 19 19 Ket
+ 24 End
+------------------------------------------------------------------
+
+/[[:alpha:]]+/utf,ucp
+------------------------------------------------------------------
+ 0 16 Bra
+ 5 [\p{L}]++
+ 16 16 Ket
+ 21 End
+------------------------------------------------------------------
+
+/[[:^alpha:]\S]+/utf,ucp
+------------------------------------------------------------------
+ 0 19 Bra
+ 5 [\P{L}\P{Xsp}]++
+ 19 19 Ket
+ 24 End
+------------------------------------------------------------------
+
+/abc(d|e)(*THEN)x(123(*THEN)4|567(b|q)(*THEN)xx)/
+------------------------------------------------------------------
+ 0 93 Bra
+ 5 abc
+ 11 9 CBra 1
+ 18 d
+ 20 7 Alt
+ 25 e
+ 27 16 Ket
+ 32 *THEN
+ 33 x
+ 35 16 CBra 2
+ 42 123
+ 48 *THEN
+ 49 4
+ 51 37 Alt
+ 56 567
+ 62 9 CBra 3
+ 69 b
+ 71 7 Alt
+ 76 q
+ 78 16 Ket
+ 83 *THEN
+ 84 xx
+ 88 53 Ket
+ 93 93 Ket
+ 98 End
+------------------------------------------------------------------
+
+/(((a\2)|(a*)\g<-1>))*a?/
+------------------------------------------------------------------
+ 0 83 Bra
+ 5 Brazero
+ 6 70 SCBra 1
+ 13 58 Once
+ 18 24 CBra 2
+ 25 12 CBra 3
+ 32 a
+ 34 \2
+ 37 12 Ket
+ 42 24 Alt
+ 47 9 CBra 4
+ 54 a*
+ 56 9 Ket
+ 61 47 Recurse
+ 66 48 Ket
+ 71 58 Ket
+ 76 70 KetRmax
+ 81 a?+
+ 83 83 Ket
+ 88 End
+------------------------------------------------------------------
+
+/((?+1)(\1))/
+------------------------------------------------------------------
+ 0 47 Bra
+ 5 37 Once
+ 10 27 CBra 1
+ 17 22 Recurse
+ 22 10 CBra 2
+ 29 \1
+ 32 10 Ket
+ 37 27 Ket
+ 42 37 Ket
+ 47 47 Ket
+ 52 End
+------------------------------------------------------------------
+
+"(?1)(?#?'){2}(a)"
+------------------------------------------------------------------
+ 0 49 Bra
+ 5 10 Once
+ 10 35 Recurse
+ 15 10 Ket
+ 20 10 Once
+ 25 35 Recurse
+ 30 10 Ket
+ 35 9 CBra 1
+ 42 a
+ 44 9 Ket
+ 49 49 Ket
+ 54 End
+------------------------------------------------------------------
+
+/.((?2)(?R)|\1|$)()/
+------------------------------------------------------------------
+ 0 64 Bra
+ 5 Any
+ 6 41 Once
+ 11 17 CBra 1
+ 18 52 Recurse
+ 23 0 Recurse
+ 28 8 Alt
+ 33 \1
+ 36 6 Alt
+ 41 $
+ 42 31 Ket
+ 47 41 Ket
+ 52 7 CBra 2
+ 59 7 Ket
+ 64 64 Ket
+ 69 End
+------------------------------------------------------------------
+
+/.((?3)(?R)()(?2)|\1|$)()/
+------------------------------------------------------------------
+ 0 81 Bra
+ 5 Any
+ 6 58 Once
+ 11 34 CBra 1
+ 18 69 Recurse
+ 23 0 Recurse
+ 28 7 CBra 2
+ 35 7 Ket
+ 40 28 Recurse
+ 45 8 Alt
+ 50 \1
+ 53 6 Alt
+ 58 $
+ 59 48 Ket
+ 64 58 Ket
+ 69 7 CBra 3
+ 76 7 Ket
+ 81 81 Ket
+ 86 End
+------------------------------------------------------------------
+
+/(?1)()((((((\1++))\x85)+)|))/
+------------------------------------------------------------------
+ 0 115 Bra
+ 5 10 Recurse
+ 10 7 CBra 1
+ 17 7 Ket
+ 22 88 CBra 2
+ 29 71 CBra 3
+ 36 59 CBra 4
+ 43 47 CBra 5
+ 50 33 CBra 6
+ 57 21 CBra 7
+ 64 9 Once
+ 69 \1+
+ 73 9 Ket
+ 78 21 Ket
+ 83 33 Ket
+ 88 \x{85}
+ 90 47 KetRmax
+ 95 59 Ket
+100 5 Alt
+105 76 Ket
+110 88 Ket
+115 115 Ket
+120 End
+------------------------------------------------------------------
+
+# Check the absolute limit on nesting (?| etc. This varies with code unit
+# width because the workspace is a different number of bytes. It will fail
+# with link size 2 in 8-bit and 16-bit but not in 32-bit.
+
+/(?|(?|(?J:(?|(?x:(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|(?|
+)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
+/parens_nest_limit=1000,-fullbincode
+
+# Use "expand" to create some very long patterns with nested parentheses, in
+# order to test workspace overflow. Again, this varies with code unit width,
+# and even with it fails in two modes, the error offset differs. It also varies
+# with link size - hence multiple tests with different values.
+
+/(?'ABC'\[[bar](]{105}*THEN:\[A]{255}\[)]{106}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{106}*THEN:\[A]{255}\[)]{107}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{159}*THEN:\[A]{255}\[)]{160}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{199}*THEN:\[A]{255}\[)]{200}/expand,-fullbincode
+
+/(?'ABC'\[[bar](]{299}*THEN:\[A]{255}\[)]{300}/expand,-fullbincode
+Failed: error 186 at offset 1224: regular expression is too complicated
+
+/(?(1)(?1)){8,}+()/debug
+------------------------------------------------------------------
+ 0 181 Bra
+ 5 159 Once
+ 10 13 Cond
+ 15 1 Cond ref
+ 18 169 Recurse
+ 23 13 Ket
+ 28 13 Cond
+ 33 1 Cond ref
+ 36 169 Recurse
+ 41 13 Ket
+ 46 13 Cond
+ 51 1 Cond ref
+ 54 169 Recurse
+ 59 13 Ket
+ 64 13 Cond
+ 69 1 Cond ref
+ 72 169 Recurse
+ 77 13 Ket
+ 82 13 Cond
+ 87 1 Cond ref
+ 90 169 Recurse
+ 95 13 Ket
+100 13 Cond
+105 1 Cond ref
+108 169 Recurse
+113 13 Ket
+118 13 Cond
+123 1 Cond ref
+126 169 Recurse
+131 13 Ket
+136 23 SBraPos
+141 13 SCond
+146 1 Cond ref
+149 169 Recurse
+154 13 Ket
+159 23 KetRpos
+164 159 Ket
+169 7 CBra 1
+176 7 Ket
+181 181 Ket
+186 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcd
+ 0:
+ 1:
+
+/(?(1)|a(?1)b){2,}+()/debug
+------------------------------------------------------------------
+ 0 91 Bra
+ 5 69 Once
+ 10 8 Cond
+ 15 1 Cond ref
+ 18 14 Alt
+ 23 a
+ 25 79 Recurse
+ 30 b
+ 32 22 Ket
+ 37 32 SBraPos
+ 42 8 SCond
+ 47 1 Cond ref
+ 50 14 Alt
+ 55 a
+ 57 79 Recurse
+ 62 b
+ 64 22 Ket
+ 69 32 KetRpos
+ 74 69 Ket
+ 79 7 CBra 1
+ 86 7 Ket
+ 91 91 Ket
+ 96 End
+------------------------------------------------------------------
+Capturing subpattern count = 1
+Max back reference = 1
+May match empty string
+Subject length lower bound = 0
+ abcde
+No match
+
+/((?1)(?2)(?3)(?4)(?5)(?6)(?7)(?8)(?9)(?9)(?8)(?7)(?6)(?5)(?4)(?3)(?2)(?1)(?0)){2,}()()()()()()()()()/debug
+------------------------------------------------------------------
+ 0 327 Bra
+ 5 102 CBra 1
+ 12 5 Recurse
+ 17 219 Recurse
+ 22 231 Recurse
+ 27 243 Recurse
+ 32 255 Recurse
+ 37 267 Recurse
+ 42 279 Recurse
+ 47 291 Recurse
+ 52 303 Recurse
+ 57 303 Recurse
+ 62 291 Recurse
+ 67 279 Recurse
+ 72 267 Recurse
+ 77 255 Recurse
+ 82 243 Recurse
+ 87 231 Recurse
+ 92 219 Recurse
+ 97 5 Recurse
+102 0 Recurse
+107 102 Ket
+112 102 SCBra 1
+119 5 Recurse
+124 219 Recurse
+129 231 Recurse
+134 243 Recurse
+139 255 Recurse
+144 267 Recurse
+149 279 Recurse
+154 291 Recurse
+159 303 Recurse
+164 303 Recurse
+169 291 Recurse
+174 279 Recurse
+179 267 Recurse
+184 255 Recurse
+189 243 Recurse
+194 231 Recurse
+199 219 Recurse
+204 5 Recurse
+209 0 Recurse
+214 102 KetRmax
+219 7 CBra 2
+226 7 Ket
+231 7 CBra 3
+238 7 Ket
+243 7 CBra 4
+250 7 Ket
+255 7 CBra 5
+262 7 Ket
+267 7 CBra 6
+274 7 Ket
+279 7 CBra 7
+286 7 Ket
+291 7 CBra 8
+298 7 Ket
+303 7 CBra 9
+310 7 Ket
+315 7 CBra 10
+322 7 Ket
+327 327 Ket
+332 End
+------------------------------------------------------------------
+Capturing subpattern count = 10
+May match empty string
+Subject length lower bound = 0
+
+# End of testinput8
diff --git a/testdata/testoutput9 b/testdata/testoutput9
index 3aa2071..750a7e0 100644
--- a/testdata/testoutput9
+++ b/testdata/testoutput9
@@ -2,14 +2,10 @@
# UTF-8 or Unicode property support. */
#forbid_utf
+#newline_default lf any anycrlf
-/a\Cb/
- aXb
- 0: aXb
- a\nb
- 0: a\x0ab
- ** Failers (too big char)
-No match
+/ab/
+\= Expect error message (too big char) and 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.
@@ -317,11 +313,20 @@ Failed: error 151 at offset 3: octal value is greater than \377 in 8-bit non-UTF
Failed: error 176 at offset 259: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)
XX
+/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF)XX/mark,alt_verbnames
+Failed: error 176 at offset 258: name is too long in (*MARK), (*PRUNE), (*SKIP), or (*THEN)
+ XX
+
/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark
XX
0: XX
MK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE
+/(*:0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE)XX/mark,alt_verbnames
+ XX
+ 0: XX
+MK: 0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDE
+
/\u0100/alt_bsux,allow_empty_class,match_unset_backref,dupnames
Failed: error 177 at offset 5: character code point value in \u.... sequence is too large
@@ -356,4 +361,7 @@ Failed: error 177 at offset 6: character code point value in \u.... sequence is
End
------------------------------------------------------------------
+/(*MARK:a\x{100}b)z/alt_verbnames
+Failed: error 134 at offset 14: character code point value in \x{} or \o{} is too large
+
# End of testinput9
diff --git a/testdata/valgrind-jit.supp b/testdata/valgrind-jit.supp
new file mode 100644
index 0000000..73e87d2
--- /dev/null
+++ b/testdata/valgrind-jit.supp
@@ -0,0 +1,7 @@
+{
+ name
+ Memcheck:Addr16
+ obj:*
+ obj:*
+ obj:*
+}