diff options
author | Matthew Vernon <matthew@debian.org> | 2016-02-27 15:00:32 +0000 |
---|---|---|
committer | Matthew Vernon <matthew@debian.org> | 2016-02-27 15:00:32 +0000 |
commit | 5fc77543f854bbe609407e8f2d54d906faad2883 (patch) | |
tree | 1c6a1c13657d2b80357ea2dadd7d8b3ee5c4e493 /testdata | |
parent | c27ff5607e8146d7dcacf9ab7c25a931f14e1fbd (diff) |
Imported Upstream version 10.21
Diffstat (limited to 'testdata')
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:* +} |