Add possessive quantifiers to regex engine.
[p5sagit/p5-mst-13.2.git] / t / op / re_tests
index 7009596..dbbe993 100644 (file)
@@ -1,24 +1,54 @@
 abc    abc     y       $&      abc
+abc    abc     y       $-[0]   0
+abc    abc     y       $+[0]   3
 abc    xbc     n       -       -
 abc    axc     n       -       -
 abc    abx     n       -       -
 abc    xabcy   y       $&      abc
+abc    xabcy   y       $-[0]   1
+abc    xabcy   y       $+[0]   4
 abc    ababc   y       $&      abc
+abc    ababc   y       $-[0]   2
+abc    ababc   y       $+[0]   5
 ab*c   abc     y       $&      abc
+ab*c   abc     y       $-[0]   0
+ab*c   abc     y       $+[0]   3
 ab*bc  abc     y       $&      abc
+ab*bc  abc     y       $-[0]   0
+ab*bc  abc     y       $+[0]   3
 ab*bc  abbc    y       $&      abbc
+ab*bc  abbc    y       $-[0]   0
+ab*bc  abbc    y       $+[0]   4
 ab*bc  abbbbc  y       $&      abbbbc
+ab*bc  abbbbc  y       $-[0]   0
+ab*bc  abbbbc  y       $+[0]   6
 .{1}   abbbbc  y       $&      a
+.{1}   abbbbc  y       $-[0]   0
+.{1}   abbbbc  y       $+[0]   1
 .{3,4} abbbbc  y       $&      abbb
+.{3,4} abbbbc  y       $-[0]   0
+.{3,4} abbbbc  y       $+[0]   4
 ab{0,}bc       abbbbc  y       $&      abbbbc
+ab{0,}bc       abbbbc  y       $-[0]   0
+ab{0,}bc       abbbbc  y       $+[0]   6
 ab+bc  abbc    y       $&      abbc
+ab+bc  abbc    y       $-[0]   0
+ab+bc  abbc    y       $+[0]   4
 ab+bc  abc     n       -       -
 ab+bc  abq     n       -       -
 ab{1,}bc       abq     n       -       -
 ab+bc  abbbbc  y       $&      abbbbc
+ab+bc  abbbbc  y       $-[0]   0
+ab+bc  abbbbc  y       $+[0]   6
 ab{1,}bc       abbbbc  y       $&      abbbbc
+ab{1,}bc       abbbbc  y       $-[0]   0
+ab{1,}bc       abbbbc  y       $+[0]   6
 ab{1,3}bc      abbbbc  y       $&      abbbbc
+ab{1,3}bc      abbbbc  y       $-[0]   0
+ab{1,3}bc      abbbbc  y       $+[0]   6
 ab{3,4}bc      abbbbc  y       $&      abbbbc
+ab{3,4}bc      abbbbc  y       $-[0]   0
+ab{3,4}bc      abbbbc  y       $+[0]   6
 ab{4,5}bc      abbbbc  n       -       -
 ab?bc  abbc    y       $&      abbc
 ab?bc  abc     y       $&      abc
@@ -40,14 +70,19 @@ a.*c        axyzc   y       $&      axyzc
 a.*c   axyzd   n       -       -
 a[bc]d abc     n       -       -
 a[bc]d abd     y       $&      abd
+a[b]d  abd     y       $&      abd
+[a][b][d]      abd     y       $&      abd
+.[b].  abd     y       $&      abd
+.[b].  aBd     n       -       -
+(?i:.[b].)     abd     y       $&      abd
 a[b-d]e        abd     n       -       -
 a[b-d]e        ace     y       $&      ace
 a[b-d] aac     y       $&      ac
 a[-b]  a-      y       $&      a-
 a[b-]  a-      y       $&      a-
-a[b-a] -       c       -       /a[b-a]/: invalid [] range in regexp
-a[]b   -       c       -       /a[]b/: unmatched [] in regexp
-a[     -       c       -       /a[/: unmatched [] in regexp
+a[b-a] -       c       -       Invalid [] range \"b-a\"
+a[]b   -       c       -       Unmatched [
+a[     -       c       -       Unmatched [
 a]     a]      y       $&      a]
 a[]]b  a]b     y       $&      a]b
 a[^bc]d        aed     y       $&      aed
@@ -66,6 +101,9 @@ a[^]b]c      adc     y       $&      adc
 \Ba\B  -a      n       -       -
 \Ba\B  -a-     n       -       -
 \By\b  xy      y       -       -
+\By\b  xy      y       $-[0]   1
+\By\b  xy      y       $+[0]   2
+\By\b  xy      y       -       -
 \by\B  yz      y       -       -
 \By\B  xyz     y       -       -
 \w     a       y       -       -
@@ -95,29 +133,43 @@ a[\S]b     a-b     y       -       -
 ab|cd  abc     y       $&      ab
 ab|cd  abcd    y       $&      ab
 ()ef   def     y       $&-$1   ef-
-*a     -       c       -       /*a/: ?+*{} follows nothing in regexp
-(*)b   -       c       -       /(*)b/: ?+*{} follows nothing in regexp
+()ef   def     y       $-[0]   1
+()ef   def     y       $+[0]   3
+()ef   def     y       $-[1]   1
+()ef   def     y       $+[1]   1
+*a     -       c       -       Quantifier follows nothing
+(*)b   -       c       -       Quantifier follows nothing
 $b     b       n       -       -
 a\     -       c       -       Search pattern not terminated
 a\(b   a(b     y       $&-$1   a(b-
 a\(*b  ab      y       $&      ab
 a\(*b  a((b    y       $&      a((b
-a\\b   a\b     y       $&      a\b
-abc)   -       c       -       /abc)/: unmatched () in regexp
-(abc   -       c       -       /(abc/: unmatched () in regexp
+a\\b   a\\b    y       $&      a\\b
+abc)   -       c       -       Unmatched )
+(abc   -       c       -       Unmatched (
 ((a))  abc     y       $&-$1-$2        a-a-a
+((a))  abc     y       $-[0]-$-[1]-$-[2]       0-0-0
+((a))  abc     y       $+[0]-$+[1]-$+[2]       1-1-1
+((a))  abc     b       @-      0 0 0
+((a))  abc     b       @+      1 1 1
 (a)b(c)        abc     y       $&-$1-$2        abc-a-c
+(a)b(c)        abc     y       $-[0]-$-[1]-$-[2]       0-0-2
+(a)b(c)        abc     y       $+[0]-$+[1]-$+[2]       3-1-3
 a+b+c  aabbabc y       $&      abc
 a{1,}b{1,}c    aabbabc y       $&      abc
-a**    -       c       -       /a**/: nested *?+ in regexp
+a**    -       c       -       Nested quantifiers
 a.+?c  abcabc  y       $&      abc
 (a+|b)*        ab      y       $&-$1   ab-b
+(a+|b)*        ab      y       $-[0]   0
+(a+|b)*        ab      y       $+[0]   2
+(a+|b)*        ab      y       $-[1]   1
+(a+|b)*        ab      y       $+[1]   2
 (a+|b){0,}     ab      y       $&-$1   ab-b
 (a+|b)+        ab      y       $&-$1   ab-b
 (a+|b){1,}     ab      y       $&-$1   ab-b
 (a+|b)?        ab      y       $&-$1   a-a
 (a+|b){0,1}    ab      y       $&-$1   a-a
-)(     -       c       -       /)(/: unmatched () in regexp
+)(     -       c       -       Unmatched )
 [^ab]* cde     y       $&      cde
 abc            n       -       -
 a*             y       $&      
@@ -125,6 +177,10 @@ a*         y       $&
 ([abc])*bcd    abcd    y       $&-$1   abcd-a
 a|b|c|d|e      e       y       $&      e
 (a|b|c|d|e)f   ef      y       $&-$1   ef-e
