Changes to pcre2test single-letter modifiers.

This commit is contained in:
Philip.Hazel 2014-08-03 18:15:32 +00:00
parent 8792477279
commit e2076960d4
10 changed files with 1454 additions and 1459 deletions

View File

@ -1,4 +1,4 @@
.TH PCRE2TEST 1 "22 July 2014" "PCRE 10.00" .TH PCRE2TEST 1 "03 August 2014" "PCRE 10.00"
.SH NAME .SH NAME
pcre2test - a program for testing Perl-compatible regular expressions. pcre2test - a program for testing Perl-compatible regular expressions.
.SH SYNOPSIS .SH SYNOPSIS
@ -270,12 +270,12 @@ them must be followed by an equals sign and a value, for example, "offset=12".
Modifiers that do not take values may be preceded by a minus sign to turn off a Modifiers that do not take values may be preceded by a minus sign to turn off a
previous default setting. previous default setting.
.P .P
A few of the more common modifiers can also be specified as single or double A few of the more common modifiers can also be specified as single letters, for
letters, for example "i" for "caseless". In documentation, following the Perl example "i" for "caseless". In documentation, following the Perl convention,
convention, these are written with a slash ("the /i modifier") for clarity. these are written with a slash ("the /i modifier") for clarity. Abbreviated
Abbreviated modifiers must all be concatenated in the first item of a modifier modifiers must all be concatenated in the first item of a modifier list. If the
list. If the first item is not recognized as a long modifier name, it is first item is not recognized as a long modifier name, it is interpreted as a
interpreted as a sequence of these abbreviations. For example: sequence of these abbreviations. For example:
.sp .sp
/abc/ig,newline=cr,jit=3 /abc/ig,newline=cr,jit=3
.sp .sp
@ -433,9 +433,9 @@ about the pattern:
.sp .sp
bsr=[anycrlf|unicode] specify \eR handling bsr=[anycrlf|unicode] specify \eR handling
/B bincode show binary code without lengths /B bincode show binary code without lengths
/D debug same as /DBB /D debug same as info,fullbincode
flipbytes flip endianness flipbytes flip endianness
/BB fullbincode show binary code with lengths fullbincode show binary code with lengths
/I info show info about compiled pattern /I info show info about compiled pattern
hex pattern is coded in hexadecimal hex pattern is coded in hexadecimal
jit[=<number>] use JIT jit[=<number>] use JIT
@ -652,7 +652,6 @@ not affect the compilation process.
aftertext show text after match aftertext show text after match
allaftertext show text after captures allaftertext show text after captures
allcaptures show all captures allcaptures show all captures
/gg altglobal alternative global matching
/g global global matching /g global global matching
jitverify verify JIT usage jitverify verify JIT usage
mark show mark values mark show mark values
@ -687,15 +686,19 @@ for a description of their effects.
notempty set PCRE2_NOTEMPTY notempty set PCRE2_NOTEMPTY
notempty_atstart set PCRE2_NOTEMPTY_ATSTART notempty_atstart set PCRE2_NOTEMPTY_ATSTART
noteol set PCRE2_NOTEOL noteol set PCRE2_NOTEOL
/PP partial_hard set PCRE2_PARTIAL_HARD partial_hard (or ph) set PCRE2_PARTIAL_HARD
/P partial_soft set PCRE2_PARTIAL_SOFT partial_soft (or ps) set PCRE2_PARTIAL_SOFT
.sp .sp
The partial matching modifiers are provided with abbreviations because they
appear frequently in tests.
.P
If the \fB/posix\fP modifier was present on the pattern, causing the POSIX If the \fB/posix\fP modifier was present on the pattern, causing the POSIX
wrapper API to be used, the only option-setting modifiers that have any effect wrapper API to be used, the only option-setting modifiers that have any effect
are \fBnotbol\fP, \fBnotempty\fP, and \fBnoteol\fP, causing REG_NOTBOL, are \fBnotbol\fP, \fBnotempty\fP, and \fBnoteol\fP, causing REG_NOTBOL,
REG_NOTEMPTY, and REG_NOTEOL, respectively, to be passed to \fBregexec()\fP. REG_NOTEMPTY, and REG_NOTEOL, respectively, to be passed to \fBregexec()\fP.
Any other modifiers cause an error. Any other modifiers cause an error.
. .
.
.SS "Setting match controls" .SS "Setting match controls"
.rs .rs
.sp .sp
@ -707,7 +710,7 @@ pattern.
aftertext show text after match aftertext show text after match
allaftertext show text after captures allaftertext show text after captures
allcaptures show all captures allcaptures show all captures
/gg altglobal alternative global matching altglobal alternative global matching
bsr=[anycrlf|unicode] specify \eR handling bsr=[anycrlf|unicode] specify \eR handling
callout_capture show captures at callout time callout_capture show captures at callout time
callout_data=<n> set a value to pass via callouts callout_data=<n> set a value to pass via callouts
@ -1229,6 +1232,6 @@ Cambridge CB2 3QH, England.
.rs .rs
.sp .sp
.nf .nf
Last updated: 22 July 2014 Last updated: 03 August 2014
Copyright (c) 1997-2014 University of Cambridge. Copyright (c) 1997-2014 University of Cambridge.
.fi .fi

View File