+(a|b|c|d|e)f   ef      y       $-[0]   0
+(a|b|c|d|e)f   ef      y       $+[0]   2
+(a|b|c|d|e)f   ef      y       $-[1]   0
+(a|b|c|d|e)f   ef      y       $+[1]   1
 abcd*efg       abcdefg y       $&      abcdefg
 ab*    xabyabbbz       y       $&      ab
 ab*    xayabbbz        y       $&      a
@@ -136,12 +192,38 @@ ab*       xayabbbz        y       $&      a
 (ab|ab*)bc     abc     y       $&-$1   abc-a
 a([bc]*)c*     abc     y       $&-$1   abc-bc
 a([bc]*)(c*d)  abcd    y       $&-$1-$2        abcd-bc-d
+a([bc]*)(c*d)  abcd    y       $-[0]   0
+a([bc]*)(c*d)  abcd    y       $+[0]   4
+a([bc]*)(c*d)  abcd    y       $-[1]   1
+a([bc]*)(c*d)  abcd    y       $+[1]   3
+a([bc]*)(c*d)  abcd    y       $-[2]   3
+a([bc]*)(c*d)  abcd    y       $+[2]   4
 a([bc]+)(c*d)  abcd    y       $&-$1-$2        abcd-bc-d
 a([bc]*)(c+d)  abcd    y       $&-$1-$2        abcd-b-cd
+a([bc]*)(c+d)  abcd    y       $-[0]   0
+a([bc]*)(c+d)  abcd    y       $+[0]   4
+a([bc]*)(c+d)  abcd    y       $-[1]   1
+a([bc]*)(c+d)  abcd    y       $+[1]   2
+a([bc]*)(c+d)  abcd    y       $-[2]   2
+a([bc]*)(c+d)  abcd    y       $+[2]   4
 a[bcd]*dcdcde  adcdcde y       $&      adcdcde
 a[bcd]+dcdcde  adcdcde n       -       -
 (ab|a)b*c      abc     y       $&-$1   abc-ab
+(ab|a)b*c      abc     y       $-[0]   0
+(ab|a)b*c      abc     y       $+[0]   3
+(ab|a)b*c      abc     y       $-[1]   0
+(ab|a)b*c      abc     y       $+[1]   2
 ((a)(b)c)(d)   abcd    y       $1-$2-$3-$4     abc-a-b-d
+((a)(b)c)(d)   abcd    y       $-[0]   0
+((a)(b)c)(d)   abcd    y       $+[0]   4
+((a)(b)c)(d)   abcd    y       $-[1]   0
+((a)(b)c)(d)   abcd    y       $+[1]   3
+((a)(b)c)(d)   abcd    y       $-[2]   0
+((a)(b)c)(d)   abcd    y       $+[2]   1
+((a)(b)c)(d)   abcd    y       $-[3]   1
+((a)(b)c)(d)   abcd    y       $+[3]   2
+((a)(b)c)(d)   abcd    y       $-[4]   3
+((a)(b)c)(d)   abcd    y       $+[4]   4
 [a-zA-Z_][a-zA-Z0-9_]* alpha   y       $&      alpha
 ^a(bc+|b[eh])g|.h$     abh     y       $&-$1   bh-
 (bc+d$|ef*g.|h?i(j|k)) effgz   y       $&-$1-$2        effgz-effgz-
@@ -150,6 +232,10 @@ a[bcd]+dcdcde      adcdcde n       -       -
 (bc+d$|ef*g.|h?i(j|k)) bcdd    n       -       -
 (bc+d$|ef*g.|h?i(j|k)) reffgz  y       $&-$1-$2        effgz-effgz-
 ((((((((((a))))))))))  a       y       $10     a
+((((((((((a))))))))))  a       y       $-[0]   0
+((((((((((a))))))))))  a       y       $+[0]   1
+((((((((((a))))))))))  a       y       $-[10]  0
+((((((((((a))))))))))  a       y       $+[10]  1
 ((((((((((a))))))))))\10       aa      y       $&      aa
 ((((((((((a))))))))))${bang}   aa      n       -       -
 ((((((((((a))))))))))${bang}   a!      y       $&      a!
@@ -159,21 +245,27 @@ multiple words    multiple words, yeah    y       $&      multiple words
 (.*)c(.*)      abcde   y       $&-$1-$2        abcde-ab-de
 \((.*), (.*)\) (a, b)  y       ($2, $1)        (b, a)
 [k]    ab      n       -       -
-abcd   abcd    y       $&-\$&-\\$&     abcd-$&-\abcd
-a(bc)d abcd    y       $1-\$1-\\$1     bc-$1-\bc
+abcd   abcd    y       $&-\$&-\\$&     abcd-\$&-\\abcd
+a(bc)d abcd    y       $1-\$1-\\$1     bc-\$1-\\bc
 a[-]?c ac      y       $&      ac
 (abc)\1        abcabc  y       $1      abc
 ([a-c]*)\1     abcabc  y       $1      abc
-\1     -       c       -       /\1/: reference to nonexistent group
-\2     -       c       -       /\2/: reference to nonexistent group
+\1     -       c       -       Reference to nonexistent group
+\2     -       c       -       Reference to nonexistent group
 (a)|\1 a       y       -       -
 (a)|\1 x       n       -       -
-(a)|\2 -       c       -       /(a)|\2/: reference to nonexistent group
+(a)|\2 -       c       -       Reference to nonexistent group
 (([a-c])b*?\2)*        ababbbcbc       y       $&-$1-$2        ababb-bb-b
 (([a-c])b*?\2){3}      ababbbcbc       y       $&-$1-$2        ababbbcbc-cbc-c
 ((\3|b)\2(a)x)+        aaxabxbaxbbx    n       -       -
 ((\3|b)\2(a)x)+        aaaxabaxbaaxbbax        y       $&-$1-$2-$3     bbax-bbax-b-a
 ((\3|b)\2(a)){2,}      bbaababbabaaaaabbaaaabba        y       $&-$1-$2-$3     bbaaaabba-bba-b-a
+(a)|(b)        b       y       $-[0]   0
+(a)|(b)        b       y       $+[0]   1
+(a)|(b)        b       y       x$-[1]  x
+(a)|(b)        b       y       x$+[1]  x
+(a)|(b)        b       y       $-[2]   0
+(a)|(b)        b       y       $+[2]   1
 'abc'i ABC     y       $&      ABC
 'abc'i XBC     n       -       -
 'abc'i AXC     n       -       -
@@ -218,9 +310,9 @@ a[-]?c      ac      y       $&      ac
 'a[b-d]'i      AAC     y       $&      AC
 'a[-b]'i       A-      y       $&      A-
 'a[b-]'i       A-      y       $&      A-
-'a[b-a]'i      -       c       -       /a[b-a]/: invalid [] range in regexp
-'a[]b'i        -       c       -       /a[]b/: unmatched [] in regexp
-'a['i  -       c       -       /a[/: unmatched [] in regexp
+'a[b-a]'i      -       c       -       Invalid [] range \"b-a\"
+'a[]b'i        -       c       -       Unmatched [
+'a['i  -       c       -       Unmatched [
 'a]'i  A]      y       $&      A]
 'a[]]b'i       A]B     y       $&      A]B
 'a[^bc]d'i     AED     y       $&      AED
@@ -232,21 +324,21 @@ a[-]?c    ac      y       $&      ac
 'ab|cd'i       ABC     y       $&      AB
 'ab|cd'i       ABCD    y       $&      AB
 '()ef'i        DEF     y       $&-$1   EF-
-'*a'i  -       c       -       /*a/: ?+*{} follows nothing in regexp
-'(*)b'i        -       c       -       /(*)b/: ?+*{} follows nothing in regexp
+'*a'i  -       c       -       Quantifier follows nothing
+'(*)b'i        -       c       -       Quantifier follows nothing
 '$b'i  B       n       -       -
 'a\'i  -       c       -       Search pattern not terminated
 'a\(b'i        A(B     y       $&-$1   A(B-
 'a\(*b'i       AB      y       $&      AB
 'a\(*b'i       A((B    y       $&      A((B
-'a\\b'i        A\B     y       $&      A\B
-'abc)'i        -       c       -       /abc)/: unmatched () in regexp
-'(abc'i        -       c       -       /(abc/: unmatched () in regexp
+'a\\b'i        A\\B    y       $&      A\\B
+'abc)'i        -       c       -       Unmatched )
+'(abc'i        -       c       -       Unmatched (
 '((a))'i       ABC     y       $&-$1-$2        A-A-A
 '(a)b(c)'i     ABC     y       $&-$1-$2        ABC-A-C
 'a+b+c'i       AABBABC y       $&      ABC
 'a{1,}b{1,}c'i AABBABC y       $&      ABC
-'a**'i -       c       -       /a**/: nested *?+ in regexp
+'a**'i -       c       -       Nested quantifiers
 'a.+?c'i       ABCABC  y       $&      ABC
 'a.*?c'i       ABCABC  y       $&      ABC
 'a.{0,5}?c'i   ABCABC  y       $&      ABC
@@ -257,7 +349,7 @@ a[-]?c      ac      y       $&      ac
 '(a+|b)?'i     AB      y       $&-$1   A-A
 '(a+|b){0,1}'i AB      y       $&-$1   A-A
 '(a+|b){0,1}?'i        AB      y       $&-$1   -
-')('i  -       c       -       /)(/: unmatched () in regexp
+')('i  -       c       -       Unmatched )
 '[^ab]*'i      CDE     y       $&      CDE
 'abc'i         n       -       -
 'a*'i          y       $&      
@@ -301,8 +393,8 @@ a[-]?c      ac      y       $&      ac
 '(.*)c(.*)'i   ABCDE   y       $&-$1-$2        ABCDE-AB-DE
 '\((.*), (.*)\)'i      (A, B)  y       ($2, $1)        (B, A)
 '[k]'i AB      n       -       -
-'abcd'i        ABCD    y       $&-\$&-\\$&     ABCD-$&-\ABCD
-'a(bc)d'i      ABCD    y       $1-\$1-\\$1     BC-$1-\BC
+'abcd'i        ABCD    y       $&-\$&-\\$&     ABCD-\$&-\\ABCD
+'a(bc)d'i      ABCD    y       $1-\$1-\\$1     BC-\$1-\\BC
 'a[-]?c'i      AC      y       $&      AC
 '(abc)\1'i     ABCABC  y       $1      ABC
 '([a-c]*)\1'i  ABCABC  y       $1      ABC
@@ -318,7 +410,7 @@ a(?:b|c|d){2}(.)    acdbcdbe        y       $1      b
 a(?:b|c|d){4,5}(.)     acdbcdbe        y       $1      b
 a(?:b|c|d){4,5}?(.)    acdbcdbe        y       $1      d
 ((foo)|(bar))* foobar  y       $1-$2-$3        bar-foo-bar