@ -470,7 +470,9 @@ static modstruct modlist[] = {
{ "parens_nest_limit", MOD_CTC, MOD_INT, 0, CO(parens_nest_limit) }, { "parens_nest_limit", MOD_CTC, MOD_INT, 0, CO(parens_nest_limit) },
{ "partial_hard", MOD_DAT, MOD_OPT, PCRE2_PARTIAL_HARD, DO(options) }, { "partial_hard", MOD_DAT, MOD_OPT, PCRE2_PARTIAL_HARD, DO(options) },
{ "partial_soft", MOD_DAT, MOD_OPT, PCRE2_PARTIAL_SOFT, DO(options) }, { "partial_soft", MOD_DAT, MOD_OPT, PCRE2_PARTIAL_SOFT, DO(options) },
{ "ph", MOD_DAT, MOD_OPT, PCRE2_PARTIAL_HARD, DO(options) },
{ "posix", MOD_PAT, MOD_CTL, CTL_POSIX, PO(control) }, { "posix", MOD_PAT, MOD_CTL, CTL_POSIX, PO(control) },
{ "ps", MOD_DAT, MOD_OPT, PCRE2_PARTIAL_SOFT, DO(options) },
{ "recursion_limit", MOD_CTM, MOD_INT, 0, MO(recursion_limit) }, { "recursion_limit", MOD_CTM, MOD_INT, 0, MO(recursion_limit) },
{ "save", MOD_PAT, MOD_STR, 0, PO(save) }, { "save", MOD_PAT, MOD_STR, 0, PO(save) },
{ "stackguard", MOD_PAT, MOD_INT, 0, PO(stackguard_test) }, { "stackguard", MOD_PAT, MOD_INT, 0, PO(stackguard_test) },
@ -497,11 +499,11 @@ static modstruct modlist[] = {
#define POSIX_SUPPORTED_MATCH_CONTROLS ( 0 ) #define POSIX_SUPPORTED_MATCH_CONTROLS ( 0 )
/* Table of single-character and doubled-character abbreviated modifiers. The /* Table of single-character abbreviated modifiers. The index field is
index field is initialized to -1, but the first time the modifier is initialized to -1, but the first time the modifier is encountered, it is filled
encountered, it is filled in with the index of the full entry in modlist, to in with the index of the full entry in modlist, to save repeated searching when
save repeated searching when processing multiple test items. This short list is processing multiple test items. This short list is searched serially, so its
searched serially, so its order does not matter. */ order does not matter. */
typedef struct c1modstruct { typedef struct c1modstruct {
const char *fullname; const char *fullname;
@ -511,13 +513,9 @@ typedef struct c1modstruct {
static c1modstruct c1modlist[] = { static c1modstruct c1modlist[] = {
{ "bincode", 'B', -1 }, { "bincode", 'B', -1 },
{ "fullbincode", ('B'<<8)|'B', -1 },
{ "debug", 'D', -1 }, { "debug", 'D', -1 },
{ "info", 'I', -1 }, { "info", 'I', -1 },
{ "partial_soft", 'P', -1 },
{ "partial_hard", ('P'<<8)|'P', -1 },
{ "global", 'g', -1 }, { "global", 'g', -1 },
{ "altglobal", ('g'<<8)|'g', -1 },
{ "caseless", 'i', -1 }, { "caseless", 'i', -1 },
{ "multiline", 'm', -1 }, { "multiline", 'm', -1 },
{ "dotall", 's', -1 }, { "dotall", 's', -1 },
@ -2577,12 +2575,6 @@ for (;;)
for (cc = *p; cc != ',' && cc != '\n' && cc != 0; cc = *(++p)) for (cc = *p; cc != ',' && cc != '\n' && cc != 0; cc = *(++p))
{ {
if (p[1] == cc) /* Handle doubled characters */
{
cc = (cc << 8) | cc;
p++;
}
for (i = 0; i < C1MODLISTCOUNT; i++) for (i = 0; i < C1MODLISTCOUNT; i++)
if (cc == c1modlist[i].onechar) break; if (cc == c1modlist[i].onechar) break;

528
testdata/testinput2 vendored
View File

@ -1316,35 +1316,35 @@
Xbcd12345 Xbcd12345
/abcde/I /abcde/I
ab\=P ab\=ps
abc\=P abc\=ps
abcd\=P abcd\=ps
abcde\=P abcde\=ps
the quick brown abc\=P the quick brown abc\=ps
** Failers\=P ** Failers\=ps
the quick brown abxyz fox\=P the quick brown abxyz fox\=ps
"^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\d\d$"I "^(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[012])/(20)?\d\d$"I
13/05/04\=P 13/05/04\=ps
13/5/2004\=P 13/5/2004\=ps
02/05/09\=P 02/05/09\=ps
1\=P 1\=ps
1/2\=P 1/2\=ps
1/2/0\=P 1/2/0\=ps
1/2/04\=P 1/2/04\=ps
0\=P 0\=ps
02/\=P 02/\=ps
02/0\=P 02/0\=ps
02/1\=P 02/1\=ps
** Failers\=P ** Failers\=ps
\=P \=ps
123\=P 123\=ps
33/4/04\=P 33/4/04\=ps
3/13/04\=P 3/13/04\=ps
0/1/2003\=P 0/1/2003\=ps
0/\=P 0/\=ps
02/0/\=P 02/0/\=ps
02/13\=P 02/13\=ps
/0{0,2}ABC/I /0{0,2}ABC/I
@ -1355,24 +1355,24 @@
/[abc]+DE/I /[abc]+DE/I
/[abc]?123/I /[abc]?123/I
123\=P 123\=ps
a\=P a\=ps
b\=P b\=ps
c\=P c\=ps
c12\=P c12\=ps
c123\=P c123\=ps
/^(?:\d){3,5}X/I /^(?:\d){3,5}X/I
1\=P 1\=ps
123\=P 123\=ps
123X 123X
1234\=P 1234\=ps
1234X 1234X
12345\=P 12345\=ps
12345X 12345X
*** Failers *** Failers
1X 1X
123456\=P 123456\=ps
"<(\w+)/?>(.)*</(\1)>"Igms "<(\w+)/?>(.)*</(\1)>"Igms
<!DOCTYPE seite SYSTEM "http://www.lco.lineas.de/xmlCms.dtd">\n<seite>\n<dokumenteninformation>\n<seitentitel>Partner der LCO</seitentitel>\n<sprache>de</sprache>\n<seitenbeschreibung>Partner der LINEAS Consulting\nGmbH</seitenbeschreibung>\n<schluesselworte>LINEAS Consulting GmbH Hamburg\nPartnerfirmen</schluesselworte>\n<revisit>30 days</revisit>\n<robots>index,follow</robots>\n<menueinformation>\n<aktiv>ja</aktiv>\n<menueposition>3</menueposition>\n<menuetext>Partner</menuetext>\n</menueinformation>\n<lastedited>\n<autor>LCO</autor>\n<firma>LINEAS Consulting</firma>\n<datum>15.10.2003</datum>\n</lastedited>\n</dokumenteninformation>\n<inhalt>\n\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\nGmbH</absatzueberschrift>\n\n<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\n<bild name="logo_ca.gif" rahmen="no"/></link> <link\nziel="http://www.ey.com/" zielfenster="_blank"><bild\nname="logo_euy.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\n<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\n\n<absatz><link ziel="http://www.atelion.de/"\nzielfenster="_blank"><bild\nname="logo_atelion.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.line-information.de/"\nzielfenster="_blank">\n<bild name="logo_line_information.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\n\n<absatz><link ziel="http://www.incognis.de/"\nzielfenster="_blank"><bild\nname="logo_incognis.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.addcraft.com/"\nzielfenster="_blank"><bild\nname="logo_addcraft.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.comendo.com/"\nzielfenster="_blank"><bild\nname="logo_comendo.gif" rahmen="no"/></link></absatz>\n\n</inhalt>\n</seite>\=jitstack=1024 <!DOCTYPE seite SYSTEM "http://www.lco.lineas.de/xmlCms.dtd">\n<seite>\n<dokumenteninformation>\n<seitentitel>Partner der LCO</seitentitel>\n<sprache>de</sprache>\n<seitenbeschreibung>Partner der LINEAS Consulting\nGmbH</seitenbeschreibung>\n<schluesselworte>LINEAS Consulting GmbH Hamburg\nPartnerfirmen</schluesselworte>\n<revisit>30 days</revisit>\n<robots>index,follow</robots>\n<menueinformation>\n<aktiv>ja</aktiv>\n<menueposition>3</menueposition>\n<menuetext>Partner</menuetext>\n</menueinformation>\n<lastedited>\n<autor>LCO</autor>\n<firma>LINEAS Consulting</firma>\n<datum>15.10.2003</datum>\n</lastedited>\n</dokumenteninformation>\n<inhalt>\n\n<absatzueberschrift>Die Partnerfirmen der LINEAS Consulting\nGmbH</absatzueberschrift>\n\n<absatz><link ziel="http://www.ca.com/" zielfenster="_blank">\n<bild name="logo_ca.gif" rahmen="no"/></link> <link\nziel="http://www.ey.com/" zielfenster="_blank"><bild\nname="logo_euy.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.cisco.de/" zielfenster="_blank">\n<bild name="logo_cisco.gif" rahmen="ja"/></link></absatz>\n\n<absatz><link ziel="http://www.atelion.de/"\nzielfenster="_blank"><bild\nname="logo_atelion.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><link ziel="http://www.line-information.de/"\nzielfenster="_blank">\n<bild name="logo_line_information.gif" rahmen="no"/></link>\n</absatz>\n\n<absatz><bild name="logo_aw.gif" rahmen="no"/></absatz>\n\n<absatz><link ziel="http://www.incognis.de/"\nzielfenster="_blank"><bild\nname="logo_incognis.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.addcraft.com/"\nzielfenster="_blank"><bild\nname="logo_addcraft.gif" rahmen="no"/></link></absatz>\n\n<absatz><link ziel="http://www.comendo.com/"\nzielfenster="_blank"><bild\nname="logo_comendo.gif" rahmen="no"/></link></absatz>\n\n</inhalt>\n</seite>\=jitstack=1024
@ -2505,182 +2505,182 @@ a random value. /Ix
XYabcdY XYabcdY
/Xa{2,4}b/ /Xa{2,4}b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/Xa{2,4}?b/ /Xa{2,4}?b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/Xa{2,4}+b/ /Xa{2,4}+b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X\d{2,4}b/ /X\d{2,4}b/
X\=P X\=ps
X3\=P X3\=ps
X33\=P X33\=ps
X333\=P X333\=ps
X3333\=P X3333\=ps
/X\d{2,4}?b/ /X\d{2,4}?b/
X\=P X\=ps
X3\=P X3\=ps
X33\=P X33\=ps
X333\=P X333\=ps
X3333\=P X3333\=ps
/X\d{2,4}+b/ /X\d{2,4}+b/
X\=P X\=ps
X3\=P X3\=ps
X33\=P X33\=ps
X333\=P X333\=ps
X3333\=P X3333\=ps
/X\D{2,4}b/ /X\D{2,4}b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X\D{2,4}?b/ /X\D{2,4}?b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X\D{2,4}+b/ /X\D{2,4}+b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X[abc]{2,4}b/ /X[abc]{2,4}b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X[abc]{2,4}?b/ /X[abc]{2,4}?b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X[abc]{2,4}+b/ /X[abc]{2,4}+b/
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X[^a]{2,4}b/ /X[^a]{2,4}b/
X\=P X\=ps
Xz\=P Xz\=ps
Xzz\=P Xzz\=ps
Xzzz\=P Xzzz\=ps
Xzzzz\=P Xzzzz\=ps
/X[^a]{2,4}?b/ /X[^a]{2,4}?b/
X\=P X\=ps
Xz\=P Xz\=ps
Xzz\=P Xzz\=ps
Xzzz\=P Xzzz\=ps
Xzzzz\=P Xzzzz\=ps
/X[^a]{2,4}+b/ /X[^a]{2,4}+b/
X\=P X\=ps
Xz\=P Xz\=ps
Xzz\=P Xzz\=ps
Xzzz\=P Xzzz\=ps
Xzzzz\=P Xzzzz\=ps
/(Y)X\1{2,4}b/ /(Y)X\1{2,4}b/
YX\=P YX\=ps
YXY\=P YXY\=ps
YXYY\=P YXYY\=ps
YXYYY\=P YXYYY\=ps
YXYYYY\=P YXYYYY\=ps
/(Y)X\1{2,4}?b/ /(Y)X\1{2,4}?b/
YX\=P YX\=ps
YXY\=P YXY\=ps
YXYY\=P YXYY\=ps
YXYYY\=P YXYYY\=ps
YXYYYY\=P YXYYYY\=ps
/(Y)X\1{2,4}+b/ /(Y)X\1{2,4}+b/
YX\=P YX\=ps
YXY\=P YXY\=ps
YXYY\=P YXYY\=ps
YXYYY\=P YXYYY\=ps
YXYYYY\=P YXYYYY\=ps
/\++\KZ|\d+X|9+Y/ /\++\KZ|\d+X|9+Y/
++++123999\=P ++++123999\=ps
++++123999Y\=P ++++123999Y\=ps
++++Z1234\=P ++++Z1234\=ps
/Z(*F)/ /Z(*F)/
Z\=P Z\=ps
ZA\=P ZA\=ps
/Z(?!)/ /Z(?!)/
Z\=P Z\=ps
ZA\=P ZA\=ps
/dog(sbody)?/ /dog(sbody)?/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/dog(sbody)??/ /dog(sbody)??/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/dog|dogsbody/ /dog|dogsbody/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/dogsbody|dog/ /dogsbody|dog/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/\bthe cat\b/ /\bthe cat\b/
the cat\=P the cat\=ps
the cat\=PP the cat\=ph
/abc/ /abc/
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\K123/ /abc\K123/
xyzabc123pqr xyzabc123pqr
xyzabc12\=P xyzabc12\=ps
xyzabc12\=PP xyzabc12\=ph
/(?<=abc)123/ /(?<=abc)123/
xyzabc123pqr xyzabc123pqr
xyzabc12\=P xyzabc12\=ps
xyzabc12\=PP xyzabc12\=ph
/\babc\b/ /\babc\b/
+++abc+++ +++abc+++
+++ab\=P +++ab\=ps
+++ab\=PP +++ab\=ph
/(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\w*+))/B /(?&word)(?&element)(?(DEFINE)(?<element><[^m][^>]>[^<])(?<word>\w*+))/B
@ -2864,26 +2864,26 @@ a random value. /Ix
abcdde abcdde
/abcd*/ /abcd*/
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
/abcd*/i /abcd*/i
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
XXXXABCD\=P XXXXABCD\=ps
XXXXABCD\=PP XXXXABCD\=ph
/abc\d*/ /abc\d*/
xxxxabc1\=P xxxxabc1\=ps
xxxxabc1\=PP xxxxabc1\=ph
/(a)bc\1*/ /(a)bc\1*/
xxxxabca\=P xxxxabca\=ps
xxxxabca\=PP xxxxabca\=ph
/abc[de]*/ /abc[de]*/
xxxxabcde\=P xxxxabcde\=ps
xxxxabcde\=PP xxxxabcde\=ph
# This is not in the Perl-compatible test because Perl seems currently to be # This is not in the Perl-compatible test because Perl seems currently to be
# broken and not behaving as specified in that it *does* bumpalong after # broken and not behaving as specified in that it *does* bumpalong after
@ -3046,40 +3046,40 @@ a random value. /Ix
X\x0d\x0a X\x0d\x0a
/(?<=abc)def/ /(?<=abc)def/
abc\=PP abc\=ph
/abc$/ /abc$/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc$/m /abc$/m
abc abc
abc\n abc\n
abc\=PP abc\=ph
abc\n\=PP abc\n\=ph
abc\=P abc\=ps
abc\n\=P abc\n\=ps
/abc\z/ /abc\z/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\Z/ /abc\Z/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\b/ /abc\b/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\B/ /abc\B/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/.+/ /.+/
abc\=offset=0 abc\=offset=0
@ -3337,7 +3337,7 @@ a random value. /Ix
aeqwerty aeqwerty
/.(*F)/ /.(*F)/
abc\=PP abc\=ph
/\btype\b\W*?\btext\b\W*?\bjavascript\b/I /\btype\b\W*?\btext\b\W*?\bjavascript\b/I
@ -3469,7 +3469,7 @@ a random value. /Ix
# After a partial match, the behaviour is as for a failure. # After a partial match, the behaviour is as for a failure.
/^a(*:X)bcde/mark /^a(*:X)bcde/mark
abc\=P abc\=ps
# These are here because Perl doesn't return a mark, except for the first. # These are here because Perl doesn't return a mark, except for the first.
@ -3492,58 +3492,58 @@ a random value. /Ix
ab ab
/(..)\1/ /(..)\1/
ab\=P ab\=ps
aba\=P aba\=ps
abab\=P abab\=ps
/(..)\1/i /(..)\1/i
ab\=P ab\=ps
abA\=P abA\=ps
aBAb\=P aBAb\=ps
/(..)\1{2,}/ /(..)\1{2,}/
ab\=P ab\=ps
aba\=P aba\=ps
abab\=P abab\=ps
ababa\=P ababa\=ps
ababab\=P ababab\=ps
ababab\=PP ababab\=ph
abababa\=P abababa\=ps
abababa\=PP abababa\=ph
/(..)\1{2,}/i /(..)\1{2,}/i
ab\=P ab\=ps
aBa\=P aBa\=ps
aBAb\=P aBAb\=ps
AbaBA\=P AbaBA\=ps
abABAb\=P abABAb\=ps
aBAbaB\=PP aBAbaB\=ph
abABabA\=P abABabA\=ps
abaBABa\=PP abaBABa\=ph
/(..)\1{2,}?x/i /(..)\1{2,}?x/i
ab\=P ab\=ps
abA\=P abA\=ps
aBAb\=P aBAb\=ps
abaBA\=P abaBA\=ps
abAbaB\=P abAbaB\=ps
abaBabA\=P abaBabA\=ps
abAbABaBx\=P abAbABaBx\=ps
/^(..)\1/ /^(..)\1/
aba\=P aba\=ps
/^(..)\1{2,3}x/ /^(..)\1{2,3}x/
aba\=P aba\=ps
ababa\=P ababa\=ps
ababa\=PP ababa\=ph
abababx abababx
ababababx ababababx
/^(..)\1{2,3}?x/ /^(..)\1{2,3}?x/
aba\=P aba\=ps
ababa\=P ababa\=ps
ababa\=PP ababa\=ph
abababx abababx
ababababx ababababx
@ -3551,77 +3551,77 @@ a random value. /Ix
abababab abababab
/^\R/ /^\R/
\r\=P \r\=ps
\r\=PP \r\=ph
/^\R{2,3}x/ /^\R{2,3}x/
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
\r\rx \r\rx
\r\r\rx \r\r\rx
/^\R{2,3}?x/ /^\R{2,3}?x/
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
\r\rx \r\rx
\r\r\rx \r\r\rx
/^\R?x/ /^\R?x/
\r\=P \r\=ps
\r\=PP \r\=ph
x x
\rx \rx
/^\R+x/ /^\R+x/
\r\=P \r\=ps
\r\=PP \r\=ph
\r\n\=P \r\n\=ps
\r\n\=PP \r\n\=ph
\rx \rx
/^a$/newline=crlf /^a$/newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/^a$/m,newline=crlf /^a$/m,newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/^(a$|a\r)/newline=crlf /^(a$|a\r)/newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/^(a$|a\r)/m,newline=crlf /^(a$|a\r)/m,newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/./newline=crlf /./newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
/.{2,3}/newline=crlf /.{2,3}/newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
/.{2,3}?/newline=crlf /.{2,3}?/newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
"AB(C(D))(E(F))?(?(?=\2)(?=\4))" "AB(C(D))(E(F))?(?(?=\2)(?=\4))"
ABCDGHI\=ovector=01 ABCDGHI\=ovector=01
@ -3685,12 +3685,12 @@ a random value. /Ix
ab\=ovector=1 ab\=ovector=1
/(?<=123)(*MARK:xx)abc/mark /(?<=123)(*MARK:xx)abc/mark
xxxx123a\=PP xxxx123a\=ph
xxxx123a\=P xxxx123a\=ps
/123\Kabc/ /123\Kabc/
xxxx123a\=PP xxxx123a\=ph
xxxx123a\=P xxxx123a\=ps
/^(?(?=a)aa|bb)/auto_callout /^(?(?=a)aa|bb)/auto_callout
bb bb

556
testdata/testinput5 vendored
View File

@ -293,285 +293,285 @@
A\x{1ec5}ABCXYZ A\x{1ec5}ABCXYZ
/Xa{2,4}b/utf /Xa{2,4}b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/Xa{2,4}?b/utf /Xa{2,4}?b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/Xa{2,4}+b/utf /Xa{2,4}+b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X\x{123}{2,4}b/utf /X\x{123}{2,4}b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X\x{123}{2,4}?b/utf /X\x{123}{2,4}?b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X\x{123}{2,4}+b/utf /X\x{123}{2,4}+b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X\x{123}{2,4}b/utf /X\x{123}{2,4}b/utf
Xx\=P Xx\=ps
X\x{123}x\=P X\x{123}x\=ps
X\x{123}\x{123}x\=P X\x{123}\x{123}x\=ps
X\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}x\=ps
X\x{123}\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}\x{123}x\=ps
/X\x{123}{2,4}?b/utf /X\x{123}{2,4}?b/utf
Xx\=P Xx\=ps
X\x{123}x\=P X\x{123}x\=ps
X\x{123}\x{123}x\=P X\x{123}\x{123}x\=ps
X\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}x\=ps
X\x{123}\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}\x{123}x\=ps
/X\x{123}{2,4}+b/utf /X\x{123}{2,4}+b/utf
Xx\=P Xx\=ps
X\x{123}x\=P X\x{123}x\=ps
X\x{123}\x{123}x\=P X\x{123}\x{123}x\=ps
X\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}x\=ps
X\x{123}\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}\x{123}x\=ps
/X\d{2,4}b/utf /X\d{2,4}b/utf
X\=P X\=ps
X3\=P X3\=ps
X33\=P X33\=ps
X333\=P X333\=ps
X3333\=P X3333\=ps
/X\d{2,4}?b/utf /X\d{2,4}?b/utf
X\=P X\=ps
X3\=P X3\=ps
X33\=P X33\=ps
X333\=P X333\=ps
X3333\=P X3333\=ps
/X\d{2,4}+b/utf /X\d{2,4}+b/utf
X\=P X\=ps
X3\=P X3\=ps
X33\=P X33\=ps
X333\=P X333\=ps
X3333\=P X3333\=ps
/X\D{2,4}b/utf /X\D{2,4}b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X\D{2,4}?b/utf /X\D{2,4}?b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X\D{2,4}+b/utf /X\D{2,4}+b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X\D{2,4}b/utf /X\D{2,4}b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X\D{2,4}?b/utf /X\D{2,4}?b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X\D{2,4}+b/utf /X\D{2,4}+b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X[abc]{2,4}b/utf /X[abc]{2,4}b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X[abc]{2,4}?b/utf /X[abc]{2,4}?b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X[abc]{2,4}+b/utf /X[abc]{2,4}+b/utf
X\=P X\=ps
Xa\=P Xa\=ps
Xaa\=P Xaa\=ps
Xaaa\=P Xaaa\=ps
Xaaaa\=P Xaaaa\=ps
/X[abc\x{123}]{2,4}b/utf /X[abc\x{123}]{2,4}b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X[abc\x{123}]{2,4}?b/utf /X[abc\x{123}]{2,4}?b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X[abc\x{123}]{2,4}+b/utf /X[abc\x{123}]{2,4}+b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X[^a]{2,4}b/utf /X[^a]{2,4}b/utf
X\=P X\=ps
Xz\=P Xz\=ps
Xzz\=P Xzz\=ps
Xzzz\=P Xzzz\=ps
Xzzzz\=P Xzzzz\=ps
/X[^a]{2,4}?b/utf /X[^a]{2,4}?b/utf
X\=P X\=ps
Xz\=P Xz\=ps
Xzz\=P Xzz\=ps
Xzzz\=P Xzzz\=ps
Xzzzz\=P Xzzzz\=ps
/X[^a]{2,4}+b/utf /X[^a]{2,4}+b/utf
X\=P X\=ps
Xz\=P Xz\=ps
Xzz\=P Xzz\=ps
Xzzz\=P Xzzz\=ps
Xzzzz\=P Xzzzz\=ps
/X[^a]{2,4}b/utf /X[^a]{2,4}b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X[^a]{2,4}?b/utf /X[^a]{2,4}?b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/X[^a]{2,4}+b/utf /X[^a]{2,4}+b/utf
X\=P X\=ps
X\x{123}\=P X\x{123}\=ps
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
/(Y)X\1{2,4}b/utf /(Y)X\1{2,4}b/utf
YX\=P YX\=ps
YXY\=P YXY\=ps
YXYY\=P YXYY\=ps
YXYYY\=P YXYYY\=ps
YXYYYY\=P YXYYYY\=ps
/(Y)X\1{2,4}?b/utf /(Y)X\1{2,4}?b/utf
YX\=P YX\=ps
YXY\=P YXY\=ps
YXYY\=P YXYY\=ps
YXYYY\=P YXYYY\=ps
YXYYYY\=P YXYYYY\=ps
/(Y)X\1{2,4}+b/utf /(Y)X\1{2,4}+b/utf
YX\=P YX\=ps
YXY\=P YXY\=ps
YXYY\=P YXYY\=ps
YXYYY\=P YXYYY\=ps
YXYYYY\=P YXYYYY\=ps
/(\x{123})X\1{2,4}b/utf /(\x{123})X\1{2,4}b/utf
\x{123}X\=P \x{123}X\=ps
\x{123}X\x{123}\=P \x{123}X\x{123}\=ps
\x{123}X\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\=ps
\x{123}X\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\=ps
\x{123}X\x{123}\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\x{123}\=ps
/(\x{123})X\1{2,4}?b/utf /(\x{123})X\1{2,4}?b/utf
\x{123}X\=P \x{123}X\=ps
\x{123}X\x{123}\=P \x{123}X\x{123}\=ps
\x{123}X\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\=ps
\x{123}X\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\=ps
\x{123}X\x{123}\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\x{123}\=ps
/(\x{123})X\1{2,4}+b/utf /(\x{123})X\1{2,4}+b/utf
\x{123}X\=P \x{123}X\=ps
\x{123}X\x{123}\=P \x{123}X\x{123}\=ps
\x{123}X\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\=ps
\x{123}X\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\=ps
\x{123}X\x{123}\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\x{123}\=ps
/\bthe cat\b/utf /\bthe cat\b/utf
the cat\=P the cat\=ps
the cat\=PP the cat\=ph
/abcd*/utf /abcd*/utf
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
/abcd*/i,utf /abcd*/i,utf
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
XXXXABCD\=P XXXXABCD\=ps
XXXXABCD\=PP XXXXABCD\=ph
/abc\d*/utf /abc\d*/utf
xxxxabc1\=P xxxxabc1\=ps
xxxxabc1\=PP xxxxabc1\=ph
/(a)bc\1*/utf /(a)bc\1*/utf
xxxxabca\=P xxxxabca\=ps
xxxxabca\=PP xxxxabca\=ph
/abc[de]*/utf /abc[de]*/utf
xxxxabcde\=P xxxxabcde\=ps
xxxxabcde\=PP xxxxabcde\=ph
/X\W{3}X/utf /X\W{3}X/utf
X\=P X\=ps
/\sxxx\s/utf,tables=1 /\sxxx\s/utf,tables=1
AB\x{85}xxx\x{a0}XYZ AB\x{85}xxx\x{a0}XYZ
@ -616,16 +616,16 @@
/[^\x{1234}]{2}/Ii,utf /[^\x{1234}]{2}/Ii,utf
/f.*/ /f.*/
for\=PP for\=ph
/f.*/s /f.*/s
for\=PP for\=ph
/f.*/utf /f.*/utf
for\=PP for\=ph
/f.*/s,utf /f.*/s,utf
for\=PP for\=ph
/\x{d7ff}\x{e000}/utf /\x{d7ff}\x{e000}/utf
@ -674,63 +674,63 @@
\x09\x0e\x{84}\x{86}\x{85}\x0a\x0b\x0c\x0d \x09\x0e\x{84}\x{86}\x{85}\x0a\x0b\x0c\x0d
/(..)\1/utf /(..)\1/utf
ab\=P ab\=ps
aba\=P aba\=ps
abab\=P abab\=ps
/(..)\1/i,utf /(..)\1/i,utf
ab\=P ab\=ps
abA\=P abA\=ps
aBAb\=P aBAb\=ps
/(..)\1{2,}/utf /(..)\1{2,}/utf
ab\=P ab\=ps
aba\=P aba\=ps
abab\=P abab\=ps
ababa\=P ababa\=ps
ababab\=P ababab\=ps
ababab\=PP ababab\=ph
abababa\=P abababa\=ps
abababa\=PP abababa\=ph
/(..)\1{2,}/i,utf /(..)\1{2,}/i,utf
ab\=P ab\=ps
aBa\=P aBa\=ps
aBAb\=P aBAb\=ps
AbaBA\=P AbaBA\=ps
abABAb\=P abABAb\=ps
aBAbaB\=PP aBAbaB\=ph
abABabA\=P abABabA\=ps
abaBABa\=PP abaBABa\=ph
/(..)\1{2,}?x/i,utf /(..)\1{2,}?x/i,utf
ab\=P ab\=ps
abA\=P abA\=ps
aBAb\=P aBAb\=ps
abaBA\=P abaBA\=ps
abAbaB\=P abAbaB\=ps
abaBabA\=P abaBabA\=ps
abAbABaBx\=P abAbABaBx\=ps
/./utf,newline=crlf /./utf,newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
/.{2,3}/utf,newline=crlf /.{2,3}/utf,newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
/.{2,3}?/utf,newline=crlf /.{2,3}?/utf,newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
/[^\x{100}][^\x{1234}][^\x{ffff}][^\x{10000}][^\x{10ffff}]/B,utf /[^\x{100}][^\x{1234}][^\x{ffff}][^\x{10000}][^\x{10ffff}]/B,utf
@ -1305,28 +1305,28 @@
/(?<=ab\Cde)X/utf /(?<=ab\Cde)X/utf
/\X/ /\X/
a\=P a\=ps
a\=PP a\=ph
/\Xa/ /\Xa/
aa\=P aa\=ps
aa\=PP aa\=ph
/\X{2}/ /\X{2}/
aa\=P aa\=ps
aa\=PP aa\=ph
/\X+a/ /\X+a/
a\=P a\=ps
aa\=P aa\=ps
aa\=PP aa\=ph
/\X+?a/ /\X+?a/
a\=P a\=ps
ab\=P ab\=ps
aa\=P aa\=ps
aa\=PP aa\=ph
aba\=P aba\=ps
# These Unicode 6.1.0 scripts are not known to Perl. # These Unicode 6.1.0 scripts are not known to Perl.
@ -1337,36 +1337,36 @@
\x{11680}\x{116c0} \x{11680}\x{116c0}
/^\X/utf /^\X/utf
A\=P A\=ps
A\=PP A\=ph
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
A\x{301}\=P A\x{301}\=ps
A\x{301}\=PP A\x{301}\=ph
/^\X{2,3}/utf /^\X{2,3}/utf
A\=P A\=ps
A\=PP A\=ph
AA\=P AA\=ps
AA\=PP AA\=ph
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
/^\X{2}/utf /^\X{2}/utf
AA\=P AA\=ps
AA\=PP AA\=ph
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
/^\X+/utf /^\X+/utf
AA\=P AA\=ps
AA\=PP AA\=ph
/^\X+?Z/utf /^\X+?Z/utf
AA\=P AA\=ps
AA\=PP AA\=ph
/A\x{3a3}B/IBi,utf /A\x{3a3}B/IBi,utf

250
testdata/testinput6 vendored
View File

@ -464,46 +464,46 @@
defabcxyz defabcxyz
/^abcdef/ /^abcdef/
ab\=P ab\=ps
abcde\=P abcde\=ps
abcdef\=P abcdef\=ps
*** Failers *** Failers
abx\=P abx\=ps
/^a{2,4}\d+z/ /^a{2,4}\d+z/
a\=P a\=ps
aa\=P aa\=ps
aa2\=P aa2\=ps
aaa\=P aaa\=ps
aaa23\=P aaa23\=ps
aaaa12345\=P aaaa12345\=ps
aa0z\=P aa0z\=ps
aaaa4444444444444z\=P aaaa4444444444444z\=ps
*** Failers *** Failers
az\=P az\=ps
aaaaa\=P aaaaa\=ps
a56\=P a56\=ps
/^abcdef/ /^abcdef/
abc\=P abc\=ps
def\=dfa_restart def\=dfa_restart
/(?<=foo)bar/ /(?<=foo)bar/
xyzfo\=P xyzfo\=ps
foob\=P,offset=2 foob\=ps,offset=2
foobar...\=P,dfa_restart,offset=4 foobar...\=ps,dfa_restart,offset=4
xyzfo\=P xyzfo\=ps
foobar\=offset=2 foobar\=offset=2
*** Failers *** Failers
xyzfo\=P xyzfo\=ps
obar\=dfa_restart obar\=dfa_restart
/(ab*(cd|ef))+X/ /(ab*(cd|ef))+X/
adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=P,noteol adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=P,notbol,noteol lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=ps,notbol,noteol
cdabbbbbbbb\=P,notbol,dfa_restart,noteol cdabbbbbbbb\=ps,notbol,dfa_restart,noteol
efabbbbbbbbbbbbbbbb\=P,notbol,dfa_restart,noteol efabbbbbbbbbbbbbbbb\=ps,notbol,dfa_restart,noteol
bbbbbbbbbbbbcdXyasdfadf\=P,notbol,dfa_restart,noteol bbbbbbbbbbbbcdXyasdfadf\=ps,notbol,dfa_restart,noteol
/the quick brown fox/ /the quick brown fox/
the quick brown fox the quick brown fox
@ -3961,12 +3961,12 @@
line one\nthis is a line\nbreak in the second line line one\nthis is a line\nbreak in the second line
/1234/ /1234/
123\=P 123\=ps
a4\=P,dfa_restart a4\=ps,dfa_restart
/1234/ /1234/
123\=P 123\=ps
4\=P,dfa_restart 4\=ps,dfa_restart
/^/gm /^/gm
a\nb\nc\n a\nb\nc\n
@ -4372,66 +4372,66 @@
"ab"\=callout_none "ab"\=callout_none
/\d+X|9+Y/ /\d+X|9+Y/
++++123999\=P ++++123999\=ps
++++123999Y\=P ++++123999Y\=ps
/Z(*F)/ /Z(*F)/
Z\=P Z\=ps
ZA\=P ZA\=ps
/Z(?!)/ /Z(?!)/
Z\=P Z\=ps
ZA\=P ZA\=ps
/dog(sbody)?/ /dog(sbody)?/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/dog(sbody)??/ /dog(sbody)??/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/dog|dogsbody/ /dog|dogsbody/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/dogsbody|dog/ /dogsbody|dog/
dogs\=P dogs\=ps
dogs\=PP dogs\=ph
/Z(*F)Q|ZXY/ /Z(*F)Q|ZXY/
Z\=P Z\=ps
ZA\=P ZA\=ps
X\=P X\=ps
/\bthe cat\b/ /\bthe cat\b/
the cat\=P the cat\=ps
the cat\=PP the cat\=ph
/dog(sbody)?/ /dog(sbody)?/
dogs\=P dogs\=ps
body\=dfa_restart body\=dfa_restart
/dog(sbody)?/ /dog(sbody)?/
dogs\=PP dogs\=ph
body\=dfa_restart body\=dfa_restart
/abc/ /abc/
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\K123/ /abc\K123/
xyzabc123pqr xyzabc123pqr
/(?<=abc)123/ /(?<=abc)123/
xyzabc123pqr xyzabc123pqr
xyzabc12\=P xyzabc12\=ps
xyzabc12\=PP xyzabc12\=ph
/\babc\b/ /\babc\b/
+++abc+++ +++abc+++
+++ab\=P +++ab\=ps
+++ab\=PP +++ab\=ph
/(?=C)/g,aftertext /(?=C)/g,aftertext
ABCDECBA ABCDECBA
@ -4455,25 +4455,25 @@
thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd\=no_start_optimize thejk;adlfj aenjl;fda asdfasd ehj;kjxyasiupd\=no_start_optimize
/abcd*/aftertext /abcd*/aftertext
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
dddxxx\=dfa_restart dddxxx\=dfa_restart
xxxxabcd\=PP xxxxabcd\=ph
xxx\=dfa_restart xxx\=dfa_restart
/abcd*/i /abcd*/i
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
XXXXABCD\=P XXXXABCD\=ps
XXXXABCD\=PP XXXXABCD\=ph
/abc\d*/ /abc\d*/
xxxxabc1\=P xxxxabc1\=ps
xxxxabc1\=PP xxxxabc1\=ph
/abc[de]*/ /abc[de]*/
xxxxabcde\=P xxxxabcde\=ps
xxxxabcde\=PP xxxxabcde\=ph
/(?:(?1)|B)(A(*F)|C)/ /(?:(?1)|B)(A(*F)|C)/
ABCD ABCD
@ -4508,40 +4508,40 @@
ac ac
/(?<=abc)def/ /(?<=abc)def/
abc\=PP abc\=ph
/abc$/ /abc$/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc$/m /abc$/m
abc abc
abc\n abc\n
abc\=PP abc\=ph
abc\n\=PP abc\n\=ph
abc\=P abc\=ps
abc\n\=P abc\n\=ps
/abc\z/ /abc\z/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\Z/ /abc\Z/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\b/ /abc\b/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/abc\B/ /abc\B/
abc abc
abc\=P abc\=ps
abc\=PP abc\=ph
/.+/ /.+/
abc\=offset=0 abc\=offset=0
@ -4654,77 +4654,77 @@
abZdeX abZdeX
/^\R/ /^\R/
\r\=P \r\=ps
\r\=PP \r\=ph
/^\R{2,3}x/ /^\R{2,3}x/
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
\r\rx \r\rx
\r\r\rx \r\r\rx
/^\R{2,3}?x/ /^\R{2,3}?x/
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
\r\rx \r\rx
\r\r\rx \r\r\rx
/^\R?x/ /^\R?x/
\r\=P \r\=ps
\r\=PP \r\=ph
x x
\rx \rx
/^\R+x/ /^\R+x/
\r\=P \r\=ps
\r\=PP \r\=ph
\r\n\=P \r\n\=ps
\r\n\=PP \r\n\=ph
\rx \rx
/^a$/newline=crlf /^a$/newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/^a$/m,newline=crlf /^a$/m,newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/^(a$|a\r)/newline=crlf /^(a$|a\r)/newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/^(a$|a\r)/m,newline=crlf /^(a$|a\r)/m,newline=crlf
a\r\=P a\r\=ps
a\r\=PP a\r\=ph
/./newline=crlf /./newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
/.{2,3}/newline=crlf /.{2,3}/newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
/.{2,3}?/newline=crlf /.{2,3}?/newline=crlf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
# Test simple validity check for restarts # Test simple validity check for restarts

96
testdata/testinput7 vendored
View File

@ -664,26 +664,26 @@
A\x{1ec5}ABCXYZ A\x{1ec5}ABCXYZ
/abcd*/utf /abcd*/utf
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
/abcd*/i,utf /abcd*/i,utf
xxxxabcd\=P xxxxabcd\=ps
xxxxabcd\=PP xxxxabcd\=ph
XXXXABCD\=P XXXXABCD\=ps
XXXXABCD\=PP XXXXABCD\=ph
/abc\d*/utf /abc\d*/utf
xxxxabc1\=P xxxxabc1\=ps
xxxxabc1\=PP xxxxabc1\=ph
/abc[de]*/utf /abc[de]*/utf
xxxxabcde\=P xxxxabcde\=ps
xxxxabcde\=PP xxxxabcde\=ph
/\bthe cat\b/utf /\bthe cat\b/utf
the cat\=P the cat\=ps
the cat\=PP the cat\=ph
/ab\Cde/utf /ab\Cde/utf
abXde abXde
@ -691,24 +691,24 @@
/(?<=ab\Cde)X/utf /(?<=ab\Cde)X/utf
/./newline=crlf,utf /./newline=crlf,utf
\r\=P \r\=ps
\r\=PP \r\=ph
/.{2,3}/newline=crlf,utf /.{2,3}/newline=crlf,utf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
/.{2,3}?/newline=crlf,utf /.{2,3}?/newline=crlf,utf
\r\=P \r\=ps
\r\=PP \r\=ph
\r\r\=P \r\r\=ps
\r\r\=PP \r\r\=ph
\r\r\r\=P \r\r\r\=ps
\r\r\r\=PP \r\r\r\=ph
/[^\x{100}]/utf /[^\x{100}]/utf
\x{100}\x{101}X \x{100}\x{101}X
@ -1714,36 +1714,36 @@
\x{100}\x{101}XX \x{100}\x{101}XX
/^\X/utf /^\X/utf
A\=P A\=ps
A\=PP A\=ph
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
A\x{301}\=P A\x{301}\=ps
A\x{301}\=PP A\x{301}\=ph
/^\X{2,3}/utf /^\X{2,3}/utf
A\=P A\=ps
A\=PP A\=ph
AA\=P AA\=ps
AA\=PP AA\=ph
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
/^\X{2}/utf /^\X{2}/utf
AA\=P AA\=ps
AA\=PP AA\=ph
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
/^\X+/utf /^\X+/utf
AA\=P AA\=ps
AA\=PP AA\=ph
/^\X+?Z/utf /^\X+?Z/utf
AA\=P AA\=ps
AA\=PP AA\=ph
# These are tests for extended grapheme clusters # These are tests for extended grapheme clusters

528
testdata/testoutput2 vendored

File diff suppressed because it is too large Load Diff

556
testdata/testoutput5 vendored
View File

@ -805,480 +805,480 @@ No match
0: X 0: X
/Xa{2,4}b/utf /Xa{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/Xa{2,4}?b/utf /Xa{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/Xa{2,4}+b/utf /Xa{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/X\x{123}{2,4}b/utf /X\x{123}{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X\x{123}{2,4}?b/utf /X\x{123}{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X\x{123}{2,4}+b/utf /X\x{123}{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X\x{123}{2,4}b/utf /X\x{123}{2,4}b/utf
Xx\=P Xx\=ps
No match No match
X\x{123}x\=P X\x{123}x\=ps
No match No match
X\x{123}\x{123}x\=P X\x{123}\x{123}x\=ps
No match No match
X\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}x\=ps
No match No match
X\x{123}\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}\x{123}x\=ps
No match No match
/X\x{123}{2,4}?b/utf /X\x{123}{2,4}?b/utf
Xx\=P Xx\=ps
No match No match
X\x{123}x\=P X\x{123}x\=ps
No match No match
X\x{123}\x{123}x\=P X\x{123}\x{123}x\=ps
No match No match
X\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}x\=ps
No match No match
X\x{123}\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}\x{123}x\=ps
No match No match
/X\x{123}{2,4}+b/utf /X\x{123}{2,4}+b/utf
Xx\=P Xx\=ps
No match No match
X\x{123}x\=P X\x{123}x\=ps
No match No match
X\x{123}\x{123}x\=P X\x{123}\x{123}x\=ps
No match No match
X\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}x\=ps
No match No match
X\x{123}\x{123}\x{123}\x{123}x\=P X\x{123}\x{123}\x{123}\x{123}x\=ps
No match No match
/X\d{2,4}b/utf /X\d{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
X3\=P X3\=ps
Partial match: X3 Partial match: X3
X33\=P X33\=ps
Partial match: X33 Partial match: X33
X333\=P X333\=ps
Partial match: X333 Partial match: X333
X3333\=P X3333\=ps
Partial match: X3333 Partial match: X3333
/X\d{2,4}?b/utf /X\d{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
X3\=P X3\=ps
Partial match: X3 Partial match: X3
X33\=P X33\=ps
Partial match: X33 Partial match: X33
X333\=P X333\=ps
Partial match: X333 Partial match: X333
X3333\=P X3333\=ps
Partial match: X3333 Partial match: X3333
/X\d{2,4}+b/utf /X\d{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
X3\=P X3\=ps
Partial match: X3 Partial match: X3
X33\=P X33\=ps
Partial match: X33 Partial match: X33
X333\=P X333\=ps
Partial match: X333 Partial match: X333
X3333\=P X3333\=ps
Partial match: X3333 Partial match: X3333
/X\D{2,4}b/utf /X\D{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/X\D{2,4}?b/utf /X\D{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/X\D{2,4}+b/utf /X\D{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/X\D{2,4}b/utf /X\D{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X\D{2,4}?b/utf /X\D{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X\D{2,4}+b/utf /X\D{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X[abc]{2,4}b/utf /X[abc]{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/X[abc]{2,4}?b/utf /X[abc]{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/X[abc]{2,4}+b/utf /X[abc]{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xa\=P Xa\=ps
Partial match: Xa Partial match: Xa
Xaa\=P Xaa\=ps
Partial match: Xaa Partial match: Xaa
Xaaa\=P Xaaa\=ps
Partial match: Xaaa Partial match: Xaaa
Xaaaa\=P Xaaaa\=ps
Partial match: Xaaaa Partial match: Xaaaa
/X[abc\x{123}]{2,4}b/utf /X[abc\x{123}]{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X[abc\x{123}]{2,4}?b/utf /X[abc\x{123}]{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X[abc\x{123}]{2,4}+b/utf /X[abc\x{123}]{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X[^a]{2,4}b/utf /X[^a]{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xz\=P Xz\=ps
Partial match: Xz Partial match: Xz
Xzz\=P Xzz\=ps
Partial match: Xzz Partial match: Xzz
Xzzz\=P Xzzz\=ps
Partial match: Xzzz Partial match: Xzzz
Xzzzz\=P Xzzzz\=ps
Partial match: Xzzzz Partial match: Xzzzz
/X[^a]{2,4}?b/utf /X[^a]{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xz\=P Xz\=ps
Partial match: Xz Partial match: Xz
Xzz\=P Xzz\=ps
Partial match: Xzz Partial match: Xzz
Xzzz\=P Xzzz\=ps
Partial match: Xzzz Partial match: Xzzz
Xzzzz\=P Xzzzz\=ps
Partial match: Xzzzz Partial match: Xzzzz
/X[^a]{2,4}+b/utf /X[^a]{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
Xz\=P Xz\=ps
Partial match: Xz Partial match: Xz
Xzz\=P Xzz\=ps
Partial match: Xzz Partial match: Xzz
Xzzz\=P Xzzz\=ps
Partial match: Xzzz Partial match: Xzzz
Xzzzz\=P Xzzzz\=ps
Partial match: Xzzzz Partial match: Xzzzz
/X[^a]{2,4}b/utf /X[^a]{2,4}b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X[^a]{2,4}?b/utf /X[^a]{2,4}?b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/X[^a]{2,4}+b/utf /X[^a]{2,4}+b/utf
X\=P X\=ps
Partial match: X Partial match: X
X\x{123}\=P X\x{123}\=ps
Partial match: X\x{123} Partial match: X\x{123}
X\x{123}\x{123}\=P X\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123} Partial match: X\x{123}\x{123}
X\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}
X\x{123}\x{123}\x{123}\x{123}\=P X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: X\x{123}\x{123}\x{123}\x{123} Partial match: X\x{123}\x{123}\x{123}\x{123}
/(Y)X\1{2,4}b/utf /(Y)X\1{2,4}b/utf
YX\=P YX\=ps
Partial match: YX Partial match: YX
YXY\=P YXY\=ps
Partial match: YXY Partial match: YXY
YXYY\=P YXYY\=ps
Partial match: YXYY Partial match: YXYY
YXYYY\=P YXYYY\=ps
Partial match: YXYYY Partial match: YXYYY
YXYYYY\=P YXYYYY\=ps
Partial match: YXYYYY Partial match: YXYYYY
/(Y)X\1{2,4}?b/utf /(Y)X\1{2,4}?b/utf
YX\=P YX\=ps
Partial match: YX Partial match: YX
YXY\=P YXY\=ps
Partial match: YXY Partial match: YXY
YXYY\=P YXYY\=ps
Partial match: YXYY Partial match: YXYY
YXYYY\=P YXYYY\=ps
Partial match: YXYYY Partial match: YXYYY
YXYYYY\=P YXYYYY\=ps
Partial match: YXYYYY Partial match: YXYYYY
/(Y)X\1{2,4}+b/utf /(Y)X\1{2,4}+b/utf
YX\=P YX\=ps
Partial match: YX Partial match: YX
YXY\=P YXY\=ps
Partial match: YXY Partial match: YXY
YXYY\=P YXYY\=ps
Partial match: YXYY Partial match: YXYY
YXYYY\=P YXYYY\=ps
Partial match: YXYYY Partial match: YXYYY
YXYYYY\=P YXYYYY\=ps
Partial match: YXYYYY Partial match: YXYYYY
/(\x{123})X\1{2,4}b/utf /(\x{123})X\1{2,4}b/utf
\x{123}X\=P \x{123}X\=ps
Partial match: \x{123}X Partial match: \x{123}X
\x{123}X\x{123}\=P \x{123}X\x{123}\=ps
Partial match: \x{123}X\x{123} Partial match: \x{123}X\x{123}
\x{123}X\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}
\x{123}X\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}\x{123}
\x{123}X\x{123}\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123}
/(\x{123})X\1{2,4}?b/utf /(\x{123})X\1{2,4}?b/utf
\x{123}X\=P \x{123}X\=ps
Partial match: \x{123}X Partial match: \x{123}X
\x{123}X\x{123}\=P \x{123}X\x{123}\=ps
Partial match: \x{123}X\x{123} Partial match: \x{123}X\x{123}
\x{123}X\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}
\x{123}X\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}\x{123}
\x{123}X\x{123}\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123}
/(\x{123})X\1{2,4}+b/utf /(\x{123})X\1{2,4}+b/utf
\x{123}X\=P \x{123}X\=ps
Partial match: \x{123}X Partial match: \x{123}X
\x{123}X\x{123}\=P \x{123}X\x{123}\=ps
Partial match: \x{123}X\x{123} Partial match: \x{123}X\x{123}
\x{123}X\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}
\x{123}X\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}\x{123}
\x{123}X\x{123}\x{123}\x{123}\x{123}\=P \x{123}X\x{123}\x{123}\x{123}\x{123}\=ps
Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123} Partial match: \x{123}X\x{123}\x{123}\x{123}\x{123}
/\bthe cat\b/utf /\bthe cat\b/utf
the cat\=P the cat\=ps
0: the cat 0: the cat
the cat\=PP the cat\=ph
Partial match: the cat Partial match: the cat
/abcd*/utf /abcd*/utf
xxxxabcd\=P xxxxabcd\=ps
0: abcd 0: abcd
xxxxabcd\=PP xxxxabcd\=ph
Partial match: abcd Partial match: abcd
/abcd*/i,utf /abcd*/i,utf
xxxxabcd\=P xxxxabcd\=ps
0: abcd 0: abcd
xxxxabcd\=PP xxxxabcd\=ph
Partial match: abcd Partial match: abcd
XXXXABCD\=P XXXXABCD\=ps
0: ABCD 0: ABCD
XXXXABCD\=PP XXXXABCD\=ph
Partial match: ABCD Partial match: ABCD
/abc\d*/utf /abc\d*/utf
xxxxabc1\=P xxxxabc1\=ps
0: abc1 0: abc1
xxxxabc1\=PP xxxxabc1\=ph
Partial match: abc1 Partial match: abc1
/(a)bc\1*/utf /(a)bc\1*/utf
xxxxabca\=P xxxxabca\=ps
0: abca 0: abca
1: a 1: a
xxxxabca\=PP xxxxabca\=ph
Partial match: abca Partial match: abca
/abc[de]*/utf /abc[de]*/utf
xxxxabcde\=P xxxxabcde\=ps
0: abcde 0: abcde
xxxxabcde\=PP xxxxabcde\=ph
Partial match: abcde Partial match: abcde
/X\W{3}X/utf /X\W{3}X/utf
X\=P X\=ps
Partial match: X Partial match: X
/\sxxx\s/utf,tables=1 /\sxxx\s/utf,tables=1
@ -1412,19 +1412,19 @@ No last code unit
Subject length lower bound = 2 Subject length lower bound = 2
/f.*/ /f.*/
for\=PP for\=ph
Partial match: for Partial match: for
/f.*/s /f.*/s
for\=PP for\=ph
Partial match: for Partial match: for
/f.*/utf /f.*/utf
for\=PP for\=ph
Partial match: for Partial match: for
/f.*/s,utf /f.*/s,utf
for\=PP for\=ph
Partial match: for Partial match: for
/\x{d7ff}\x{e000}/utf /\x{d7ff}\x{e000}/utf
@ -1522,112 +1522,112 @@ Failed: error 173 at offset 7: disallowed Unicode code point (>= 0xd800 && <= 0x
0: \x{85}\x{0a}\x{0b}\x{0c}\x{0d} 0: \x{85}\x{0a}\x{0b}\x{0c}\x{0d}
/(..)\1/utf /(..)\1/utf
ab\=P ab\=ps
Partial match: ab Partial match: ab
aba\=P aba\=ps
Partial match: aba Partial match: aba
abab\=P abab\=ps
0: abab 0: abab
1: ab 1: ab
/(..)\1/i,utf /(..)\1/i,utf
ab\=P ab\=ps
Partial match: ab Partial match: ab
abA\=P abA\=ps
Partial match: abA Partial match: abA
aBAb\=P aBAb\=ps
0: aBAb 0: aBAb
1: aB 1: aB
/(..)\1{2,}/utf /(..)\1{2,}/utf
ab\=P ab\=ps
Partial match: ab Partial match: ab
aba\=P aba\=ps
Partial match: aba Partial match: aba
abab\=P abab\=ps
Partial match: abab Partial match: abab
ababa\=P ababa\=ps
Partial match: ababa Partial match: ababa
ababab\=P ababab\=ps
0: ababab 0: ababab
1: ab 1: ab
ababab\=PP ababab\=ph
Partial match: ababab Partial match: ababab
abababa\=P abababa\=ps
0: ababab 0: ababab
1: ab 1: ab
abababa\=PP abababa\=ph
Partial match: abababa Partial match: abababa
/(..)\1{2,}/i,utf /(..)\1{2,}/i,utf
ab\=P ab\=ps
Partial match: ab Partial match: ab
aBa\=P aBa\=ps
Partial match: aBa Partial match: aBa
aBAb\=P aBAb\=ps
Partial match: aBAb Partial match: aBAb
AbaBA\=P AbaBA\=ps
Partial match: AbaBA Partial match: AbaBA
abABAb\=P abABAb\=ps
0: abABAb 0: abABAb
1: ab 1: ab
aBAbaB\=PP aBAbaB\=ph
Partial match: aBAbaB Partial match: aBAbaB
abABabA\=P abABabA\=ps
0: abABab 0: abABab
1: ab 1: ab
abaBABa\=PP abaBABa\=ph
Partial match: abaBABa Partial match: abaBABa
/(..)\1{2,}?x/i,utf /(..)\1{2,}?x/i,utf
ab\=P ab\=ps
Partial match: ab Partial match: ab
abA\=P abA\=ps
Partial match: abA Partial match: abA
aBAb\=P aBAb\=ps
Partial match: aBAb Partial match: aBAb
abaBA\=P abaBA\=ps
Partial match: abaBA Partial match: abaBA
abAbaB\=P abAbaB\=ps
Partial match: abAbaB Partial match: abAbaB
abaBabA\=P abaBabA\=ps
Partial match: abaBabA Partial match: abaBabA
abAbABaBx\=P abAbABaBx\=ps
0: abAbABaBx 0: abAbABaBx
1: ab 1: ab
/./utf,newline=crlf /./utf,newline=crlf
\r\=P \r\=ps
0: \x{0d} 0: \x{0d}
\r\=PP \r\=ph
Partial match: \x{0d} Partial match: \x{0d}
/.{2,3}/utf,newline=crlf /.{2,3}/utf,newline=crlf
\r\=P \r\=ps
Partial match: \x{0d} Partial match: \x{0d}
\r\=PP \r\=ph
Partial match: \x{0d} Partial match: \x{0d}
\r\r\=P \r\r\=ps
0: \x{0d}\x{0d} 0: \x{0d}\x{0d}
\r\r\=PP \r\r\=ph
Partial match: \x{0d}\x{0d} Partial match: \x{0d}\x{0d}
\r\r\r\=P \r\r\r\=ps
0: \x{0d}\x{0d}\x{0d} 0: \x{0d}\x{0d}\x{0d}
\r\r\r\=PP \r\r\r\=ph
Partial match: \x{0d}\x{0d}\x{0d} Partial match: \x{0d}\x{0d}\x{0d}
/.{2,3}?/utf,newline=crlf /.{2,3}?/utf,newline=crlf
\r\=P \r\=ps
Partial match: \x{0d} Partial match: \x{0d}
\r\=PP \r\=ph
Partial match: \x{0d} Partial match: \x{0d}
\r\r\=P \r\r\=ps
0: \x{0d}\x{0d} 0: \x{0d}\x{0d}
\r\r\=PP \r\r\=ph
Partial match: \x{0d}\x{0d} Partial match: \x{0d}\x{0d}
\r\r\r\=P \r\r\r\=ps
0: \x{0d}\x{0d} 0: \x{0d}\x{0d}
\r\r\r\=PP \r\r\r\=ph
0: \x{0d}\x{0d} 0: \x{0d}\x{0d}
/[^\x{100}][^\x{1234}][^\x{ffff}][^\x{10000}][^\x{10ffff}]/B,utf /[^\x{100}][^\x{1234}][^\x{ffff}][^\x{10000}][^\x{10ffff}]/B,utf
@ -2915,41 +2915,41 @@ No match
Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion
/\X/ /\X/
a\=P a\=ps
0: a 0: a
a\=PP a\=ph
Partial match: a Partial match: a
/\Xa/ /\Xa/
aa\=P aa\=ps
0: aa 0: aa
aa\=PP aa\=ph
0: aa 0: aa
/\X{2}/ /\X{2}/
aa\=P aa\=ps
0: aa 0: aa
aa\=PP aa\=ph
Partial match: aa Partial match: aa
/\X+a/ /\X+a/
a\=P a\=ps
Partial match: a Partial match: a
aa\=P aa\=ps
0: aa 0: aa
aa\=PP aa\=ph
Partial match: aa Partial match: aa
/\X+?a/ /\X+?a/
a\=P a\=ps
Partial match: a Partial match: a
ab\=P ab\=ps
Partial match: ab Partial match: ab
aa\=P aa\=ps
0: aa 0: aa
aa\=PP aa\=ph
0: aa 0: aa
aba\=P aba\=ps
0: aba 0: aba
# These Unicode 6.1.0 scripts are not known to Perl. # These Unicode 6.1.0 scripts are not known to Perl.
@ -2963,57 +2963,57 @@ Partial match: ab
0: \x{11680}\x{116c0} 0: \x{11680}\x{116c0}
/^\X/utf /^\X/utf
A\=P A\=ps
0: A 0: A
A\=PP A\=ph
Partial match: A Partial match: A
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
0: A\x{300}\x{301} 0: A\x{300}\x{301}
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301} Partial match: A\x{300}\x{301}
A\x{301}\=P A\x{301}\=ps
0: A\x{301} 0: A\x{301}
A\x{301}\=PP A\x{301}\=ph
Partial match: A\x{301} Partial match: A\x{301}
/^\X{2,3}/utf /^\X{2,3}/utf
A\=P A\=ps
Partial match: A Partial match: A
A\=PP A\=ph
Partial match: A Partial match: A
AA\=P AA\=ps
0: AA 0: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
Partial match: A\x{300}\x{301} Partial match: A\x{300}\x{301}
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301} Partial match: A\x{300}\x{301}
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
0: A\x{300}\x{301}A\x{300}\x{301} 0: A\x{300}\x{301}A\x{300}\x{301}
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301}A\x{300}\x{301} Partial match: A\x{300}\x{301}A\x{300}\x{301}
/^\X{2}/utf /^\X{2}/utf
AA\=P AA\=ps
0: AA 0: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
0: A\x{300}\x{301}A\x{300}\x{301} 0: A\x{300}\x{301}A\x{300}\x{301}
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301}A\x{300}\x{301} Partial match: A\x{300}\x{301}A\x{300}\x{301}
/^\X+/utf /^\X+/utf
AA\=P AA\=ps
0: AA 0: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
/^\X+?Z/utf /^\X+?Z/utf
AA\=P AA\=ps
Partial match: AA Partial match: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
/A\x{3a3}B/IBi,utf /A\x{3a3}B/IBi,utf

250
testdata/testoutput6 vendored
View File

@ -900,77 +900,77 @@ No match
No match No match
/^abcdef/ /^abcdef/
ab\=P ab\=ps
Partial match: ab Partial match: ab
abcde\=P abcde\=ps
Partial match: abcde Partial match: abcde
abcdef\=P abcdef\=ps
0: abcdef 0: abcdef
*** Failers *** Failers
No match No match
abx\=P abx\=ps
No match No match
/^a{2,4}\d+z/ /^a{2,4}\d+z/
a\=P a\=ps
Partial match: a Partial match: a
aa\=P aa\=ps
Partial match: aa Partial match: aa
aa2\=P aa2\=ps
Partial match: aa2 Partial match: aa2
aaa\=P aaa\=ps
Partial match: aaa Partial match: aaa
aaa23\=P aaa23\=ps
Partial match: aaa23 Partial match: aaa23
aaaa12345\=P aaaa12345\=ps
Partial match: aaaa12345 Partial match: aaaa12345
aa0z\=P aa0z\=ps
0: aa0z 0: aa0z
aaaa4444444444444z\=P aaaa4444444444444z\=ps
0: aaaa4444444444444z 0: aaaa4444444444444z
*** Failers *** Failers
No match No match
az\=P az\=ps
No match No match
aaaaa\=P aaaaa\=ps
No match No match
a56\=P a56\=ps
No match No match
/^abcdef/ /^abcdef/
abc\=P abc\=ps
Partial match: abc Partial match: abc
def\=dfa_restart def\=dfa_restart
0: def 0: def
/(?<=foo)bar/ /(?<=foo)bar/
xyzfo\=P xyzfo\=ps
No match No match
foob\=P,offset=2 foob\=ps,offset=2
Partial match at offset 3: foob Partial match at offset 3: foob
foobar...\=P,dfa_restart,offset=4 foobar...\=ps,dfa_restart,offset=4
0: ar 0: ar
xyzfo\=P xyzfo\=ps
No match No match
foobar\=offset=2 foobar\=offset=2
0: bar 0: bar
*** Failers *** Failers
No match No match
xyzfo\=P xyzfo\=ps
No match No match
obar\=dfa_restart obar\=dfa_restart
No match No match
/(ab*(cd|ef))+X/ /(ab*(cd|ef))+X/
adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=P,noteol adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\=ps,noteol
No match No match
lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=P,notbol,noteol lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\=ps,notbol,noteol
Partial match: abbbbbbcdaefabbbbbbbefa Partial match: abbbbbbcdaefabbbbbbbefa
cdabbbbbbbb\=P,notbol,dfa_restart,noteol cdabbbbbbbb\=ps,notbol,dfa_restart,noteol
Partial match: cdabbbbbbbb Partial match: cdabbbbbbbb
efabbbbbbbbbbbbbbbb\=P,notbol,dfa_restart,noteol efabbbbbbbbbbbbbbbb\=ps,notbol,dfa_restart,noteol
Partial match: efabbbbbbbbbbbbbbbb Partial match: efabbbbbbbbbbbbbbbb
bbbbbbbbbbbbcdXyasdfadf\=P,notbol,dfa_restart,noteol bbbbbbbbbbbbcdXyasdfadf\=ps,notbol,dfa_restart,noteol
0: bbbbbbbbbbbbcdX 0: bbbbbbbbbbbbcdX
/the quick brown fox/ /the quick brown fox/
@ -6163,15 +6163,15 @@ No match
No match No match
/1234/ /1234/
123\=P 123\=ps
Partial match: 123 Partial match: 123
a4\=P,dfa_restart a4\=ps,dfa_restart
No match No match
/1234/ /1234/
123\=P 123\=ps
Partial match: 123 Partial match: 123
4\=P,dfa_restart 4\=ps,dfa_restart
0: 4 0: 4
/^/gm /^/gm
@ -6987,77 +6987,77 @@ No match
0: "ab" 0: "ab"
/\d+X|9+Y/ /\d+X|9+Y/
++++123999\=P ++++123999\=ps
Partial match: 123999 Partial match: 123999
++++123999Y\=P ++++123999Y\=ps
0: 999Y 0: 999Y
/Z(*F)/ /Z(*F)/
Z\=P Z\=ps
No match No match
ZA\=P ZA\=ps
No match No match
/Z(?!)/ /Z(?!)/
Z\=P Z\=ps
No match No match
ZA\=P ZA\=ps
No match No match
/dog(sbody)?/ /dog(sbody)?/
dogs\=P dogs\=ps
0: dog 0: dog
dogs\=PP dogs\=ph
Partial match: dogs Partial match: dogs
/dog(sbody)??/ /dog(sbody)??/
dogs\=P dogs\=ps
0: dog 0: dog
dogs\=PP dogs\=ph
Partial match: dogs Partial match: dogs
/dog|dogsbody/ /dog|dogsbody/
dogs\=P dogs\=ps
0: dog 0: dog
dogs\=PP dogs\=ph
Partial match: dogs Partial match: dogs
/dogsbody|dog/ /dogsbody|dog/
dogs\=P dogs\=ps
0: dog 0: dog
dogs\=PP dogs\=ph
Partial match: dogs Partial match: dogs
/Z(*F)Q|ZXY/ /Z(*F)Q|ZXY/
Z\=P Z\=ps
Partial match: Z Partial match: Z
ZA\=P ZA\=ps
No match No match
X\=P X\=ps
No match No match
/\bthe cat\b/ /\bthe cat\b/
the cat\=P the cat\=ps
0: the cat 0: the cat
the cat\=PP the cat\=ph
Partial match: the cat Partial match: the cat
/dog(sbody)?/ /dog(sbody)?/
dogs\=P dogs\=ps
0: dog 0: dog
body\=dfa_restart body\=dfa_restart
0: body 0: body
/dog(sbody)?/ /dog(sbody)?/
dogs\=PP dogs\=ph
Partial match: dogs Partial match: dogs
body\=dfa_restart body\=dfa_restart
0: body 0: body
/abc/ /abc/
abc\=P abc\=ps
0: abc 0: abc
abc\=PP abc\=ph
0: abc 0: abc
/abc\K123/ /abc\K123/
@ -7067,17 +7067,17 @@ Failed: error -41: item unsupported for DFA matching
/(?<=abc)123/ /(?<=abc)123/
xyzabc123pqr xyzabc123pqr
0: 123 0: 123
xyzabc12\=P xyzabc12\=ps
Partial match at offset 6: abc12 Partial match at offset 6: abc12
xyzabc12\=PP xyzabc12\=ph
Partial match at offset 6: abc12 Partial match at offset 6: abc12
/\babc\b/ /\babc\b/
+++abc+++ +++abc+++
0: abc 0: abc
+++ab\=P +++ab\=ps
Partial match at offset 3: +ab Partial match at offset 3: +ab
+++ab\=PP +++ab\=ph
Partial match at offset 3: +ab Partial match at offset 3: +ab
/(?=C)/g,aftertext /(?=C)/g,aftertext
@ -7130,40 +7130,40 @@ No match
No match No match
/abcd*/aftertext /abcd*/aftertext
xxxxabcd\=P xxxxabcd\=ps
0: abcd 0: abcd
0+ 0+
xxxxabcd\=PP xxxxabcd\=ph
Partial match: abcd Partial match: abcd
dddxxx\=dfa_restart dddxxx\=dfa_restart
0: ddd 0: ddd
0+ xxx 0+ xxx
xxxxabcd\=PP xxxxabcd\=ph
Partial match: abcd Partial match: abcd
xxx\=dfa_restart xxx\=dfa_restart
0: 0:
0+ xxx 0+ xxx
/abcd*/i /abcd*/i
xxxxabcd\=P xxxxabcd\=ps
0: abcd 0: abcd
xxxxabcd\=PP xxxxabcd\=ph
Partial match: abcd Partial match: abcd
XXXXABCD\=P XXXXABCD\=ps
0: ABCD 0: ABCD
XXXXABCD\=PP XXXXABCD\=ph
Partial match: ABCD Partial match: ABCD
/abc\d*/ /abc\d*/
xxxxabc1\=P xxxxabc1\=ps
0: abc1 0: abc1
xxxxabc1\=PP xxxxabc1\=ph
Partial match: abc1 Partial match: abc1
/abc[de]*/ /abc[de]*/
xxxxabcde\=P xxxxabcde\=ps
0: abcde 0: abcde
xxxxabcde\=PP xxxxabcde\=ph
Partial match: abcde Partial match: abcde
/(?:(?1)|B)(A(*F)|C)/ /(?:(?1)|B)(A(*F)|C)/
@ -7217,15 +7217,15 @@ Failed: error -41: item unsupported for DFA matching
Failed: error -41: item unsupported for DFA matching Failed: error -41: item unsupported for DFA matching
/(?<=abc)def/ /(?<=abc)def/
abc\=PP abc\=ph
Partial match at offset 3: abc Partial match at offset 3: abc
/abc$/ /abc$/
abc abc
0: abc 0: abc
abc\=P abc\=ps
0: abc 0: abc
abc\=PP abc\=ph
Partial match: abc Partial match: abc
/abc$/m /abc$/m
@ -7233,45 +7233,45 @@ Partial match: abc
0: abc 0: abc
abc\n abc\n
0: abc 0: abc
abc\=PP abc\=ph
Partial match: abc Partial match: abc
abc\n\=PP abc\n\=ph
0: abc 0: abc
abc\=P abc\=ps
0: abc 0: abc
abc\n\=P abc\n\=ps
0: abc 0: abc
/abc\z/ /abc\z/
abc abc
0: abc 0: abc
abc\=P abc\=ps
0: abc 0: abc
abc\=PP abc\=ph
Partial match: abc Partial match: abc
/abc\Z/ /abc\Z/
abc abc
0: abc 0: abc
abc\=P abc\=ps
0: abc 0: abc
abc\=PP abc\=ph
Partial match: abc Partial match: abc
/abc\b/ /abc\b/
abc abc
0: abc 0: abc
abc\=P abc\=ps
0: abc 0: abc
abc\=PP abc\=ph
Partial match: abc Partial match: abc
/abc\B/ /abc\B/
abc abc
No match No match
abc\=P abc\=ps
Partial match: abc Partial match: abc
abc\=PP abc\=ph
Partial match: abc Partial match: abc
/.+/ /.+/
@ -7453,23 +7453,23 @@ Matched, but offsets vector is too small to show all matches
0: X 0: X
/^\R/ /^\R/
\r\=P \r\=ps
0: \x0d 0: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
/^\R{2,3}x/ /^\R{2,3}x/
\r\=P \r\=ps
Partial match: \x0d Partial match: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
\r\r\=P \r\r\=ps
Partial match: \x0d\x0d Partial match: \x0d\x0d
\r\r\=PP \r\r\=ph
Partial match: \x0d\x0d Partial match: \x0d\x0d
\r\r\r\=P \r\r\r\=ps
Partial match: \x0d\x0d\x0d Partial match: \x0d\x0d\x0d
\r\r\r\=PP \r\r\r\=ph
Partial match: \x0d\x0d\x0d Partial match: \x0d\x0d\x0d
\r\rx \r\rx
0: \x0d\x0dx 0: \x0d\x0dx
@ -7477,17 +7477,17 @@ Partial match: \x0d\x0d\x0d
0: \x0d\x0d\x0dx 0: \x0d\x0d\x0dx
/^\R{2,3}?x/ /^\R{2,3}?x/
\r\=P \r\=ps
Partial match: \x0d Partial match: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
\r\r\=P \r\r\=ps
Partial match: \x0d\x0d Partial match: \x0d\x0d
\r\r\=PP \r\r\=ph
Partial match: \x0d\x0d Partial match: \x0d\x0d
\r\r\r\=P \r\r\r\=ps
Partial match: \x0d\x0d\x0d Partial match: \x0d\x0d\x0d
\r\r\r\=PP \r\r\r\=ph
Partial match: \x0d\x0d\x0d Partial match: \x0d\x0d\x0d
\r\rx \r\rx
0: \x0d\x0dx 0: \x0d\x0dx
@ -7495,9 +7495,9 @@ Partial match: \x0d\x0d\x0d
0: \x0d\x0d\x0dx 0: \x0d\x0d\x0dx
/^\R?x/ /^\R?x/
\r\=P \r\=ps
Partial match: \x0d Partial match: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
x x
0: x 0: x
@ -7505,74 +7505,74 @@ Partial match: \x0d
0: \x0dx 0: \x0dx
/^\R+x/ /^\R+x/
\r\=P \r\=ps
Partial match: \x0d Partial match: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
\r\n\=P \r\n\=ps
Partial match: \x0d\x0a Partial match: \x0d\x0a
\r\n\=PP \r\n\=ph
Partial match: \x0d\x0a Partial match: \x0d\x0a
\rx \rx
0: \x0dx 0: \x0dx
/^a$/newline=crlf /^a$/newline=crlf
a\r\=P a\r\=ps
Partial match: a\x0d Partial match: a\x0d
a\r\=PP a\r\=ph
Partial match: a\x0d Partial match: a\x0d
/^a$/m,newline=crlf /^a$/m,newline=crlf
a\r\=P a\r\=ps
Partial match: a\x0d Partial match: a\x0d
a\r\=PP a\r\=ph
Partial match: a\x0d Partial match: a\x0d
/^(a$|a\r)/newline=crlf /^(a$|a\r)/newline=crlf
a\r\=P a\r\=ps
0: a\x0d 0: a\x0d
a\r\=PP a\r\=ph
Partial match: a\x0d Partial match: a\x0d
/^(a$|a\r)/m,newline=crlf /^(a$|a\r)/m,newline=crlf
a\r\=P a\r\=ps
0: a\x0d 0: a\x0d
a\r\=PP a\r\=ph
Partial match: a\x0d Partial match: a\x0d
/./newline=crlf /./newline=crlf
\r\=P \r\=ps
0: \x0d 0: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
/.{2,3}/newline=crlf /.{2,3}/newline=crlf
\r\=P \r\=ps
Partial match: \x0d Partial match: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
\r\r\=P \r\r\=ps
0: \x0d\x0d 0: \x0d\x0d
\r\r\=PP \r\r\=ph
Partial match: \x0d\x0d Partial match: \x0d\x0d
\r\r\r\=P \r\r\r\=ps
0: \x0d\x0d\x0d 0: \x0d\x0d\x0d
\r\r\r\=PP \r\r\r\=ph
Partial match: \x0d\x0d\x0d Partial match: \x0d\x0d\x0d
/.{2,3}?/newline=crlf /.{2,3}?/newline=crlf
\r\=P \r\=ps
Partial match: \x0d Partial match: \x0d
\r\=PP \r\=ph
Partial match: \x0d Partial match: \x0d
\r\r\=P \r\r\=ps
0: \x0d\x0d 0: \x0d\x0d
\r\r\=PP \r\r\=ph
Partial match: \x0d\x0d Partial match: \x0d\x0d
\r\r\r\=P \r\r\r\=ps
0: \x0d\x0d\x0d 0: \x0d\x0d\x0d
1: \x0d\x0d 1: \x0d\x0d
\r\r\r\=PP \r\r\r\=ph
Partial match: \x0d\x0d\x0d Partial match: \x0d\x0d\x0d
# Test simple validity check for restarts # Test simple validity check for restarts

96
testdata/testoutput7 vendored
View File

@ -1193,37 +1193,37 @@ No match
0: X 0: X
/abcd*/utf /abcd*/utf
xxxxabcd\=P xxxxabcd\=ps
0: abcd 0: abcd
xxxxabcd\=PP xxxxabcd\=ph
Partial match: abcd Partial match: abcd
/abcd*/i,utf /abcd*/i,utf
xxxxabcd\=P xxxxabcd\=ps
0: abcd 0: abcd
xxxxabcd\=PP xxxxabcd\=ph
Partial match: abcd Partial match: abcd
XXXXABCD\=P XXXXABCD\=ps
0: ABCD 0: ABCD
XXXXABCD\=PP XXXXABCD\=ph
Partial match: ABCD Partial match: ABCD
/abc\d*/utf /abc\d*/utf
xxxxabc1\=P xxxxabc1\=ps
0: abc1 0: abc1
xxxxabc1\=PP xxxxabc1\=ph
Partial match: abc1 Partial match: abc1
/abc[de]*/utf /abc[de]*/utf
xxxxabcde\=P xxxxabcde\=ps
0: abcde 0: abcde
xxxxabcde\=PP xxxxabcde\=ph
Partial match: abcde Partial match: abcde
/\bthe cat\b/utf /\bthe cat\b/utf
the cat\=P the cat\=ps
0: the cat 0: the cat
the cat\=PP the cat\=ph
Partial match: the cat Partial match: the cat
/ab\Cde/utf /ab\Cde/utf
@ -1234,38 +1234,38 @@ Failed: error -41: item unsupported for DFA matching
Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion Failed: error 136 at offset 10: \C is not allowed in a lookbehind assertion
/./newline=crlf,utf /./newline=crlf,utf
\r\=P \r\=ps
0: \x{0d} 0: \x{0d}
\r\=PP \r\=ph
Partial match: \x{0d} Partial match: \x{0d}
/.{2,3}/newline=crlf,utf /.{2,3}/newline=crlf,utf
\r\=P \r\=ps
Partial match: \x{0d} Partial match: \x{0d}
\r\=PP \r\=ph
Partial match: \x{0d} Partial match: \x{0d}
\r\r\=P \r\r\=ps
0: \x{0d}\x{0d} 0: \x{0d}\x{0d}
\r\r\=PP \r\r\=ph
Partial match: \x{0d}\x{0d} Partial match: \x{0d}\x{0d}
\r\r\r\=P \r\r\r\=ps
0: \x{0d}\x{0d}\x{0d} 0: \x{0d}\x{0d}\x{0d}
\r\r\r\=PP \r\r\r\=ph
Partial match: \x{0d}\x{0d}\x{0d} Partial match: \x{0d}\x{0d}\x{0d}
/.{2,3}?/newline=crlf,utf /.{2,3}?/newline=crlf,utf
\r\=P \r\=ps
Partial match: \x{0d} Partial match: \x{0d}
\r\=PP \r\=ph
Partial match: \x{0d} Partial match: \x{0d}
\r\r\=P \r\r\=ps
0: \x{0d}\x{0d} 0: \x{0d}\x{0d}
\r\r\=PP \r\r\=ph
Partial match: \x{0d}\x{0d} Partial match: \x{0d}\x{0d}
\r\r\r\=P \r\r\r\=ps
0: \x{0d}\x{0d}\x{0d} 0: \x{0d}\x{0d}\x{0d}
1: \x{0d}\x{0d} 1: \x{0d}\x{0d}
\r\r\r\=PP \r\r\r\=ph
Partial match: \x{0d}\x{0d}\x{0d} Partial match: \x{0d}\x{0d}\x{0d}
/[^\x{100}]/utf /[^\x{100}]/utf
@ -3106,57 +3106,57 @@ No match
0: XX 0: XX
/^\X/utf /^\X/utf
A\=P A\=ps
0: A 0: A
A\=PP A\=ph
Partial match: A Partial match: A
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
0: A\x{300}\x{301} 0: A\x{300}\x{301}
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301} Partial match: A\x{300}\x{301}
A\x{301}\=P A\x{301}\=ps
0: A\x{301} 0: A\x{301}
A\x{301}\=PP A\x{301}\=ph
Partial match: A\x{301} Partial match: A\x{301}
/^\X{2,3}/utf /^\X{2,3}/utf
A\=P A\=ps
Partial match: A Partial match: A
A\=PP A\=ph
Partial match: A Partial match: A
AA\=P AA\=ps
0: AA 0: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
A\x{300}\x{301}\=P A\x{300}\x{301}\=ps
Partial match: A\x{300}\x{301} Partial match: A\x{300}\x{301}
A\x{300}\x{301}\=PP A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301} Partial match: A\x{300}\x{301}
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
0: A\x{300}\x{301}A\x{300}\x{301} 0: A\x{300}\x{301}A\x{300}\x{301}
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301}A\x{300}\x{301} Partial match: A\x{300}\x{301}A\x{300}\x{301}
/^\X{2}/utf /^\X{2}/utf
AA\=P AA\=ps
0: AA 0: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
A\x{300}\x{301}A\x{300}\x{301}\=P A\x{300}\x{301}A\x{300}\x{301}\=ps
0: A\x{300}\x{301}A\x{300}\x{301} 0: A\x{300}\x{301}A\x{300}\x{301}
A\x{300}\x{301}A\x{300}\x{301}\=PP A\x{300}\x{301}A\x{300}\x{301}\=ph
Partial match: A\x{300}\x{301}A\x{300}\x{301} Partial match: A\x{300}\x{301}A\x{300}\x{301}
/^\X+/utf /^\X+/utf
AA\=P AA\=ps
0: AA 0: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
/^\X+?Z/utf /^\X+?Z/utf
AA\=P AA\=ps
Partial match: AA Partial match: AA
AA\=PP AA\=ph
Partial match: AA Partial match: AA
# These are tests for extended grapheme clusters # These are tests for extended grapheme clusters