-:(?:   -       c       -       /(?/: Sequence (? incomplete
+:(?:   -       c       -       Sequence (? incomplete
 a(?:b|c|d){6,7}(.)     acdbcdbe        y       $1      e
 a(?:b|c|d){6,7}?(.)    acdbcdbe        y       $1      e
 a(?:b|c|d){5,6}(.)     acdbcdbe        y       $1      e
@@ -346,7 +438,7 @@ a(?:b|(c|e){1,2}?|d)+?(.)   ace     y       $1$2    ce
 (?<!c)b        cb      n       -       -
 (?<!c)b        b       y       -       -
 (?<!c)b        b       y       $&      b
-(?<%)b -       c       -       /(?<%)b/: Sequence (?%...) not recognized
+(?<%)b -       c       -       Sequence (?<%...) not recognized
 (?:..)*a       aba     y       $&      aba
 (?:..)*?a      aba     y       $&      a
 ^(?:b|a(?=(.)))*\1     abc     y       $&      ab
@@ -397,12 +489,12 @@ a(?:b|(c|e){1,2}?|d)+?(.) ace     y       $1$2    ce
 '(ab)\d\1'i    ab4Ab   y       $1      ab
 foo\w*\d{4}baz foobar1234baz   y       $&      foobar1234baz
 a(?{})b        cabd    y       $&      ab
-a(?{)b -       c       -       /a(?{)b/: Sequence (?{...}) not terminated or not {}-balanced
-a(?{{})b       -       c       -       /a(?{{})b/: Sequence (?{...}) not terminated or not {}-balanced
-a(?{}})b       -       c       -       /a(?{}})b/: Sequence (?{...}) not terminated or not {}-balanced
-a(?{"{"})b     -       c       -       /a(?{"{"})b/: Sequence (?{...}) not terminated or not {}-balanced
+a(?{)b -       c       -       Sequence (?{...}) not terminated or not {}-balanced
+a(?{{})b       -       c       -       Sequence (?{...}) not terminated or not {}-balanced
+a(?{}})b       -       c       -       
+a(?{"{"})b     -       c       -       Sequence (?{...}) not terminated or not {}-balanced
 a(?{"\{"})b    cabd    y       $&      ab
-a(?{"{"}})b    -       c       -       Unmatched right bracket
+a(?{"{"}})b    -       c       -       Unmatched right curly bracket
 a(?{$bl="\{"}).b       caxbd   y       $bl     {
 x(~~)*(?:(?:F)?)?      x~~     y       -       -
 ^a(?#xxx){3}c  aaac    y       $&      aaac
@@ -441,8 +533,8 @@ x(~~)*(?:(?:F)?)?   x~~     y       -       -
 ^(\(+)?blah(?(1)(\)))$ blah    y       ($2)    ()
 ^(\(+)?blah(?(1)(\)))$ blah)   n       -       -
 ^(\(+)?blah(?(1)(\)))$ (blah   n       -       -
-(?(1?)a|b)     a       c       -       /(?(1?)a|b)/: Switch (?(number? not recognized
-(?(1)a|b|c)    a       c       -       /(?(1)a|b|c)/: Switch (?(condition)... contains too many branches
+(?(1?)a|b)     a       c       -       Switch condition not recognized
+(?(1)a|b|c)    a       c       -       Switch (?(condition)... contains too many branches
 (?(?{0})a|b)   a       n       -       -
 (?(?{0})b|a)   a       y       $&      a
 (?(?{1})b|a)   a       n       -       -
@@ -473,22 +565,585 @@ $(?<=^(a))       a       y       $1      a
 ([[:]+)        a:[b]:  y       $1      :[
 ([[=]+)        a=[b]=  y       $1      =[
 ([[.]+)        a.[b].  y       $1      .[
-[a[:xyz:       -       c       -       /[a[:xyz:/: unmatched [] in regexp
-[a[:xyz:]      -       c       -       /[a[:xyz:]/: unmatched [] in regexp
-([a[:xyz:]b]+) pbaq    y       $1      ba
+[a[:xyz:       -       c       -       Unmatched [
+[a[:xyz:]      -       c       -       POSIX class [:xyz:] unknown
+[a[:]b[:c]     abc     y       $&      abc
+([a[:xyz:]b]+) pbaq    c       -       POSIX class [:xyz:] unknown
+[a[:]b[:c]     abc     y       $&      abc
+([[:alpha:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd
+([[:alnum:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy
+([[:ascii:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy__--  ${nulnul}
+([[:cntrl:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ${nulnul}
+([[:digit:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      01
+([[:graph:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy__--
+([[:lower:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      cd
+([[:print:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy__--  
+([[:punct:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      __--
+([[:space:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1        
+([[:word:]]+)  ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy__
+([[:upper:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      AB
+([[:xdigit:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01
+([[:^alpha:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      01
+([[:^alnum:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      __--  ${nulnul}${ffff}
+([[:^ascii:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ${ffff}
+([[:^cntrl:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy__--  
+([[:^digit:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd
+([[:^lower:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      AB
+([[:^print:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ${nulnul}${ffff}
+([[:^punct:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy
+([[:^space:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      ABcd01Xy__--
+([[:^word:]]+) ABcd01Xy__--  ${nulnul}${ffff}  y       $1      --  ${nulnul}${ffff}
+([[:^upper:]]+)        ABcd01Xy__--  ${nulnul}${ffff}  y       $1      cd01
+([[:^xdigit:]]+)       ABcd01Xy__--  ${nulnul}${ffff}  y       $1      Xy__--  ${nulnul}${ffff}
+[[:foo:]]      -       c       -       POSIX class [:foo:] unknown
+[[:^foo:]]     -       c       -       POSIX class [:^foo:] unknown
 ((?>a+)b)      aaab    y       $1      aaab
 (?>(a+))b      aaab    y       $1      aaa
 ((?>[^()]+)|\([^()]*\))+       ((abc(ade)ufh()()x      y       $&      abc(ade)ufh()()x
-(?<=x+)y       -       c       -       /(?<=x+)y/: variable length lookbehind not implemented
-a{37,17}       -       c       -       /a{37,17}/: Can't do {n,m} with n > m
+(?<=x+)y       -       c       -       Variable length lookbehind not implemented
+a{37,17}       -       c       -       Can't do {n,m} with n > m
+\Z     a\nb\n  y       $-[0]   3
+\z     a\nb\n  y       $-[0]   4
+$      a\nb\n  y       $-[0]   3
+\Z     b\na\n  y       $-[0]   3
+\z     b\na\n  y       $-[0]   4
+$      b\na\n  y       $-[0]   3
+\Z     b\na    y       $-[0]   3
+\z     b\na    y       $-[0]   3
+$      b\na    y       $-[0]   3
+'\Z'm  a\nb\n  y       $-[0]   3
+'\z'm  a\nb\n  y       $-[0]   4
+'$'m   a\nb\n  y       $-[0]   1
+'\Z'm  b\na\n  y       $-[0]   3
+'\z'm  b\na\n  y       $-[0]   4
+'$'m   b\na\n  y       $-[0]   1
+'\Z'm  b\na    y       $-[0]   3
+'\z'm  b\na    y       $-[0]   3
+'$'m   b\na    y       $-[0]   1
 a\Z    a\nb\n  n       -       -
-b\Z    a\nb\n  y       -       -
-b\z    a\nb\n  n       -       -
-b\Z    a\nb    y       -       -
-b\z    a\nb    y       -       -
+a\z    a\nb\n  n       -       -
+a$     a\nb\n  n       -       -
+a\Z    b\na\n  y       $-[0]   2
+a\z    b\na\n  n       -       -
+a$     b\na\n  y       $-[0]   2
+a\Z    b\na    y       $-[0]   2
+a\z    b\na    y       $-[0]   2
+a$     b\na    y       $-[0]   2
+'a\Z'm a\nb\n  n       -       -
+'a\z'm a\nb\n  n       -       -
+'a$'m  a\nb\n  y       $-[0]   0
+'a\Z'm b\na\n  y       $-[0]   2
+'a\z'm b\na\n  n       -       -
+'a$'m  b\na\n  y       $-[0]   2
+'a\Z'm b\na    y       $-[0]   2
+'a\z'm b\na    y       $-[0]   2
+'a$'m  b\na    y       $-[0]   2
+aa\Z   aa\nb\n n       -       -
+aa\z   aa\nb\n n       -       -
+aa$    aa\nb\n n       -       -
+aa\Z   b\naa\n y       $-[0]   2
+aa\z   b\naa\n n       -       -
+aa$    b\naa\n y       $-[0]   2
+aa\Z   b\naa   y       $-[0]   2
+aa\z   b\naa   y       $-[0]   2
+aa$    b\naa   y       $-[0]   2
+'aa\Z'm        aa\nb\n n       -       -
+'aa\z'm        aa\nb\n n       -       -
+'aa$'m aa\nb\n y       $-[0]   0
+'aa\Z'm        b\naa\n y       $-[0]   2
+'aa\z'm        b\naa\n n       -       -
+'aa$'m b\naa\n y       $-[0]   2
+'aa\Z'm        b\naa   y       $-[0]   2
+'aa\z'm        b\naa   y       $-[0]   2
+'aa$'m b\naa   y       $-[0]   2
+aa\Z   ac\nb\n n       -       -
+aa\z   ac\nb\n n       -       -
+aa$    ac\nb\n n       -       -
+aa\Z   b\nac\n n       -       -
+aa\z   b\nac\n n       -       -
+aa$    b\nac\n n       -       -
+aa\Z   b\nac   n       -       -
+aa\z   b\nac   n       -       -
+aa$    b\nac   n       -       -
+'aa\Z'm        ac\nb\n n       -       -
+'aa\z'm        ac\nb\n n       -       -
+'aa$'m ac\nb\n n       -       -
+'aa\Z'm        b\nac\n n       -       -
+'aa\z'm        b\nac\n n       -       -
+'aa$'m b\nac\n n       -       -
+'aa\Z'm        b\nac   n       -       -
+'aa\z'm        b\nac   n       -       -
+'aa$'m b\nac   n       -       -
+aa\Z   ca\nb\n n       -       -
+aa\z   ca\nb\n n       -       -
+aa$    ca\nb\n n       -       -
+aa\Z   b\nca\n n       -       -
+aa\z   b\nca\n n       -       -
+aa$    b\nca\n n       -       -
+aa\Z   b\nca   n       -       -
+aa\z   b\nca   n       -       -
+aa$    b\nca   n       -       -
+'aa\Z'm        ca\nb\n n       -       -
+'aa\z'm        ca\nb\n n       -       -
+'aa$'m ca\nb\n n       -       -
+'aa\Z'm        b\nca\n n       -       -
+'aa\z'm        b\nca\n n       -       -
+'aa$'m b\nca\n n       -       -
+'aa\Z'm        b\nca   n       -       -
+'aa\z'm        b\nca   n       -       -
+'aa$'m b\nca   n       -       -
+ab\Z   ab\nb\n n       -       -
+ab\z   ab\nb\n n       -       -
+ab$    ab\nb\n n       -       -
+ab\Z   b\nab\n y       $-[0]   2
+ab\z   b\nab\n n       -       -
+ab$    b\nab\n y       $-[0]   2
+ab\Z   b\nab   y       $-[0]   2
+ab\z   b\nab   y       $-[0]   2
+ab$    b\nab   y       $-[0]   2
+'ab\Z'm        ab\nb\n n       -       -
+'ab\z'm        ab\nb\n n       -       -
+'ab$'m ab\nb\n y       $-[0]   0
+'ab\Z'm        b\nab\n y       $-[0]   2
+'ab\z'm        b\nab\n n       -       -
+'ab$'m b\nab\n y       $-[0]   2
+'ab\Z'm        b\nab   y       $-[0]   2
+'ab\z'm        b\nab   y       $-[0]   2
+'ab$'m b\nab   y       $-[0]   2
+ab\Z   ac\nb\n n       -       -
+ab\z   ac\nb\n n       -       -
+ab$    ac\nb\n n       -       -
+ab\Z   b\nac\n n       -       -
+ab\z   b\nac\n n       -       -
+ab$    b\nac\n n       -       -
+ab\Z   b\nac   n       -       -
+ab\z   b\nac   n       -       -
+ab$    b\nac   n       -       -
+'ab\Z'm        ac\nb\n n       -       -
+'ab\z'm        ac\nb\n n       -       -
+'ab$'m ac\nb\n n       -       -
+'ab\Z'm        b\nac\n n       -       -
+'ab\z'm        b\nac\n n       -       -
+'ab$'m b\nac\n n       -       -
+'ab\Z'm        b\nac   n       -       -
+'ab\z'm        b\nac   n       -       -
+'ab$'m b\nac   n       -       -
+ab\Z   ca\nb\n n       -       -
+ab\z   ca\nb\n n       -       -
+ab$    ca\nb\n n       -       -
+ab\Z   b\nca\n n       -       -
+ab\z   b\nca\n n       -       -
+ab$    b\nca\n n       -       -
+ab\Z   b\nca   n       -       -
+ab\z   b\nca   n       -       -
+ab$    b\nca   n       -       -
+'ab\Z'm        ca\nb\n n       -       -
+'ab\z'm        ca\nb\n n       -       -
+'ab$'m ca\nb\n n       -       -
+'ab\Z'm        b\nca\n n       -       -
+'ab\z'm        b\nca\n n       -       -
+'ab$'m b\nca\n n       -       -
+'ab\Z'm        b\nca   n       -       -
+'ab\z'm        b\nca   n       -       -
+'ab$'m b\nca   n       -       -
+abb\Z  abb\nb\n        n       -       -
+abb\z  abb\nb\n        n       -       -
+abb$   abb\nb\n        n       -       -
+abb\Z  b\nabb\n        y       $-[0]   2
+abb\z  b\nabb\n        n       -       -
+abb$   b\nabb\n        y       $-[0]   2
+abb\Z  b\nabb  y       $-[0]   2
+abb\z  b\nabb  y       $-[0]   2
+abb$   b\nabb  y       $-[0]   2
+'abb\Z'm       abb\nb\n        n       -       -
+'abb\z'm       abb\nb\n        n       -       -
+'abb$'m        abb\nb\n        y       $-[0]   0
+'abb\Z'm       b\nabb\n        y       $-[0]   2
+'abb\z'm       b\nabb\n        n       -       -
+'abb$'m        b\nabb\n        y       $-[0]   2
+'abb\Z'm       b\nabb  y       $-[0]   2
+'abb\z'm       b\nabb  y       $-[0]   2
+'abb$'m        b\nabb  y       $-[0]   2
+abb\Z  ac\nb\n n       -       -
+abb\z  ac\nb\n n       -       -
+abb$   ac\nb\n n       -       -
+abb\Z  b\nac\n n       -       -
+abb\z  b\nac\n n       -       -
+abb$   b\nac\n n       -       -
+abb\Z  b\nac   n       -       -
+abb\z  b\nac   n       -       -
+abb$   b\nac   n       -       -
+'abb\Z'm       ac\nb\n n       -       -
+'abb\z'm       ac\nb\n n       -       -
+'abb$'m        ac\nb\n n       -       -
+'abb\Z'm       b\nac\n n       -       -
+'abb\z'm       b\nac\n n       -       -
+'abb$'m        b\nac\n n       -       -
+'abb\Z'm       b\nac   n       -       -
+'abb\z'm       b\nac   n       -       -
+'abb$'m        b\nac   n       -       -
+abb\Z  ca\nb\n n       -       -
+abb\z  ca\nb\n n       -       -
+abb$   ca\nb\n n       -       -
+abb\Z  b\nca\n n       -       -
+abb\z  b\nca\n n       -       -
+abb$   b\nca\n n       -       -
+abb\Z  b\nca   n       -       -
+abb\z  b\nca   n       -       -
+abb$   b\nca   n       -       -
+'abb\Z'm       ca\nb\n n       -       -
+'abb\z'm       ca\nb\n n       -       -
+'abb$'m        ca\nb\n n       -       -
+'abb\Z'm       b\nca\n n       -       -
+'abb\z'm       b\nca\n n       -       -
+'abb$'m        b\nca\n n       -       -
+'abb\Z'm       b\nca   n       -       -
+'abb\z'm       b\nca   n       -       -
+'abb$'m        b\nca   n       -       -
 (^|x)(c)       ca      y       $2      c
 a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz   x       n       -       -
 a(?{$a=2;$b=3;($b)=$a})b       yabz    y       $b      2
 round\(((?>[^()]+))\)  _I(round(xs * sz),1)    y       $1      xs * sz
 '((?x:.) )'    x       y       $1-     x -
 '((?-x:.) )'x  x       y       $1-     x-
+foo.bart       foo.bart        y       -       -
+'^d[x][x][x]'m abcd\ndxxx      y       -       -
+.X(.+)+X       bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  y       -       -
+.X(.+)+XX      bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       -       -
+.XX(.+)+X      bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       -       -
+.X(.+)+X       bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  n       -       -
+.X(.+)+XX      bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n       -       -
+.XX(.+)+X      bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n       -       -
+.X(.+)+[X]     bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  y       -       -
+.X(.+)+[X][X]  bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       -       -
+.XX(.+)+[X]    bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       -       -
+.X(.+)+[X]     bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  n       -       -
+.X(.+)+[X][X]  bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n       -       -
+.XX(.+)+[X]    bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n       -       -
+.[X](.+)+[X]   bbbbXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  y       -       -
+.[X](.+)+[X][X]        bbbbXcXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       -       -
+.[X][X](.+)+[X]        bbbbXXcXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       -       -
+.[X](.+)+[X]   bbbbXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  n       -       -
+.[X](.+)+[X][X]        bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n       -       -
+.[X][X](.+)+[X]        bbbbXXXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa n       -       -
+tt+$   xxxtt   y       -       -
+([a-\d]+)      za-9z   y       $1      a-9
+([\d-z]+)      a0-za   y       $1      0-z
+([\d-\s]+)     a0- z   y       $1      0- 
+([a-[:digit:]]+)       za-9z   y       $1      a-9
+([[:digit:]-z]+)       =0-z=   y       $1      0-z
+([[:digit:]-[:alpha:]]+)       =0-z=   y       $1      0-z
+\GX.*X aaaXbX  n       -       -
+(\d+\.\d+)     3.1415926       y       $1      3.1415926
+(\ba.{0,10}br) have a web browser      y       $1      a web br
+'\.c(pp|xx|c)?$'i      Changes n       -       -
+'\.c(pp|xx|c)?$'i      IO.c    y       -       -
+'(\.c(pp|xx|c)?$)'i    IO.c    y       $1      .c
+^([a-z]:)      C:/     n       -       -
+'^\S\s+aa$'m   \nx aa  y       -       -
+(^|a)b ab      y       -       -
+^([ab]*?)(b)?(c)$      abac    y       -$2-    --
+(\w)?(abc)\1b  abcab   n       -       -
+^(?:.,){2}c    a,b,c   y       -       -
+^(.,){2}c      a,b,c   y       $1      b,
+^(?:[^,]*,){2}c        a,b,c   y       -       -
+^([^,]*,){2}c  a,b,c   y       $1      b,
+^([^,]*,){3}d  aaa,b,c,d       y       $1      c,
+^([^,]*,){3,}d aaa,b,c,d       y       $1      c,
+^([^,]*,){0,3}d        aaa,b,c,d       y       $1      c,
+^([^,]{1,3},){3}d      aaa,b,c,d       y       $1      c,
+^([^,]{1,3},){3,}d     aaa,b,c,d       y       $1      c,
+^([^,]{1,3},){0,3}d    aaa,b,c,d       y       $1      c,
+^([^,]{1,},){3}d       aaa,b,c,d       y       $1      c,
+^([^,]{1,},){3,}d      aaa,b,c,d       y       $1      c,
+^([^,]{1,},){0,3}d     aaa,b,c,d       y       $1      c,
+^([^,]{0,3},){3}d      aaa,b,c,d       y       $1      c,
+^([^,]{0,3},){3,}d     aaa,b,c,d       y       $1      c,
+^([^,]{0,3},){0,3}d    aaa,b,c,d       y       $1      c,
+(?i)           y       -       -
+'(?!\A)x'm     a\nxb\n y       -       -
+^(a(b)?)+$     aba     y       -$1-$2- -a--
+^(aa(bb)?)+$   aabbaa  y       -$1-$2- -aa--
+'^.{9}abc.*\n'm        123\nabcabcabcabc\n     y       -       -
+^(a)?a$        a       y       -$1-    --
+^(a)?(?(1)a|b)+$       a       n       -       -
+^(a\1?)(a\1?)(a\2?)(a\3?)$     aaaaaa  y       $1,$2,$3,$4     a,aa,a,aa
+^(a\1?){4}$    aaaaaa  y       $1      aa
+^(0+)?(?:x(1))?        x1      y       -       -
+^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?        012cxx0190      y       -       -
+^(b+?|a){1,2}c bbbac   y       $1      a
+^(b+?|a){1,2}c bbbbac  y       $1      a
+\((\w\. \w+)\) cd. (A. Tw)     y       -$1-    -A. Tw-
+((?:aaaa|bbbb)cccc)?   aaaacccc        y       -       -
+((?:aaaa|bbbb)cccc)?   bbbbcccc        y       -       -
+(a)?(a)+       a       y       $1:$2   :a      -
+(ab)?(ab)+     ab      y       $1:$2   :ab     -
+(abc)?(abc)+   abc     y       $1:$2   :abc    -
+'b\s^'m        a\nb\n  n       -       -
+\ba    a       y       -       -
+^(a(??{"(?!)"})|(a)(?{1}))b    ab      y       $2      a       # [ID 20010811.006]
+ab(?i)cd       AbCd    n       -       -       # [ID 20010809.023]
+ab(?i)cd       abCd    y       -       -
+(A|B)*(?(1)(CD)|(CD))  CD      y       $2-$3   -CD
+(A|B)*(?(1)(CD)|(CD))  ABCD    y       $2-$3   CD-
+(A|B)*?(?(1)(CD)|(CD)) CD      y       $2-$3   -CD     # [ID 20010803.016]
+(A|B)*?(?(1)(CD)|(CD)) ABCD    y       $2-$3   CD-
+'^(o)(?!.*\1)'i        Oo      n       -       -
+(.*)\d+\1      abc12bc y       $1      bc
+(?m:(foo\s*$)) foo\n bar       y       $1      foo
+(.*)c  abcd    y       $1      ab
+(.*)(?=c)      abcd    y       $1      ab
+(.*)(?=c)c     abcd    yB      $1      ab
+(.*)(?=b|c)    abcd    y       $1      ab
+(.*)(?=b|c)c   abcd    y       $1      ab
+(.*)(?=c|b)    abcd    y       $1      ab
+(.*)(?=c|b)c   abcd    y       $1      ab
+(.*)(?=[bc])   abcd    y       $1      ab
+(.*)(?=[bc])c  abcd    yB      $1      ab
+(.*)(?<=b)     abcd    y       $1      ab
+(.*)(?<=b)c    abcd    y       $1      ab
+(.*)(?<=b|c)   abcd    y       $1      abc
+(.*)(?<=b|c)c  abcd    y       $1      ab
+(.*)(?<=c|b)   abcd    y       $1      abc
+(.*)(?<=c|b)c  abcd    y       $1      ab
+(.*)(?<=[bc])  abcd    y       $1      abc
+(.*)(?<=[bc])c abcd    y       $1      ab
+(.*?)c abcd    y       $1      ab
+(.*?)(?=c)     abcd    y       $1      ab
+(.*?)(?=c)c    abcd    yB      $1      ab
+(.*?)(?=b|c)   abcd    y       $1      a
+(.*?)(?=b|c)c  abcd    y       $1      ab
+(.*?)(?=c|b)   abcd    y       $1      a
+(.*?)(?=c|b)c  abcd    y       $1      ab
+(.*?)(?=[bc])  abcd    y       $1      a
+(.*?)(?=[bc])c abcd    yB      $1      ab
+(.*?)(?<=b)    abcd    y       $1      ab
+(.*?)(?<=b)c   abcd    y       $1      ab
+(.*?)(?<=b|c)  abcd    y       $1      ab
+(.*?)(?<=b|c)c abcd    y       $1      ab
+(.*?)(?<=c|b)  abcd    y       $1      ab
+(.*?)(?<=c|b)c abcd    y       $1      ab
+(.*?)(?<=[bc]) abcd    y       $1      ab
+(.*?)(?<=[bc])c        abcd    y       $1      ab
+2(]*)?$\1      2       y       $&      2
+(??{}) x       y       -       -
+a(b)?? abc     y       <$1>    <>      # undef [perl #16773]
+(\d{1,3}\.){3,}        128.134.142.8   y       <$1>    <142.>  # [perl #18019]
+^.{3,4}(.+)\1\z        foobarbar       y       $1      bar     # 16 tests for [perl #23171]
+^(?:f|o|b){3,4}(.+)\1\z        foobarbar       y       $1      bar
+^.{3,4}((?:b|a|r)+)\1\z        foobarbar       y       $1      bar
+^(?:f|o|b){3,4}((?:b|a|r)+)\1\z        foobarbar       y       $1      bar
+^.{3,4}(.+?)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){3,4}(.+?)\1\z       foobarbar       y       $1      bar
+^.{3,4}((?:b|a|r)+?)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){3,4}((?:b|a|r)+?)\1\z       foobarbar       y       $1      bar
+^.{2,3}?(.+)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?(.+)\1\z       foobarbar       y       $1      bar
+^.{2,3}?((?:b|a|r)+)\1\z       foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?((?:b|a|r)+)\1\z       foobarbar       y       $1      bar
+^.{2,3}?(.+?)\1\z      foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?(.+?)\1\z      foobarbar       y       $1      bar
+^.{2,3}?((?:b|a|r)+?)\1\z      foobarbar       y       $1      bar
+^(?:f|o|b){2,3}?((?:b|a|r)+?)\1\z      foobarbar       y       $1      bar
+.*a(?!(b|cd)*e).*f     ......abef      n       -       -       # [perl #23030]
+x(?#   x       c       -       Sequence (?#... not terminated
+:x(?#: x       c       -       Sequence (?#... not terminated
+(WORDS|WORD)S  WORDS   y       $1      WORD
+(X.|WORDS|X.|WORD)S    WORDS   y       $1      WORD
+(WORDS|WORLD|WORD)S    WORDS   y       $1      WORD
+(X.|WORDS|WORD|Y.)S    WORDS   y       $1      WORD
+(foo|fool|x.|money|parted)$    fool    y       $1      fool
+(x.|foo|fool|x.|money|parted|y.)$      fool    y       $1      fool
+(foo|fool|money|parted)$       fool    y       $1      fool
+(foo|fool|x.|money|parted)$    fools   n       -       -
+(x.|foo|fool|x.|money|parted|y.)$      fools   n       -       -
+(foo|fool|money|parted)$       fools   n       -       -
+(a|aa|aaa||aaaa|aaaaa|aaaaaa)(b|c)     aaaaaaaaaaaaaaab        y       $1$2    aaaaaab
+(a|aa|aaa||aaaa|aaaaa|aaaaaa)(??{$1&&""})(b|c) aaaaaaaaaaaaaaab        y       $1$2    aaaaaab
+(a|aa|aaa|aaaa|aaaaa|aaaaaa)(??{$1&&"foo"})(b|c)       aaaaaaaaaaaaaaab        n       -       -
+^(a*?)(?!(aa|aaaa)*$)  aaaaaaaaaaaaaaaaaaaa    y       $1      a       # [perl #34195]
+^(a*?)(?!(aa|aaaa)*$)(?=a\z)   aaaaaaaa        y       $1      aaaaaaa
+^(.)\s+.$(?(1))        A B     y       $1      A       # [perl #37688]
+(?:r?)*?r|(.{2,4})     abcde   y       $1      abcd
+(?!)+?|(.{2,4})        abcde   y       $1      abcd
+^(a*?)(?!(a{6}|a{5})*$)        aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa y       $+[1]   12      # super-linear cache bug may return 18
+^((?>(?:aa)?b)?)       aab     y       $1      aab
+^((?:aa)*)(?:X+((?:\d+|-)(?:X+(.+))?))?$       aaaaX5  y       $1      aaaa
+X(A|B||C|D)Y   XXXYYY  y       $&      XY      # Trie w/ NOTHING
+(?i:X([A]|[B]|y[Y]y|[D]|)Y)    XXXYYYB y       $&      XY      # Trie w/ NOTHING
+^([a]{1})*$    aa      y       $1      a
+a(?!b(?!c))(..)        abababc y       $1      bc      # test nested negatives
+a(?!b(?=a))(..)        abababc y       $1      bc      # test nested lookaheads
+a(?!b(?!c(?!d(?!e))))...(.)    abxabcdxabcde   y       $1      e
+X(?!b+(?!(c+)*(?!(c+)*d))).*X  aXbbbbbbbcccccccccccccaaaX      y       -       -
+^(XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):       ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^(XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):       ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):        ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P):        ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P|[MKJ]):  ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXXXXXXXXX|YYYYYYYYYY|Z.Q*X|Z[TE]Q*P|[MKJ]):  ZEQQQX: y       $1      ZEQQQX
+^(XXX|YYY|Z.Q*X|Z[TE]Q*P):     ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^(XXX|YYY|Z.Q*X|Z[TE]Q*P):     ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P):      ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P):      ZEQQQX: y       $1      ZEQQQX
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P|[MKJ]):        ZEQQQQQQQQQQQQQQQQQQP:  y       $1      ZEQQQQQQQQQQQQQQQQQQP
+^([TUV]+|XXX|YYY|Z.Q*X|Z[TE]Q*P|[MKJ]):        ZEQQQX: y       $1      ZEQQQX
+X(?:ABCF[cC]x*|ABCD|ABCF):(?:DIT|DID|DIM)      XABCFCxxxxxxxxxx:DIM    y       $&      XABCFCxxxxxxxxxx:DIM
+(((ABCD|ABCE|ABCF)))(A|B|C[xy]*):      ABCFCxxxxxxxxxx:DIM     y       $&      ABCFCxxxxxxxxxx:
+(?=foo)        foo     y       pos     0
+(?=foo)        XfooY   y       pos     1
+.*(?=foo)      XfooY   y       pos     1
+(?<=foo)       foo     y       pos     3
+(?<=foo)       XfooY   y       pos     4
+.*(?<=foo)     foo     y       pos     3
+.*(?<=foo)     XfooY   y       pos     4
+(?<=foo)Y      XfooY   y       pos     5
+o(?<=foo)Y     ..XfooY..       y       pos     7
+X(?=foo)f      ..XfooY..       y       pos     4
+X(?=foo)       ..XfooY..       y       pos     3
+X(?<=foo.)[YZ] ..XfooXY..      y       pos     8
+(?=XY*foo)     Xfoo    y       pos     0
+^(?=XY*foo)    Xfoo    y       pos     0
+^(??{"a+"})a   aa      y       $&      aa
+^(?:(??{"a+"})|b)a     aa      y       $&      aa
+^(??{chr 0x100}).$     \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{q(\x{100})}).     \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{q(.+)})\x{100}    \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{q(.)})\x{100}     \x{100}\x{100}  y       $&      \x{100}\x{100}
+^(??{chr 0x100})\xbb   \x{100}\x{bb}   y       $&      \x{100}\x{bb}
+^(.)(??{"(.)(.)"})(.)$ abcd    y       $1-$2   a-d
+^(.)(??{"(bz+|.)(.)"})(.)$     abcd    y       $1-$2   a-d
+^(.)((??{"(.)(cz+)"})|.)       abcd    y       $1-$2   a-b
+^a(?>(??{q(b)}))(??{q(c)})d    abcd    y       -       -
+^x(??{""})+$   x       y       $&      x
+^(<(?:[^<>]+|(?3)|(?1))*>)()(!>!>!>)$  <<!>!>!>><>>!>!>!>      y       $1      <<!>!>!>><>>
+^(<(?:[^<>]+|(?1))*>)$ <<><<<><>>>>    y       $1      <<><<<><>>>>
+((?2)*)([fF]o+)        fooFoFoo        y       $1-$2   fooFo-Foo
+(<(?:[^<>]+|(?R))*>)   <<><<<><>>>>    y       $1      <<><<<><>>>>
+(?<n>foo|bar|baz)      snofooewa       y       $1      foo
+(?<n>foo|bar|baz)      snofooewa       y       $+{n}   foo
+(?<n>foo|bar|baz)(?<m>[ew]+)   snofooewa       y       $+{n}   foo
+(?<n>foo|bar|baz)(?<m>[ew]+)   snofooewa       y       $+{m}   ew
+(?<n>foo)|(?<n>bar)|(?<n>baz)  snofooewa       y       $+{n}   foo
+(?<n>foo)(??{ $+{n} }) snofooefoofoowaa        y       $+{n}   foo
+/(?'n'foo|bar|baz)/    snofooewa       y       $1      foo
+/(?'n'foo|bar|baz)/    snofooewa       y       $+{n}   foo
+/(?'n'foo|bar|baz)(?'m'[ew]+)/ snofooewa       y       $+{n}   foo
+/(?'n'foo|bar|baz)(?'m'[ew]+)/ snofooewa       y       $+{m}   ew
+/(?'n'foo)|(?'n'bar)|(?<n>baz)/        snobazewa       y       $+{n}   baz
+/(?'n'foo)(??{ $+{n} })/       snofooefoofoowaa        y       $+{n}   foo
+/(?'n'foo)\k<n>/       ..foofoo..      y       $1      foo
+/(?'n'foo)\k<n>/       ..foofoo..      y       $+{n}   foo
+/(?<n>foo)\k'n'/       ..foofoo..      y       $1      foo
+/(?<n>foo)\k'n'/       ..foofoo..      y       $+{n}   foo
+/(?:(?<n>foo)|(?<n>bar))\k<n>/ ..barbar..      y       $+{n}   bar
+/^(?'main'<(?:[^<>]+|(?&crap)|(?&main))*>)(?'empty')(?'crap'!>!>!>)$/  <<!>!>!>><>>!>!>!>      y       $+{main}        <<!>!>!>><>>
+/^(?'main'<(?:[^<>]+|(?&main))*>)$/    <<><<<><>>>>    y       $1      <<><<<><>>>>
+/(?'first'(?&second)*)(?'second'[fF]o+)/       fooFoFoo        y       $+{first}-$+{second}    fooFo-Foo
+(?<A>foo)?(?(<A>)bar|nada)     foobar  y       $+{A}   foo
+(?<A>foo)?(?(<A>)bar|nada)     foo-barnada     y       $&      nada
+(?<A>foo)?(?(1)bar|nada)       foo-barnada     y       $&      nada
+(?<A>foo(?(R)bar))?(?1)        foofoobar       y       $1      foo
+(?<A>foo(?(R)bar))?(?1)        foofoobar       y       $&      foofoobar
+(x)(?<A>foo(?(R&A)bar))?(?&A)  xfoofoobar      y       $2      foo
+(x)(?<A>foo(?(R&A)bar))?(?&A)  xfoofoobar      y       $&      xfoofoobar
+(x)(?<A>foo(?(R2)bar))?(?&A)   xfoofoobar      y       $2      foo
+(x)(?<A>foo(?(R2)bar))?(?&A)   xfoofoobar      y       $&      xfoofoobar
+(?1)(?(DEFINE)(blah))  blah    y       $&      blah
+/^(?<PAL>(?<CHAR>.)((?&PAL)|.?)\k<CHAR>)$/     madamimadam     y       $&      madamimadam
+/^(?<PAL>(?<CHAR>.)((?&PAL)|.?)\k<CHAR>)$/     madamiamadam    n       -       -
+/(a)?((?1))(fox)/      aafox   y       $1-$2-$3        a-a-fox
+/(a)*((?1))(fox)/      aafox   y       $1-$2-$3        a-a-fox
+/(a)+((?1))(fox)/      aafox   y       $1-$2-$3        a-a-fox
+/(a){1,100}((?1))(fox)/        aafox   y       $1-$2-$3        a-a-fox
+/(a){0,100}((?1))(fox)/        aafox   y       $1-$2-$3        a-a-fox
+/(ab)?((?1))(fox)/     ababfox y       $1-$2-$3        ab-ab-fox
+/(ab)*((?1))(fox)/     ababfox y       $1-$2-$3        ab-ab-fox
+/(ab)+((?1))(fox)/     ababfox y       $1-$2-$3        ab-ab-fox
+/(ab){1,100}((?1))(fox)/       ababfox y       $1-$2-$3        ab-ab-fox
+/(ab){0,100}((?1))(fox)/       ababfox y       $1-$2-$3        ab-ab-fox
+# possessive captures
+a++a   aaaaa   n       -       -
+a*+a   aaaaa   n       -       -
+a{1,5}+a       aaaaa   n       -       -
+a?+a   ab      n       -       -
+a++b   aaaaab  y       $&      aaaaab
+a*+b   aaaaab  y       $&      aaaaab
+a{1,5}+b       aaaaab  y       $&      aaaaab
+a?+b   ab      y       $&      ab
+fooa++a        fooaaaaa        n       -       -
+fooa*+a        fooaaaaa        n       -       -
+fooa{1,5}+a    fooaaaaa        n       -       -
+fooa?+a        fooab   n       -       -
+fooa++b        fooaaaaab       y       $&      fooaaaaab
+fooa*+b        fooaaaaab       y       $&      fooaaaaab
+fooa{1,5}+b    fooaaaaab       y       $&      fooaaaaab
+fooa?+b        fooab   y       $&      fooab
+(?:aA)++(?:aA) aAaAaAaAaA      n       -       aAaAaAaAaA
+(aA)++(aA)     aAaAaAaAaA      n       -       aAaAaAaAaA
+(aA|bB)++(aA|bB)       aAaAbBaAbB      n       -       aAaAbBaAbB
+(?:aA|bB)++(?:aA|bB)   aAbBbBbBaA      n       -       aAbBbBbBaA
+(?:aA)*+(?:aA) aAaAaAaAaA      n       -       aAaAaAaAaA
+(aA)*+(aA)     aAaAaAaAaA      n       -       aAaAaAaAaA
+(aA|bB)*+(aA|bB)       aAaAbBaAaA      n       -       aAaAbBaAaA
+(?:aA|bB)*+(?:aA|bB)   aAaAaAbBaA      n       -       aAaAaAbBaA
+(?:aA){1,5}+(?:aA)     aAaAaAaAaA      n       -       aAaAaAaAaA
+(aA){1,5}+(aA) aAaAaAaAaA      n       -       aAaAaAaAaA
+(aA|bB){1,5}+(aA|bB)   aAaAbBaAaA      n       -       aAaAbBaAaA
+(?:aA|bB){1,5}+(?:aA|bB)       bBbBbBbBbB      n       -       bBbBbBbBbB
+(?:aA)?+(?:aA) aAb     n       -       aAb
+(aA)?+(aA)     aAb     n       -       aAb
+(aA|bB)?+(aA|bB)       bBb     n       -       bBb
+(?:aA|bB)?+(?:aA|bB)   aAb     n       -       aAb
+(?:aA)++b      aAaAaAaAaAb     y       $&      aAaAaAaAaAb
+(aA)++b        aAaAaAaAaAb     y       $&      aAaAaAaAaAb
+(aA|bB)++b     aAbBaAaAbBb     y       $&      aAbBaAaAbBb
+(?:aA|bB)++b   aAbBbBaAaAb     y       $&      aAbBbBaAaAb
+(?:aA)*+b      aAaAaAaAaAb     y       $&      aAaAaAaAaAb
+(aA)*+b        aAaAaAaAaAb     y       $&      aAaAaAaAaAb
+(aA|bB)*+b     bBbBbBbBbBb     y       $&      bBbBbBbBbBb
+(?:aA|bB)*+b   bBaAbBbBaAb     y       $&      bBaAbBbBaAb
+(?:aA){1,5}+b  aAaAaAaAaAb     y       $&      aAaAaAaAaAb
+(aA){1,5}+b    aAaAaAaAaAb     y       $&      aAaAaAaAaAb
+(aA|bB){1,5}+b bBaAbBaAbBb     y       $&      bBaAbBaAbBb
+(?:aA|bB){1,5}+b       aAbBaAbBbBb     y       $&      aAbBaAbBbBb
+(?:aA)?+b      aAb     y       $&      aAb
+(aA)?+b        aAb     y       $&      aAb
+(aA|bB)?+b     bBb     y       $&      bBb
+(?:aA|bB)?+b   bBb     y       $&      bBb
+foo(?:aA)++(?:aA)      fooaAaAaAaAaA   n       -       fooaAaAaAaAaA
+foo(aA)++(aA)  fooaAaAaAaAaA   n       -       fooaAaAaAaAaA
+foo(aA|bB)++(aA|bB)    foobBbBbBaAaA   n       -       foobBbBbBaAaA
+foo(?:aA|bB)++(?:aA|bB)        fooaAaAaAaAaA   n       -       fooaAaAaAaAaA
+foo(?:aA)*+(?:aA)      fooaAaAaAaAaA   n       -       fooaAaAaAaAaA
+foo(aA)*+(aA)  fooaAaAaAaAaA   n       -       fooaAaAaAaAaA
+foo(aA|bB)*+(aA|bB)    foobBaAbBaAaA   n       -       foobBaAbBaAaA
+foo(?:aA|bB)*+(?:aA|bB)        fooaAaAbBbBaA   n       -       fooaAaAbBbBaA
+foo(?:aA){1,5}+(?:aA)  fooaAaAaAaAaA   n       -       fooaAaAaAaAaA
+foo(aA){1,5}+(aA)      fooaAaAaAaAaA   n       -       fooaAaAaAaAaA
+foo(aA|bB){1,5}+(aA|bB)        fooaAbBbBaAaA   n       -       fooaAbBbBaAaA
+foo(?:aA|bB){1,5}+(?:aA|bB)    fooaAbBbBaAbB   n       -       fooaAbBbBaAbB
+foo(?:aA)?+(?:aA)      fooaAb  n       -       fooaAb
+foo(aA)?+(aA)  fooaAb  n       -       fooaAb
+foo(aA|bB)?+(aA|bB)    foobBb  n       -       foobBb
+foo(?:aA|bB)?+(?:aA|bB)        fooaAb  n       -       fooaAb
+foo(?:aA)++b   fooaAaAaAaAaAb  y       $&      fooaAaAaAaAaAb
+foo(aA)++b     fooaAaAaAaAaAb  y       $&      fooaAaAaAaAaAb
+foo(aA|bB)++b  foobBaAbBaAbBb  y       $&      foobBaAbBaAbBb
+foo(?:aA|bB)++b        fooaAaAbBaAaAb  y       $&      fooaAaAbBaAaAb
+foo(?:aA)*+b   fooaAaAaAaAaAb  y       $&      fooaAaAaAaAaAb
+foo(aA)*+b     fooaAaAaAaAaAb  y       $&      fooaAaAaAaAaAb
+foo(aA|bB)*+b  foobBbBaAaAaAb  y       $&      foobBbBaAaAaAb
+foo(?:aA|bB)*+b        foobBaAaAbBaAb  y       $&      foobBaAaAbBaAb
+foo(?:aA){1,5}+b       fooaAaAaAaAaAb  y       $&      fooaAaAaAaAaAb
+foo(aA){1,5}+b fooaAaAaAaAaAb  y       $&      fooaAaAaAaAaAb
+foo(aA|bB){1,5}+b      foobBaAaAaAaAb  y       $&      foobBaAaAaAaAb
+foo(?:aA|bB){1,5}+b    fooaAbBaAbBbBb  y       $&      fooaAbBaAbBbBb
+foo(?:aA)?+b   fooaAb  y       $&      fooaAb
+foo(aA)?+b     fooaAb  y       $&      fooaAb
+foo(aA|bB)?+b  foobBb  y       $&      foobBb
+foo(?:aA|bB)?+b        foobBb  y       $&      foobBb
+
+([^()]++|\([^()]*\))+  ((abc(ade)ufh()()x      y       $&      abc(ade)ufh()()x
+round\(([^()]++)\)     _I(round(xs * sz),1)    y       $1      xs * sz
+