...

Text file src/github.com/dlclark/regexp2/testoutput1

Documentation: github.com/dlclark/regexp2

     1# This set of tests is for features that are compatible with all versions of
     2# Perl >= 5.10, in non-UTF mode. It should run clean for the 8-bit, 16-bit, and
     3# 32-bit PCRE libraries, and also using the perltest.pl script.
     4    
     5#forbid_utf
     6#newline_default lf any anycrlf
     7#perltest
     8
     9/the quick brown fox/
    10    the quick brown fox
    11 0: the quick brown fox
    12    What do you know about the quick brown fox?
    13 0: the quick brown fox
    14\= Expect no match
    15    The quick brown FOX
    16No match
    17    What do you know about THE QUICK BROWN FOX?
    18No match
    19
    20/The quick brown fox/i
    21    the quick brown fox
    22 0: the quick brown fox
    23    The quick brown FOX
    24 0: The quick brown FOX
    25    What do you know about the quick brown fox?
    26 0: the quick brown fox
    27    What do you know about THE QUICK BROWN FOX?
    28 0: THE QUICK BROWN FOX
    29
    30/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
    31    abcd\t\n\r\f\a\e9;\$\\?caxyz
    32 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
    33
    34/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
    35    abxyzpqrrrabbxyyyypqAzz
    36 0: abxyzpqrrrabbxyyyypqAzz
    37    abxyzpqrrrabbxyyyypqAzz
    38 0: abxyzpqrrrabbxyyyypqAzz
    39    aabxyzpqrrrabbxyyyypqAzz
    40 0: aabxyzpqrrrabbxyyyypqAzz
    41    aaabxyzpqrrrabbxyyyypqAzz
    42 0: aaabxyzpqrrrabbxyyyypqAzz
    43    aaaabxyzpqrrrabbxyyyypqAzz
    44 0: aaaabxyzpqrrrabbxyyyypqAzz
    45    abcxyzpqrrrabbxyyyypqAzz
    46 0: abcxyzpqrrrabbxyyyypqAzz
    47    aabcxyzpqrrrabbxyyyypqAzz
    48 0: aabcxyzpqrrrabbxyyyypqAzz
    49    aaabcxyzpqrrrabbxyyyypAzz
    50 0: aaabcxyzpqrrrabbxyyyypAzz
    51    aaabcxyzpqrrrabbxyyyypqAzz
    52 0: aaabcxyzpqrrrabbxyyyypqAzz
    53    aaabcxyzpqrrrabbxyyyypqqAzz
    54 0: aaabcxyzpqrrrabbxyyyypqqAzz
    55    aaabcxyzpqrrrabbxyyyypqqqAzz
    56 0: aaabcxyzpqrrrabbxyyyypqqqAzz
    57    aaabcxyzpqrrrabbxyyyypqqqqAzz
    58 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
    59    aaabcxyzpqrrrabbxyyyypqqqqqAzz
    60 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
    61    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
    62 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
    63    aaaabcxyzpqrrrabbxyyyypqAzz
    64 0: aaaabcxyzpqrrrabbxyyyypqAzz
    65    abxyzzpqrrrabbxyyyypqAzz
    66 0: abxyzzpqrrrabbxyyyypqAzz
    67    aabxyzzzpqrrrabbxyyyypqAzz
    68 0: aabxyzzzpqrrrabbxyyyypqAzz
    69    aaabxyzzzzpqrrrabbxyyyypqAzz
    70 0: aaabxyzzzzpqrrrabbxyyyypqAzz
    71    aaaabxyzzzzpqrrrabbxyyyypqAzz
    72 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
    73    abcxyzzpqrrrabbxyyyypqAzz
    74 0: abcxyzzpqrrrabbxyyyypqAzz
    75    aabcxyzzzpqrrrabbxyyyypqAzz
    76 0: aabcxyzzzpqrrrabbxyyyypqAzz
    77    aaabcxyzzzzpqrrrabbxyyyypqAzz
    78 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
    79    aaaabcxyzzzzpqrrrabbxyyyypqAzz
    80 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
    81    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
    82 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
    83    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
    84 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
    85    aaabcxyzpqrrrabbxyyyypABzz
    86 0: aaabcxyzpqrrrabbxyyyypABzz
    87    aaabcxyzpqrrrabbxyyyypABBzz
    88 0: aaabcxyzpqrrrabbxyyyypABBzz
    89    >>>aaabxyzpqrrrabbxyyyypqAzz
    90 0: aaabxyzpqrrrabbxyyyypqAzz
    91    >aaaabxyzpqrrrabbxyyyypqAzz
    92 0: aaaabxyzpqrrrabbxyyyypqAzz
    93    >>>>abcxyzpqrrrabbxyyyypqAzz
    94 0: abcxyzpqrrrabbxyyyypqAzz
    95\= Expect no match
    96    abxyzpqrrabbxyyyypqAzz
    97No match
    98    abxyzpqrrrrabbxyyyypqAzz
    99No match
   100    abxyzpqrrrabxyyyypqAzz
   101No match
   102    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
   103No match
   104    aaaabcxyzzzzpqrrrabbbxyyypqAzz
   105No match
   106    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
   107No match
   108
   109/^(abc){1,2}zz/
   110    abczz
   111 0: abczz
   112 1: abc
   113    abcabczz
   114 0: abcabczz
   115 1: abc
   116\= Expect no match
   117    zz
   118No match
   119    abcabcabczz
   120No match
   121    >>abczz
   122No match
   123
   124/^(b+?|a){1,2}?c/
   125    bc
   126 0: bc
   127 1: b
   128    bbc
   129 0: bbc
   130 1: b
   131    bbbc
   132 0: bbbc
   133 1: bb
   134    bac
   135 0: bac
   136 1: a
   137    bbac
   138 0: bbac
   139 1: a
   140    aac
   141 0: aac
   142 1: a
   143    abbbbbbbbbbbc
   144 0: abbbbbbbbbbbc
   145 1: bbbbbbbbbbb
   146    bbbbbbbbbbbac
   147 0: bbbbbbbbbbbac
   148 1: a
   149\= Expect no match
   150    aaac
   151No match
   152    abbbbbbbbbbbac
   153No match
   154
   155/^(b+|a){1,2}c/
   156    bc
   157 0: bc
   158 1: b
   159    bbc
   160 0: bbc
   161 1: bb
   162    bbbc
   163 0: bbbc
   164 1: bbb
   165    bac
   166 0: bac
   167 1: a
   168    bbac
   169 0: bbac
   170 1: a
   171    aac
   172 0: aac
   173 1: a
   174    abbbbbbbbbbbc
   175 0: abbbbbbbbbbbc
   176 1: bbbbbbbbbbb
   177    bbbbbbbbbbbac
   178 0: bbbbbbbbbbbac
   179 1: a
   180\= Expect no match
   181    aaac
   182No match
   183    abbbbbbbbbbbac
   184No match
   185
   186/^(b+|a){1,2}?bc/
   187    bbc
   188 0: bbc
   189 1: b
   190
   191/^(b*|ba){1,2}?bc/
   192    babc
   193 0: babc
   194 1: ba
   195    bbabc
   196 0: bbabc
   197 1: ba
   198    bababc
   199 0: bababc
   200 1: ba
   201\= Expect no match
   202    bababbc
   203No match
   204    babababc
   205No match
   206
   207/^(ba|b*){1,2}?bc/
   208    babc
   209 0: babc
   210 1: ba
   211    bbabc
   212 0: bbabc
   213 1: ba
   214    bababc
   215 0: bababc
   216 1: ba
   217\= Expect no match
   218    bababbc
   219No match
   220    babababc
   221No match
   222
   223#/^\ca\cA\c[;\c:/
   224#    \x01\x01\e;z
   225# 0: \x01\x01\x1b;z
   226
   227/^[ab\]cde]/
   228    athing
   229 0: a
   230    bthing
   231 0: b
   232    ]thing
   233 0: ]
   234    cthing
   235 0: c
   236    dthing
   237 0: d
   238    ething
   239 0: e
   240\= Expect no match
   241    fthing
   242No match
   243    [thing
   244No match
   245    \\thing
   246No match
   247
   248/^[]cde]/
   249    ]thing
   250 0: ]
   251    cthing
   252 0: c
   253    dthing
   254 0: d
   255    ething
   256 0: e
   257\= Expect no match
   258    athing
   259No match
   260    fthing
   261No match
   262
   263/^[^ab\]cde]/
   264    fthing
   265 0: f
   266    [thing
   267 0: [
   268    \\thing
   269 0: \
   270\= Expect no match
   271    athing
   272No match
   273    bthing
   274No match
   275    ]thing
   276No match
   277    cthing
   278No match
   279    dthing
   280No match
   281    ething
   282No match
   283
   284/^[^]cde]/
   285    athing
   286 0: a
   287    fthing
   288 0: f
   289\= Expect no match
   290    ]thing
   291No match
   292    cthing
   293No match
   294    dthing
   295No match
   296    ething
   297No match
   298
   299# DLC - I don't get this one
   300#/^\/
   301#    
   302# 0: \x81
   303
   304#updated to handle 16-bits utf8
   305/^ÿ/
   306    ÿ
   307 0: \xc3\xbf
   308
   309/^[0-9]+$/
   310    0
   311 0: 0
   312    1
   313 0: 1
   314    2
   315 0: 2
   316    3
   317 0: 3
   318    4
   319 0: 4
   320    5
   321 0: 5
   322    6
   323 0: 6
   324    7
   325 0: 7
   326    8
   327 0: 8
   328    9
   329 0: 9
   330    10
   331 0: 10
   332    100
   333 0: 100
   334\= Expect no match
   335    abc
   336No match
   337
   338/^.*nter/
   339    enter
   340 0: enter
   341    inter
   342 0: inter
   343    uponter
   344 0: uponter
   345
   346/^xxx[0-9]+$/
   347    xxx0
   348 0: xxx0
   349    xxx1234
   350 0: xxx1234
   351\= Expect no match
   352    xxx
   353No match
   354
   355/^.+[0-9][0-9][0-9]$/
   356    x123
   357 0: x123
   358    x1234
   359 0: x1234
   360    xx123
   361 0: xx123
   362    123456
   363 0: 123456
   364\= Expect no match
   365    123
   366No match
   367
   368/^.+?[0-9][0-9][0-9]$/
   369    x123
   370 0: x123
   371    x1234
   372 0: x1234
   373    xx123
   374 0: xx123
   375    123456
   376 0: 123456
   377\= Expect no match
   378    123
   379No match
   380
   381/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
   382    abc!pqr=apquxz.ixr.zzz.ac.uk
   383 0: abc!pqr=apquxz.ixr.zzz.ac.uk
   384 1: abc
   385 2: pqr
   386\= Expect no match
   387    !pqr=apquxz.ixr.zzz.ac.uk
   388No match
   389    abc!=apquxz.ixr.zzz.ac.uk
   390No match
   391    abc!pqr=apquxz:ixr.zzz.ac.uk
   392No match
   393    abc!pqr=apquxz.ixr.zzz.ac.ukk
   394No match
   395
   396/:/
   397    Well, we need a colon: somewhere
   398 0: :
   399\= Expect no match
   400    Fail without a colon
   401No match
   402
   403/([\da-f:]+)$/i
   404    0abc
   405 0: 0abc
   406 1: 0abc
   407    abc
   408 0: abc
   409 1: abc
   410    fed
   411 0: fed
   412 1: fed
   413    E
   414 0: E
   415 1: E
   416    ::
   417 0: ::
   418 1: ::
   419    5f03:12C0::932e
   420 0: 5f03:12C0::932e
   421 1: 5f03:12C0::932e
   422    fed def
   423 0: def
   424 1: def
   425    Any old stuff
   426 0: ff
   427 1: ff
   428\= Expect no match
   429    0zzz
   430No match
   431    gzzz
   432No match
   433    fed\x20
   434No match
   435    Any old rubbish
   436No match
   437
   438/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
   439    .1.2.3
   440 0: .1.2.3
   441 1: 1
   442 2: 2
   443 3: 3
   444    A.12.123.0
   445 0: A.12.123.0
   446 1: 12
   447 2: 123
   448 3: 0
   449\= Expect no match
   450    .1.2.3333
   451No match
   452    1.2.3
   453No match
   454    1234.2.3
   455No match
   456
   457/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
   458    1 IN SOA non-sp1 non-sp2(
   459 0: 1 IN SOA non-sp1 non-sp2(
   460 1: 1
   461 2: non-sp1
   462 3: non-sp2
   463    1    IN    SOA    non-sp1    non-sp2   (
   464 0: 1    IN    SOA    non-sp1    non-sp2   (
   465 1: 1
   466 2: non-sp1
   467 3: non-sp2
   468\= Expect no match
   469    1IN SOA non-sp1 non-sp2(
   470No match
   471
   472/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
   473    a.
   474 0: a.
   475    Z.
   476 0: Z.
   477    2.
   478 0: 2.
   479    ab-c.pq-r.
   480 0: ab-c.pq-r.
   481 1: .pq-r
   482    sxk.zzz.ac.uk.
   483 0: sxk.zzz.ac.uk.
   484 1: .uk
   485    x-.y-.
   486 0: x-.y-.
   487 1: .y-
   488\= Expect no match
   489    -abc.peq.
   490No match
   491
   492/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
   493    *.a
   494 0: *.a
   495    *.b0-a
   496 0: *.b0-a
   497 1: 0-a
   498    *.c3-b.c
   499 0: *.c3-b.c
   500 1: 3-b
   501 2: .c
   502    *.c-a.b-c
   503 0: *.c-a.b-c
   504 1: -a
   505 2: .b-c
   506 3: -c
   507\= Expect no match
   508    *.0
   509No match
   510    *.a-
   511No match
   512    *.a-b.c-
   513No match
   514    *.c-a.0-c
   515No match
   516
   517/^(?=ab(de))(abd)(e)/
   518    abde
   519 0: abde
   520 1: de
   521 2: abd
   522 3: e
   523
   524/^(?!(ab)de|x)(abd)(f)/
   525    abdf
   526 0: abdf
   527 1: <unset>
   528 2: abd
   529 3: f
   530
   531/^(?=(ab(cd)))(ab)/
   532    abcd
   533 0: ab
   534 1: abcd
   535 2: cd
   536 3: ab
   537
   538/^[\da-f](\.[\da-f])*$/i
   539    a.b.c.d
   540 0: a.b.c.d
   541 1: .d
   542    A.B.C.D
   543 0: A.B.C.D
   544 1: .D
   545    a.b.c.1.2.3.C
   546 0: a.b.c.1.2.3.C
   547 1: .C
   548
   549/^\".*\"\s*(;.*)?$/
   550    \"1234\"
   551 0: "1234"
   552    \"abcd\" ;
   553 0: "abcd" ;
   554 1: ;
   555    \"\" ; rhubarb
   556 0: "" ; rhubarb
   557 1: ; rhubarb
   558\= Expect no match
   559    \"1234\" : things
   560No match
   561
   562/^$/
   563    \
   564 0: 
   565\= Expect no match
   566    A non-empty line
   567No match
   568
   569/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
   570    ab c
   571 0: ab c
   572\= Expect no match
   573    abc
   574No match
   575    ab cde
   576No match
   577
   578/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
   579    ab c
   580 0: ab c
   581\= Expect no match
   582    abc
   583No match
   584    ab cde
   585No match
   586
   587/^   a\ b[c ]d       $/x
   588    a bcd
   589 0: a bcd
   590    a b d
   591 0: a b d
   592\= Expect no match
   593    abcd
   594No match
   595    ab d
   596No match
   597
   598/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
   599    abcdefhijklm
   600 0: abcdefhijklm
   601 1: abc
   602 2: bc
   603 3: c
   604 4: def
   605 5: ef
   606 6: f
   607 7: hij
   608 8: ij
   609 9: j
   61010: klm
   61111: lm
   61212: m
   613
   614/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
   615    abcdefhijklm
   616 0: abcdefhijklm
   617 1: bc
   618 2: c
   619 3: ef
   620 4: f
   621 5: ij
   622 6: j
   623 7: lm
   624 8: m
   625
   626#/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
   627#    a+ Z0+\x08\n\x1d\x12
   628# 0: a+ Z0+\x08\x0a\x1d\x12
   629
   630/^[.^$|()*+?{,}]+/
   631    .^\$(*+)|{?,?}
   632 0: .^$(*+)|{?,?}
   633
   634/^a*\w/
   635    z
   636 0: z
   637    az
   638 0: az
   639    aaaz
   640 0: aaaz
   641    a
   642 0: a
   643    aa
   644 0: aa
   645    aaaa
   646 0: aaaa
   647    a+
   648 0: a
   649    aa+
   650 0: aa
   651
   652/^a*?\w/
   653    z
   654 0: z
   655    az
   656 0: a
   657    aaaz
   658 0: a
   659    a
   660 0: a
   661    aa
   662 0: a
   663    aaaa
   664 0: a
   665    a+
   666 0: a
   667    aa+
   668 0: a
   669
   670/^a+\w/
   671    az
   672 0: az
   673    aaaz
   674 0: aaaz
   675    aa
   676 0: aa
   677    aaaa
   678 0: aaaa
   679    aa+
   680 0: aa
   681
   682/^a+?\w/
   683    az
   684 0: az
   685    aaaz
   686 0: aa
   687    aa
   688 0: aa
   689    aaaa
   690 0: aa
   691    aa+
   692 0: aa
   693
   694/^\d{8}\w{2,}/
   695    1234567890
   696 0: 1234567890
   697    12345678ab
   698 0: 12345678ab
   699    12345678__
   700 0: 12345678__
   701\= Expect no match
   702    1234567
   703No match
   704
   705/^[aeiou\d]{4,5}$/
   706    uoie
   707 0: uoie
   708    1234
   709 0: 1234
   710    12345
   711 0: 12345
   712    aaaaa
   713 0: aaaaa
   714\= Expect no match
   715    123456
   716No match
   717
   718/^[aeiou\d]{4,5}?/
   719    uoie
   720 0: uoie
   721    1234
   722 0: 1234
   723    12345
   724 0: 1234
   725    aaaaa
   726 0: aaaa
   727    123456
   728 0: 1234
   729
   730/\A(abc|def)=(\1){2,3}\Z/
   731    abc=abcabc
   732 0: abc=abcabc
   733 1: abc
   734 2: abc
   735    def=defdefdef
   736 0: def=defdefdef
   737 1: def
   738 2: def
   739\= Expect no match
   740    abc=defdef
   741No match
   742
   743/^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
   744    abcdefghijkcda2
   745 0: abcdefghijkcda2
   746 1: a
   747 2: b
   748 3: c
   749 4: d
   750 5: e
   751 6: f
   752 7: g
   753 8: h
   754 9: i
   75510: j
   75611: k
   75712: cd
   758    abcdefghijkkkkcda2
   759 0: abcdefghijkkkkcda2
   760 1: a
   761 2: b
   762 3: c
   763 4: d
   764 5: e
   765 6: f
   766 7: g
   767 8: h
   768 9: i
   76910: j
   77011: k
   77112: cd
   772
   773/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
   774    cataract cataract23
   775 0: cataract cataract23
   776 1: cataract
   777 2: aract
   778 3: ract
   779 4: 
   780 5: 3
   781    catatonic catatonic23
   782 0: catatonic catatonic23
   783 1: catatonic
   784 2: atonic
   785 3: tonic
   786 4: 
   787 5: 3
   788    caterpillar caterpillar23
   789 0: caterpillar caterpillar23
   790 1: caterpillar
   791 2: erpillar
   792 3: <unset>
   793 4: 
   794 5: 3
   795
   796
   797/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
   798    From abcd  Mon Sep 01 12:33:02 1997
   799 0: From abcd  Mon Sep 01 12:33
   800 1: abcd
   801
   802/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
   803    From abcd  Mon Sep 01 12:33:02 1997
   804 0: From abcd  Mon Sep 01 12:33
   805 1: Sep 
   806    From abcd  Mon Sep  1 12:33:02 1997
   807 0: From abcd  Mon Sep  1 12:33
   808 1: Sep  
   809\= Expect no match
   810    From abcd  Sep 01 12:33:02 1997
   811No match
   812
   813/^12.34/s
   814    12\n34
   815 0: 12\x0a34
   816    12\r34
   817 0: 12\x0d34
   818
   819/\w+(?=\t)/
   820    the quick brown\t fox
   821 0: brown
   822
   823/foo(?!bar)(.*)/
   824    foobar is foolish see?
   825 0: foolish see?
   826 1: lish see?
   827
   828/(?:(?!foo)...|^.{0,2})bar(.*)/
   829    foobar crowbar etc
   830 0: rowbar etc
   831 1:  etc
   832    barrel
   833 0: barrel
   834 1: rel
   835    2barrel
   836 0: 2barrel
   837 1: rel
   838    A barrel
   839 0: A barrel
   840 1: rel
   841
   842/^(\D*)(?=\d)(?!123)/
   843    abc456
   844 0: abc
   845 1: abc
   846\= Expect no match
   847    abc123
   848No match
   849
   850/^1234(?# test newlines
   851  inside)/
   852    1234
   853 0: 1234
   854
   855/^1234 #comment in extended re
   856  /x
   857    1234
   858 0: 1234
   859
   860/#rhubarb
   861  abcd/x
   862    abcd
   863 0: abcd
   864
   865/^abcd#rhubarb/x
   866    abcd
   867 0: abcd
   868
   869/^(a)\1{2,3}(.)/
   870    aaab
   871 0: aaab
   872 1: a
   873 2: b
   874    aaaab
   875 0: aaaab
   876 1: a
   877 2: b
   878    aaaaab
   879 0: aaaaa
   880 1: a
   881 2: a
   882    aaaaaab
   883 0: aaaaa
   884 1: a
   885 2: a
   886
   887/(?!^)abc/
   888    the abc
   889 0: abc
   890\= Expect no match
   891    abc
   892No match
   893
   894/(?=^)abc/
   895    abc
   896 0: abc
   897\= Expect no match
   898    the abc
   899No match
   900
   901/^[ab]{1,3}(ab*|b)/
   902    aabbbbb
   903 0: aabb
   904 1: b
   905
   906/^[ab]{1,3}?(ab*|b)/
   907    aabbbbb
   908 0: aabbbbb
   909 1: abbbbb
   910
   911/^[ab]{1,3}?(ab*?|b)/
   912    aabbbbb
   913 0: aa
   914 1: a
   915
   916/^[ab]{1,3}(ab*?|b)/
   917    aabbbbb
   918 0: aabb
   919 1: b
   920
   921/  (?: [\040\t] |  \(
   922(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   923\)  )*                          # optional leading comment
   924(?:    (?:
   925[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
   926(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
   927|
   928" (?:                      # opening quote...
   929[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
   930|                     #    or
   931\\ [^\x80-\xff]           #   Escaped something (something != CR)
   932)* "  # closing quote
   933)                    # initial word
   934(?:  (?: [\040\t] |  \(
   935(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   936\)  )*  \.  (?: [\040\t] |  \(
   937(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   938\)  )*   (?:
   939[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
   940(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
   941|
   942" (?:                      # opening quote...
   943[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
   944|                     #    or
   945\\ [^\x80-\xff]           #   Escaped something (something != CR)
   946)* "  # closing quote
   947)  )* # further okay, if led by a period
   948(?: [\040\t] |  \(
   949(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   950\)  )*  @  (?: [\040\t] |  \(
   951(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   952\)  )*    (?:
   953[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
   954(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
   955|   \[                         # [
   956(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
   957\]                        #           ]
   958)                           # initial subdomain
   959(?:                                  #
   960(?: [\040\t] |  \(
   961(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   962\)  )*  \.                        # if led by a period...
   963(?: [\040\t] |  \(
   964(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   965\)  )*   (?:
   966[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
   967(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
   968|   \[                         # [
   969(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
   970\]                        #           ]
   971)                     #   ...further okay
   972)*
   973# address
   974|                     #  or
   975(?:
   976[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
   977(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
   978|
   979" (?:                      # opening quote...
   980[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
   981|                     #    or
   982\\ [^\x80-\xff]           #   Escaped something (something != CR)
   983)* "  # closing quote
   984)             # one word, optionally followed by....
   985(?:
   986[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
   987\(
   988(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
   989\)       |  # comments, or...
   990
   991" (?:                      # opening quote...
   992[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
   993|                     #    or
   994\\ [^\x80-\xff]           #   Escaped something (something != CR)
   995)* "  # closing quote
   996# quoted strings
   997)*
   998<  (?: [\040\t] |  \(
   999(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1000\)  )*                     # leading <
  1001(?:  @  (?: [\040\t] |  \(
  1002(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1003\)  )*    (?:
  1004[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1005(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1006|   \[                         # [
  1007(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
  1008\]                        #           ]
  1009)                           # initial subdomain
  1010(?:                                  #
  1011(?: [\040\t] |  \(
  1012(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1013\)  )*  \.                        # if led by a period...
  1014(?: [\040\t] |  \(
  1015(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1016\)  )*   (?:
  1017[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1018(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1019|   \[                         # [
  1020(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
  1021\]                        #           ]
  1022)                     #   ...further okay
  1023)*
  1024
  1025(?:  (?: [\040\t] |  \(
  1026(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1027\)  )*  ,  (?: [\040\t] |  \(
  1028(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1029\)  )*  @  (?: [\040\t] |  \(
  1030(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1031\)  )*    (?:
  1032[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1033(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1034|   \[                         # [
  1035(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
  1036\]                        #           ]
  1037)                           # initial subdomain
  1038(?:                                  #
  1039(?: [\040\t] |  \(
  1040(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1041\)  )*  \.                        # if led by a period...
  1042(?: [\040\t] |  \(
  1043(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1044\)  )*   (?:
  1045[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1046(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1047|   \[                         # [
  1048(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
  1049\]                        #           ]
  1050)                     #   ...further okay
  1051)*
  1052)* # further okay, if led by comma
  1053:                                # closing colon
  1054(?: [\040\t] |  \(
  1055(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1056\)  )*  )? #       optional route
  1057(?:
  1058[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1059(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1060|
  1061" (?:                      # opening quote...
  1062[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
  1063|                     #    or
  1064\\ [^\x80-\xff]           #   Escaped something (something != CR)
  1065)* "  # closing quote
  1066)                    # initial word
  1067(?:  (?: [\040\t] |  \(
  1068(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1069\)  )*  \.  (?: [\040\t] |  \(
  1070(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1071\)  )*   (?:
  1072[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1073(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1074|
  1075" (?:                      # opening quote...
  1076[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
  1077|                     #    or
  1078\\ [^\x80-\xff]           #   Escaped something (something != CR)
  1079)* "  # closing quote
  1080)  )* # further okay, if led by a period
  1081(?: [\040\t] |  \(
  1082(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1083\)  )*  @  (?: [\040\t] |  \(
  1084(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1085\)  )*    (?:
  1086[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1087(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1088|   \[                         # [
  1089(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
  1090\]                        #           ]
  1091)                           # initial subdomain
  1092(?:                                  #
  1093(?: [\040\t] |  \(
  1094(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1095\)  )*  \.                        # if led by a period...
  1096(?: [\040\t] |  \(
  1097(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1098\)  )*   (?:
  1099[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1100(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1101|   \[                         # [
  1102(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
  1103\]                        #           ]
  1104)                     #   ...further okay
  1105)*
  1106#       address spec
  1107(?: [\040\t] |  \(
  1108(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1109\)  )*  > #                  trailing >
  1110# name and address
  1111)  (?: [\040\t] |  \(
  1112(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
  1113\)  )*                       # optional trailing comment
  1114/x
  1115    Alan Other <user\@dom.ain>
  1116 0: Alan Other <user@dom.ain>
  1117    <user\@dom.ain>
  1118 0: user@dom.ain
  1119    user\@dom.ain
  1120 0: user@dom.ain
  1121    \"A. Other\" <user.1234\@dom.ain> (a comment)
  1122 0: "A. Other" <user.1234@dom.ain> (a comment)
  1123    A. Other <user.1234\@dom.ain> (a comment)
  1124 0:  Other <user.1234@dom.ain> (a comment)
  1125    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
  1126 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
  1127    A missing angle <user\@some.where
  1128 0: user@some.where
  1129\= Expect no match
  1130    The quick brown fox
  1131No match
  1132
  1133/[\040\t]*                    # Nab whitespace.
  1134(?:
  1135\(                              #  (
  1136[^\\\x80-\xff\n\015()] *                             #     normal*
  1137(?:                                 #       (
  1138(?:  \\ [^\x80-\xff]  |
  1139\(                            #  (
  1140[^\\\x80-\xff\n\015()] *                            #     normal*
  1141(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1142\)                           #                       )
  1143)    #         special
  1144[^\\\x80-\xff\n\015()] *                         #         normal*
  1145)*                                  #            )*
  1146\)                             #                )
  1147[\040\t]* )*    # If comment found, allow more spaces.
  1148# optional leading comment
  1149(?:
  1150(?:
  1151[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1152(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1153# Atom
  1154|                       #  or
  1155"                                     # "
  1156[^\\\x80-\xff\n\015"] *                            #   normal
  1157(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
  1158"                                     #        "
  1159# Quoted string
  1160)
  1161[\040\t]*                    # Nab whitespace.
  1162(?:
  1163\(                              #  (
  1164[^\\\x80-\xff\n\015()] *                             #     normal*
  1165(?:                                 #       (
  1166(?:  \\ [^\x80-\xff]  |
  1167\(                            #  (
  1168[^\\\x80-\xff\n\015()] *                            #     normal*
  1169(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1170\)                           #                       )
  1171)    #         special
  1172[^\\\x80-\xff\n\015()] *                         #         normal*
  1173)*                                  #            )*
  1174\)                             #                )
  1175[\040\t]* )*    # If comment found, allow more spaces.
  1176(?:
  1177\.
  1178[\040\t]*                    # Nab whitespace.
  1179(?:
  1180\(                              #  (
  1181[^\\\x80-\xff\n\015()] *                             #     normal*
  1182(?:                                 #       (
  1183(?:  \\ [^\x80-\xff]  |
  1184\(                            #  (
  1185[^\\\x80-\xff\n\015()] *                            #     normal*
  1186(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1187\)                           #                       )
  1188)    #         special
  1189[^\\\x80-\xff\n\015()] *                         #         normal*
  1190)*                                  #            )*
  1191\)                             #                )
  1192[\040\t]* )*    # If comment found, allow more spaces.
  1193(?:
  1194[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1195(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1196# Atom
  1197|                       #  or
  1198"                                     # "
  1199[^\\\x80-\xff\n\015"] *                            #   normal
  1200(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
  1201"                                     #        "
  1202# Quoted string
  1203)
  1204[\040\t]*                    # Nab whitespace.
  1205(?:
  1206\(                              #  (
  1207[^\\\x80-\xff\n\015()] *                             #     normal*
  1208(?:                                 #       (
  1209(?:  \\ [^\x80-\xff]  |
  1210\(                            #  (
  1211[^\\\x80-\xff\n\015()] *                            #     normal*
  1212(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1213\)                           #                       )
  1214)    #         special
  1215[^\\\x80-\xff\n\015()] *                         #         normal*
  1216)*                                  #            )*
  1217\)                             #                )
  1218[\040\t]* )*    # If comment found, allow more spaces.
  1219# additional words
  1220)*
  1221@
  1222[\040\t]*                    # Nab whitespace.
  1223(?:
  1224\(                              #  (
  1225[^\\\x80-\xff\n\015()] *                             #     normal*
  1226(?:                                 #       (
  1227(?:  \\ [^\x80-\xff]  |
  1228\(                            #  (
  1229[^\\\x80-\xff\n\015()] *                            #     normal*
  1230(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1231\)                           #                       )
  1232)    #         special
  1233[^\\\x80-\xff\n\015()] *                         #         normal*
  1234)*                                  #            )*
  1235\)                             #                )
  1236[\040\t]* )*    # If comment found, allow more spaces.
  1237(?:
  1238[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1239(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1240|
  1241\[                            # [
  1242(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1243\]                           #           ]
  1244)
  1245[\040\t]*                    # Nab whitespace.
  1246(?:
  1247\(                              #  (
  1248[^\\\x80-\xff\n\015()] *                             #     normal*
  1249(?:                                 #       (
  1250(?:  \\ [^\x80-\xff]  |
  1251\(                            #  (
  1252[^\\\x80-\xff\n\015()] *                            #     normal*
  1253(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1254\)                           #                       )
  1255)    #         special
  1256[^\\\x80-\xff\n\015()] *                         #         normal*
  1257)*                                  #            )*
  1258\)                             #                )
  1259[\040\t]* )*    # If comment found, allow more spaces.
  1260# optional trailing comments
  1261(?:
  1262\.
  1263[\040\t]*                    # Nab whitespace.
  1264(?:
  1265\(                              #  (
  1266[^\\\x80-\xff\n\015()] *                             #     normal*
  1267(?:                                 #       (
  1268(?:  \\ [^\x80-\xff]  |
  1269\(                            #  (
  1270[^\\\x80-\xff\n\015()] *                            #     normal*
  1271(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1272\)                           #                       )
  1273)    #         special
  1274[^\\\x80-\xff\n\015()] *                         #         normal*
  1275)*                                  #            )*
  1276\)                             #                )
  1277[\040\t]* )*    # If comment found, allow more spaces.
  1278(?:
  1279[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1280(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1281|
  1282\[                            # [
  1283(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1284\]                           #           ]
  1285)
  1286[\040\t]*                    # Nab whitespace.
  1287(?:
  1288\(                              #  (
  1289[^\\\x80-\xff\n\015()] *                             #     normal*
  1290(?:                                 #       (
  1291(?:  \\ [^\x80-\xff]  |
  1292\(                            #  (
  1293[^\\\x80-\xff\n\015()] *                            #     normal*
  1294(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1295\)                           #                       )
  1296)    #         special
  1297[^\\\x80-\xff\n\015()] *                         #         normal*
  1298)*                                  #            )*
  1299\)                             #                )
  1300[\040\t]* )*    # If comment found, allow more spaces.
  1301# optional trailing comments
  1302)*
  1303# address
  1304|                             #  or
  1305(?:
  1306[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1307(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1308# Atom
  1309|                       #  or
  1310"                                     # "
  1311[^\\\x80-\xff\n\015"] *                            #   normal
  1312(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
  1313"                                     #        "
  1314# Quoted string
  1315)
  1316# leading word
  1317[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
  1318(?:
  1319(?:
  1320\(                              #  (
  1321[^\\\x80-\xff\n\015()] *                             #     normal*
  1322(?:                                 #       (
  1323(?:  \\ [^\x80-\xff]  |
  1324\(                            #  (
  1325[^\\\x80-\xff\n\015()] *                            #     normal*
  1326(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1327\)                           #                       )
  1328)    #         special
  1329[^\\\x80-\xff\n\015()] *                         #         normal*
  1330)*                                  #            )*
  1331\)                             #                )
  1332|
  1333"                                     # "
  1334[^\\\x80-\xff\n\015"] *                            #   normal
  1335(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
  1336"                                     #        "
  1337) # "special" comment or quoted string
  1338[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
  1339)*
  1340<
  1341[\040\t]*                    # Nab whitespace.
  1342(?:
  1343\(                              #  (
  1344[^\\\x80-\xff\n\015()] *                             #     normal*
  1345(?:                                 #       (
  1346(?:  \\ [^\x80-\xff]  |
  1347\(                            #  (
  1348[^\\\x80-\xff\n\015()] *                            #     normal*
  1349(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1350\)                           #                       )
  1351)    #         special
  1352[^\\\x80-\xff\n\015()] *                         #         normal*
  1353)*                                  #            )*
  1354\)                             #                )
  1355[\040\t]* )*    # If comment found, allow more spaces.
  1356# <
  1357(?:
  1358@
  1359[\040\t]*                    # Nab whitespace.
  1360(?:
  1361\(                              #  (
  1362[^\\\x80-\xff\n\015()] *                             #     normal*
  1363(?:                                 #       (
  1364(?:  \\ [^\x80-\xff]  |
  1365\(                            #  (
  1366[^\\\x80-\xff\n\015()] *                            #     normal*
  1367(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1368\)                           #                       )
  1369)    #         special
  1370[^\\\x80-\xff\n\015()] *                         #         normal*
  1371)*                                  #            )*
  1372\)                             #                )
  1373[\040\t]* )*    # If comment found, allow more spaces.
  1374(?:
  1375[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1376(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1377|
  1378\[                            # [
  1379(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1380\]                           #           ]
  1381)
  1382[\040\t]*                    # Nab whitespace.
  1383(?:
  1384\(                              #  (
  1385[^\\\x80-\xff\n\015()] *                             #     normal*
  1386(?:                                 #       (
  1387(?:  \\ [^\x80-\xff]  |
  1388\(                            #  (
  1389[^\\\x80-\xff\n\015()] *                            #     normal*
  1390(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1391\)                           #                       )
  1392)    #         special
  1393[^\\\x80-\xff\n\015()] *                         #         normal*
  1394)*                                  #            )*
  1395\)                             #                )
  1396[\040\t]* )*    # If comment found, allow more spaces.
  1397# optional trailing comments
  1398(?:
  1399\.
  1400[\040\t]*                    # Nab whitespace.
  1401(?:
  1402\(                              #  (
  1403[^\\\x80-\xff\n\015()] *                             #     normal*
  1404(?:                                 #       (
  1405(?:  \\ [^\x80-\xff]  |
  1406\(                            #  (
  1407[^\\\x80-\xff\n\015()] *                            #     normal*
  1408(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1409\)                           #                       )
  1410)    #         special
  1411[^\\\x80-\xff\n\015()] *                         #         normal*
  1412)*                                  #            )*
  1413\)                             #                )
  1414[\040\t]* )*    # If comment found, allow more spaces.
  1415(?:
  1416[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1417(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1418|
  1419\[                            # [
  1420(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1421\]                           #           ]
  1422)
  1423[\040\t]*                    # Nab whitespace.
  1424(?:
  1425\(                              #  (
  1426[^\\\x80-\xff\n\015()] *                             #     normal*
  1427(?:                                 #       (
  1428(?:  \\ [^\x80-\xff]  |
  1429\(                            #  (
  1430[^\\\x80-\xff\n\015()] *                            #     normal*
  1431(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1432\)                           #                       )
  1433)    #         special
  1434[^\\\x80-\xff\n\015()] *                         #         normal*
  1435)*                                  #            )*
  1436\)                             #                )
  1437[\040\t]* )*    # If comment found, allow more spaces.
  1438# optional trailing comments
  1439)*
  1440(?: ,
  1441[\040\t]*                    # Nab whitespace.
  1442(?:
  1443\(                              #  (
  1444[^\\\x80-\xff\n\015()] *                             #     normal*
  1445(?:                                 #       (
  1446(?:  \\ [^\x80-\xff]  |
  1447\(                            #  (
  1448[^\\\x80-\xff\n\015()] *                            #     normal*
  1449(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1450\)                           #                       )
  1451)    #         special
  1452[^\\\x80-\xff\n\015()] *                         #         normal*
  1453)*                                  #            )*
  1454\)                             #                )
  1455[\040\t]* )*    # If comment found, allow more spaces.
  1456@
  1457[\040\t]*                    # Nab whitespace.
  1458(?:
  1459\(                              #  (
  1460[^\\\x80-\xff\n\015()] *                             #     normal*
  1461(?:                                 #       (
  1462(?:  \\ [^\x80-\xff]  |
  1463\(                            #  (
  1464[^\\\x80-\xff\n\015()] *                            #     normal*
  1465(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1466\)                           #                       )
  1467)    #         special
  1468[^\\\x80-\xff\n\015()] *                         #         normal*
  1469)*                                  #            )*
  1470\)                             #                )
  1471[\040\t]* )*    # If comment found, allow more spaces.
  1472(?:
  1473[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1474(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1475|
  1476\[                            # [
  1477(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1478\]                           #           ]
  1479)
  1480[\040\t]*                    # Nab whitespace.
  1481(?:
  1482\(                              #  (
  1483[^\\\x80-\xff\n\015()] *                             #     normal*
  1484(?:                                 #       (
  1485(?:  \\ [^\x80-\xff]  |
  1486\(                            #  (
  1487[^\\\x80-\xff\n\015()] *                            #     normal*
  1488(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1489\)                           #                       )
  1490)    #         special
  1491[^\\\x80-\xff\n\015()] *                         #         normal*
  1492)*                                  #            )*
  1493\)                             #                )
  1494[\040\t]* )*    # If comment found, allow more spaces.
  1495# optional trailing comments
  1496(?:
  1497\.
  1498[\040\t]*                    # Nab whitespace.
  1499(?:
  1500\(                              #  (
  1501[^\\\x80-\xff\n\015()] *                             #     normal*
  1502(?:                                 #       (
  1503(?:  \\ [^\x80-\xff]  |
  1504\(                            #  (
  1505[^\\\x80-\xff\n\015()] *                            #     normal*
  1506(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1507\)                           #                       )
  1508)    #         special
  1509[^\\\x80-\xff\n\015()] *                         #         normal*
  1510)*                                  #            )*
  1511\)                             #                )
  1512[\040\t]* )*    # If comment found, allow more spaces.
  1513(?:
  1514[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1515(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1516|
  1517\[                            # [
  1518(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1519\]                           #           ]
  1520)
  1521[\040\t]*                    # Nab whitespace.
  1522(?:
  1523\(                              #  (
  1524[^\\\x80-\xff\n\015()] *                             #     normal*
  1525(?:                                 #       (
  1526(?:  \\ [^\x80-\xff]  |
  1527\(                            #  (
  1528[^\\\x80-\xff\n\015()] *                            #     normal*
  1529(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1530\)                           #                       )
  1531)    #         special
  1532[^\\\x80-\xff\n\015()] *                         #         normal*
  1533)*                                  #            )*
  1534\)                             #                )
  1535[\040\t]* )*    # If comment found, allow more spaces.
  1536# optional trailing comments
  1537)*
  1538)*  # additional domains
  1539:
  1540[\040\t]*                    # Nab whitespace.
  1541(?:
  1542\(                              #  (
  1543[^\\\x80-\xff\n\015()] *                             #     normal*
  1544(?:                                 #       (
  1545(?:  \\ [^\x80-\xff]  |
  1546\(                            #  (
  1547[^\\\x80-\xff\n\015()] *                            #     normal*
  1548(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1549\)                           #                       )
  1550)    #         special
  1551[^\\\x80-\xff\n\015()] *                         #         normal*
  1552)*                                  #            )*
  1553\)                             #                )
  1554[\040\t]* )*    # If comment found, allow more spaces.
  1555# optional trailing comments
  1556)?     #       optional route
  1557(?:
  1558[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1559(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1560# Atom
  1561|                       #  or
  1562"                                     # "
  1563[^\\\x80-\xff\n\015"] *                            #   normal
  1564(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
  1565"                                     #        "
  1566# Quoted string
  1567)
  1568[\040\t]*                    # Nab whitespace.
  1569(?:
  1570\(                              #  (
  1571[^\\\x80-\xff\n\015()] *                             #     normal*
  1572(?:                                 #       (
  1573(?:  \\ [^\x80-\xff]  |
  1574\(                            #  (
  1575[^\\\x80-\xff\n\015()] *                            #     normal*
  1576(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1577\)                           #                       )
  1578)    #         special
  1579[^\\\x80-\xff\n\015()] *                         #         normal*
  1580)*                                  #            )*
  1581\)                             #                )
  1582[\040\t]* )*    # If comment found, allow more spaces.
  1583(?:
  1584\.
  1585[\040\t]*                    # Nab whitespace.
  1586(?:
  1587\(                              #  (
  1588[^\\\x80-\xff\n\015()] *                             #     normal*
  1589(?:                                 #       (
  1590(?:  \\ [^\x80-\xff]  |
  1591\(                            #  (
  1592[^\\\x80-\xff\n\015()] *                            #     normal*
  1593(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1594\)                           #                       )
  1595)    #         special
  1596[^\\\x80-\xff\n\015()] *                         #         normal*
  1597)*                                  #            )*
  1598\)                             #                )
  1599[\040\t]* )*    # If comment found, allow more spaces.
  1600(?:
  1601[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1602(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1603# Atom
  1604|                       #  or
  1605"                                     # "
  1606[^\\\x80-\xff\n\015"] *                            #   normal
  1607(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
  1608"                                     #        "
  1609# Quoted string
  1610)
  1611[\040\t]*                    # Nab whitespace.
  1612(?:
  1613\(                              #  (
  1614[^\\\x80-\xff\n\015()] *                             #     normal*
  1615(?:                                 #       (
  1616(?:  \\ [^\x80-\xff]  |
  1617\(                            #  (
  1618[^\\\x80-\xff\n\015()] *                            #     normal*
  1619(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1620\)                           #                       )
  1621)    #         special
  1622[^\\\x80-\xff\n\015()] *                         #         normal*
  1623)*                                  #            )*
  1624\)                             #                )
  1625[\040\t]* )*    # If comment found, allow more spaces.
  1626# additional words
  1627)*
  1628@
  1629[\040\t]*                    # Nab whitespace.
  1630(?:
  1631\(                              #  (
  1632[^\\\x80-\xff\n\015()] *                             #     normal*
  1633(?:                                 #       (
  1634(?:  \\ [^\x80-\xff]  |
  1635\(                            #  (
  1636[^\\\x80-\xff\n\015()] *                            #     normal*
  1637(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1638\)                           #                       )
  1639)    #         special
  1640[^\\\x80-\xff\n\015()] *                         #         normal*
  1641)*                                  #            )*
  1642\)                             #                )
  1643[\040\t]* )*    # If comment found, allow more spaces.
  1644(?:
  1645[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1646(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1647|
  1648\[                            # [
  1649(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1650\]                           #           ]
  1651)
  1652[\040\t]*                    # Nab whitespace.
  1653(?:
  1654\(                              #  (
  1655[^\\\x80-\xff\n\015()] *                             #     normal*
  1656(?:                                 #       (
  1657(?:  \\ [^\x80-\xff]  |
  1658\(                            #  (
  1659[^\\\x80-\xff\n\015()] *                            #     normal*
  1660(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1661\)                           #                       )
  1662)    #         special
  1663[^\\\x80-\xff\n\015()] *                         #         normal*
  1664)*                                  #            )*
  1665\)                             #                )
  1666[\040\t]* )*    # If comment found, allow more spaces.
  1667# optional trailing comments
  1668(?:
  1669\.
  1670[\040\t]*                    # Nab whitespace.
  1671(?:
  1672\(                              #  (
  1673[^\\\x80-\xff\n\015()] *                             #     normal*
  1674(?:                                 #       (
  1675(?:  \\ [^\x80-\xff]  |
  1676\(                            #  (
  1677[^\\\x80-\xff\n\015()] *                            #     normal*
  1678(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1679\)                           #                       )
  1680)    #         special
  1681[^\\\x80-\xff\n\015()] *                         #         normal*
  1682)*                                  #            )*
  1683\)                             #                )
  1684[\040\t]* )*    # If comment found, allow more spaces.
  1685(?:
  1686[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
  1687(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
  1688|
  1689\[                            # [
  1690(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
  1691\]                           #           ]
  1692)
  1693[\040\t]*                    # Nab whitespace.
  1694(?:
  1695\(                              #  (
  1696[^\\\x80-\xff\n\015()] *                             #     normal*
  1697(?:                                 #       (
  1698(?:  \\ [^\x80-\xff]  |
  1699\(                            #  (
  1700[^\\\x80-\xff\n\015()] *                            #     normal*
  1701(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
  1702\)                           #                       )
  1703)    #         special
  1704[^\\\x80-\xff\n\015()] *                         #         normal*
  1705)*                                  #            )*
  1706\)                             #                )
  1707[\040\t]* )*    # If comment found, allow more spaces.
  1708# optional trailing comments
  1709)*
  1710#       address spec
  1711>                    #                 >
  1712# name and address
  1713)
  1714/x
  1715    Alan Other <user\@dom.ain>
  1716 0: Alan Other <user@dom.ain>
  1717    <user\@dom.ain>
  1718 0: user@dom.ain
  1719    user\@dom.ain
  1720 0: user@dom.ain
  1721    \"A. Other\" <user.1234\@dom.ain> (a comment)
  1722 0: "A. Other" <user.1234@dom.ain>
  1723    A. Other <user.1234\@dom.ain> (a comment)
  1724 0:  Other <user.1234@dom.ain>
  1725    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
  1726 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
  1727    A missing angle <user\@some.where
  1728 0: user@some.where
  1729\= Expect no match
  1730    The quick brown fox
  1731No match
  1732
  1733/abc\0def\00pqr\000xyz\0000AB/
  1734    abc\0def\00pqr\000xyz\0000AB
  1735 0: abc\x00def\x00pqr\x00xyz\x000AB
  1736    abc456 abc\0def\00pqr\000xyz\0000ABCDE
  1737 0: abc\x00def\x00pqr\x00xyz\x000AB
  1738
  1739/abc\x0def\x00pqr\x000xyz\x0000AB/
  1740    abc\x0def\x00pqr\x000xyz\x0000AB
  1741 0: abc\x0def\x00pqr\x000xyz\x0000AB
  1742    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
  1743 0: abc\x0def\x00pqr\x000xyz\x0000AB
  1744
  1745/^[\000-\037]/
  1746    \0A
  1747 0: \x00
  1748    \01B
  1749 0: \x01
  1750    \037C
  1751 0: \x1f
  1752
  1753#.NET doesn't do octal with 1 number
  1754
  1755/^(cow|)\1(bell)/
  1756    cowcowbell
  1757 0: cowcowbell
  1758 1: cow
  1759 2: bell
  1760    bell
  1761 0: bell
  1762 1: 
  1763 2: bell
  1764\= Expect no match
  1765    cowbell
  1766No match
  1767
  1768/^\s/
  1769    \040abc
  1770 0:  
  1771    \x0cabc
  1772 0: \x0c
  1773    \nabc
  1774 0: \x0a
  1775    \rabc
  1776 0: \x0d
  1777    \tabc
  1778 0: \x09
  1779\= Expect no match
  1780    abc
  1781No match
  1782
  1783/^a	b
  1784      c/x
  1785    abc
  1786 0: abc
  1787
  1788/^(a|)\1*b/
  1789    ab
  1790 0: ab
  1791 1: a
  1792    aaaab
  1793 0: aaaab
  1794 1: a
  1795    b
  1796 0: b
  1797 1: 
  1798\= Expect no match
  1799    acb
  1800No match
  1801
  1802/^(a|)\1+b/
  1803    aab
  1804 0: aab
  1805 1: a
  1806    aaaab
  1807 0: aaaab
  1808 1: a
  1809    b
  1810 0: b
  1811 1: 
  1812\= Expect no match
  1813    ab
  1814No match
  1815
  1816/^(a|)\1?b/
  1817    ab
  1818 0: ab
  1819 1: a
  1820    aab
  1821 0: aab
  1822 1: a
  1823    b
  1824 0: b
  1825 1: 
  1826\= Expect no match
  1827    acb
  1828No match
  1829
  1830/^(a|)\1{2}b/
  1831    aaab
  1832 0: aaab
  1833 1: a
  1834    b
  1835 0: b
  1836 1: 
  1837\= Expect no match
  1838    ab
  1839No match
  1840    aab
  1841No match
  1842    aaaab
  1843No match
  1844
  1845/^(a|)\1{2,3}b/
  1846    aaab
  1847 0: aaab
  1848 1: a
  1849    aaaab
  1850 0: aaaab
  1851 1: a
  1852    b
  1853 0: b
  1854 1: 
  1855\= Expect no match
  1856    ab
  1857No match
  1858    aab
  1859No match
  1860    aaaaab
  1861No match
  1862
  1863/ab{1,3}bc/
  1864    abbbbc
  1865 0: abbbbc
  1866    abbbc
  1867 0: abbbc
  1868    abbc
  1869 0: abbc
  1870\= Expect no match
  1871    abc
  1872No match
  1873    abbbbbc
  1874No match
  1875
  1876/([^.]*)\.([^:]*):[T ]+(.*)/
  1877    track1.title:TBlah blah blah
  1878 0: track1.title:TBlah blah blah
  1879 1: track1
  1880 2: title
  1881 3: Blah blah blah
  1882
  1883/([^.]*)\.([^:]*):[T ]+(.*)/i
  1884    track1.title:TBlah blah blah
  1885 0: track1.title:TBlah blah blah
  1886 1: track1
  1887 2: title
  1888 3: Blah blah blah
  1889
  1890/([^.]*)\.([^:]*):[t ]+(.*)/i
  1891    track1.title:TBlah blah blah
  1892 0: track1.title:TBlah blah blah
  1893 1: track1
  1894 2: title
  1895 3: Blah blah blah
  1896
  1897/^[W-c]+$/
  1898    WXY_^abc
  1899 0: WXY_^abc
  1900\= Expect no match
  1901    wxy
  1902No match
  1903
  1904/^[W-c]+$/i
  1905    WXY_^abc
  1906 0: WXY_^abc
  1907    wxy_^ABC
  1908 0: wxy_^ABC
  1909
  1910/^[\x3f-\x5F]+$/i
  1911    WXY_^abc
  1912 0: WXY_^abc
  1913    wxy_^ABC
  1914 0: wxy_^ABC
  1915
  1916/^abc$/m
  1917    abc
  1918 0: abc
  1919    qqq\nabc
  1920 0: abc
  1921    abc\nzzz
  1922 0: abc
  1923    qqq\nabc\nzzz
  1924 0: abc
  1925
  1926/^abc$/
  1927    abc
  1928 0: abc
  1929\= Expect no match
  1930    qqq\nabc
  1931No match
  1932    abc\nzzz
  1933No match
  1934    qqq\nabc\nzzz
  1935No match
  1936
  1937/\Aabc\Z/m
  1938    abc
  1939 0: abc
  1940    abc\n 
  1941 0: abc
  1942\= Expect no match
  1943    qqq\nabc
  1944No match
  1945    abc\nzzz
  1946No match
  1947    qqq\nabc\nzzz
  1948No match
  1949    
  1950/\A(.)*\Z/s
  1951    abc\ndef
  1952 0: abc\x0adef
  1953 1: f
  1954
  1955/\A(.)*\Z/m
  1956\= Expect no match
  1957    abc\ndef
  1958No match
  1959
  1960/(?:b)|(?::+)/
  1961    b::c
  1962 0: b
  1963    c::b
  1964 0: ::
  1965
  1966/[-az]+/
  1967    az-
  1968 0: az-
  1969\= Expect no match
  1970    b
  1971No match
  1972
  1973/[az-]+/
  1974    za-
  1975 0: za-
  1976\= Expect no match
  1977    b
  1978No match
  1979
  1980/[a\-z]+/
  1981    a-z
  1982 0: a-z
  1983\= Expect no match
  1984    b
  1985No match
  1986
  1987/[a-z]+/
  1988    abcdxyz
  1989 0: abcdxyz
  1990
  1991/[\d-]+/
  1992    12-34
  1993 0: 12-34
  1994\= Expect no match
  1995    aaa
  1996No match
  1997
  1998/[\d-z]+/
  1999    12-34z
  2000 0: 12-34z
  2001\= Expect no match
  2002    aaa
  2003No match
  2004
  2005/\x5c/
  2006    \\
  2007 0: \
  2008
  2009/\x20Z/
  2010    the Zoo
  2011 0:  Z
  2012\= Expect no match
  2013    Zulu
  2014No match
  2015
  2016/(abc)\1/i
  2017    abcabc
  2018 0: abcabc
  2019 1: abc
  2020    ABCabc
  2021 0: ABCabc
  2022 1: ABC
  2023    abcABC
  2024 0: abcABC
  2025 1: abc
  2026
  2027/abc$/
  2028    abc
  2029 0: abc
  2030    abc\n
  2031 0: abc
  2032\= Expect no match
  2033    abc\ndef
  2034No match
  2035
  2036/(abc)\123/
  2037    abc\x53
  2038 0: abcS
  2039 1: abc
  2040
  2041/(abc)\100/
  2042    abc\x40
  2043 0: abc@
  2044 1: abc
  2045    abc\100
  2046 0: abc@
  2047 1: abc
  2048
  2049/(abc)\1000/
  2050    abc\x400
  2051 0: abc@0
  2052 1: abc
  2053    abc\x40\x30
  2054 0: abc@0
  2055 1: abc
  2056    abc\1000
  2057 0: abc@0
  2058 1: abc
  2059    abc\100\x30
  2060 0: abc@0
  2061 1: abc
  2062    abc\100\060
  2063 0: abc@0
  2064 1: abc
  2065    abc\100\60
  2066 0: abc@0
  2067 1: abc
  2068    
  2069/^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
  2070    ABCDEFGHIHI 
  2071 0: ABCDEFGHIHI
  2072 1: A
  2073 2: B
  2074 3: C
  2075 4: D
  2076 5: E
  2077 6: F
  2078 7: G
  2079 8: H
  2080 9: I
  2081
  2082/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
  2083    abcdefghijkllS
  2084 0: abcdefghijkllS
  2085 1: a
  2086 2: b
  2087 3: c
  2088 4: d
  2089 5: e
  2090 6: f
  2091 7: g
  2092 8: h
  2093 9: i
  209410: j
  209511: k
  209612: l
  2097
  2098/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
  2099    abcdefghijk\12S
  2100 0: abcdefghijk\x0aS
  2101 1: a
  2102 2: b
  2103 3: c
  2104 4: d
  2105 5: e
  2106 6: f
  2107 7: g
  2108 8: h
  2109 9: i
  211010: j
  211111: k
  2112
  2113/a{0}bc/
  2114    bc
  2115 0: bc
  2116
  2117/(a|(bc)){0,0}?xyz/
  2118    xyz
  2119 0: xyz
  2120
  2121/abc[\10]de/
  2122    abc\010de
  2123 0: abc\x08de
  2124
  2125/abc[\1]de/
  2126    abc\1de
  2127 0: abc\x01de
  2128
  2129/(abc)[\1]de/
  2130    abc\1de
  2131 0: abc\x01de
  2132 1: abc
  2133
  2134/(?s)a.b/
  2135    a\nb
  2136 0: a\x0ab
  2137
  2138/^([^a])([^\b])([^c]*)([^d]{3,4})/
  2139    baNOTccccd
  2140 0: baNOTcccc
  2141 1: b
  2142 2: a
  2143 3: NOT
  2144 4: cccc
  2145    baNOTcccd
  2146 0: baNOTccc
  2147 1: b
  2148 2: a
  2149 3: NOT
  2150 4: ccc
  2151    baNOTccd
  2152 0: baNOTcc
  2153 1: b
  2154 2: a
  2155 3: NO
  2156 4: Tcc
  2157    bacccd
  2158 0: baccc
  2159 1: b
  2160 2: a
  2161 3: 
  2162 4: ccc
  2163\= Expect no match
  2164    anything
  2165No match
  2166    b\bc   
  2167No match
  2168    baccd
  2169No match
  2170
  2171/[^a]/
  2172    Abc
  2173 0: A
  2174  
  2175/[^a]/i
  2176    Abc 
  2177 0: b
  2178
  2179/[^a]+/
  2180    AAAaAbc
  2181 0: AAA
  2182  
  2183/[^a]+/i
  2184    AAAaAbc
  2185 0: bc
  2186
  2187/[^a]+/
  2188    bbb\nccc
  2189 0: bbb\x0accc
  2190   
  2191/[^k]$/
  2192    abc
  2193 0: c
  2194\= Expect no match
  2195    abk
  2196No match
  2197   
  2198/[^k]{2,3}$/
  2199    abc
  2200 0: abc
  2201    kbc
  2202 0: bc
  2203    kabc
  2204 0: abc
  2205\= Expect no match
  2206    abk
  2207No match
  2208    akb
  2209No match
  2210    akk
  2211No match
  2212
  2213/^\d{8,}\@.+[^k]$/
  2214    12345678\@a.b.c.d
  2215 0: 12345678@a.b.c.d
  2216    123456789\@x.y.z
  2217 0: 123456789@x.y.z
  2218\= Expect no match
  2219    12345678\@x.y.uk
  2220No match
  2221    1234567\@a.b.c.d       
  2222No match
  2223
  2224/(a)\1{8,}/
  2225    aaaaaaaaa
  2226 0: aaaaaaaaa
  2227 1: a
  2228    aaaaaaaaaa
  2229 0: aaaaaaaaaa
  2230 1: a
  2231\= Expect no match
  2232    aaaaaaa   
  2233No match
  2234
  2235/[^a]/
  2236    aaaabcd
  2237 0: b
  2238    aaAabcd 
  2239 0: A
  2240
  2241/[^a]/i
  2242    aaaabcd
  2243 0: b
  2244    aaAabcd 
  2245 0: b
  2246
  2247/[^az]/
  2248    aaaabcd
  2249 0: b
  2250    aaAabcd 
  2251 0: A
  2252
  2253/[^az]/i
  2254    aaaabcd
  2255 0: b
  2256    aaAabcd 
  2257 0: b
  2258
  2259# trimmed upper ascii since Go is UTF-8
  2260/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177/
  2261    \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177
  2262 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f
  2263
  2264/P[^*]TAIRE[^*]{1,6}?LL/
  2265    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
  2266 0: PSTAIREISLL
  2267
  2268/P[^*]TAIRE[^*]{1,}?LL/
  2269    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
  2270 0: PSTAIREISLL
  2271
  2272/(\.\d\d[1-9]?)\d+/
  2273    1.230003938
  2274 0: .230003938
  2275 1: .23
  2276    1.875000282   
  2277 0: .875000282
  2278 1: .875
  2279    1.235  
  2280 0: .235
  2281 1: .23
  2282                  
  2283/(\.\d\d((?=0)|\d(?=\d)))/
  2284    1.230003938      
  2285 0: .23
  2286 1: .23
  2287 2: 
  2288    1.875000282
  2289 0: .875
  2290 1: .875
  2291 2: 5
  2292\= Expect no match 
  2293    1.235 
  2294No match
  2295     
  2296/\b(foo)\s+(\w+)/i
  2297    Food is on the foo table
  2298 0: foo table
  2299 1: foo
  2300 2: table
  2301    
  2302/foo(.*)bar/
  2303    The food is under the bar in the barn.
  2304 0: food is under the bar in the bar
  2305 1: d is under the bar in the 
  2306    
  2307/foo(.*?)bar/
  2308    The food is under the bar in the barn.
  2309 0: food is under the bar
  2310 1: d is under the 
  2311
  2312/(.*)(\d*)/
  2313    I have 2 numbers: 53147
  2314 0: I have 2 numbers: 53147
  2315 1: I have 2 numbers: 53147
  2316 2: 
  2317    
  2318/(.*)(\d+)/
  2319    I have 2 numbers: 53147
  2320 0: I have 2 numbers: 53147
  2321 1: I have 2 numbers: 5314
  2322 2: 7
  2323 
  2324/(.*?)(\d*)/
  2325    I have 2 numbers: 53147
  2326 0: 
  2327 1: 
  2328 2: 
  2329
  2330/(.*?)(\d+)/
  2331    I have 2 numbers: 53147
  2332 0: I have 2
  2333 1: I have 
  2334 2: 2
  2335
  2336/(.*)(\d+)$/
  2337    I have 2 numbers: 53147
  2338 0: I have 2 numbers: 53147
  2339 1: I have 2 numbers: 5314
  2340 2: 7
  2341
  2342/(.*?)(\d+)$/
  2343    I have 2 numbers: 53147
  2344 0: I have 2 numbers: 53147
  2345 1: I have 2 numbers: 
  2346 2: 53147
  2347
  2348/(.*)\b(\d+)$/
  2349    I have 2 numbers: 53147
  2350 0: I have 2 numbers: 53147
  2351 1: I have 2 numbers: 
  2352 2: 53147
  2353
  2354/(.*\D)(\d+)$/
  2355    I have 2 numbers: 53147
  2356 0: I have 2 numbers: 53147
  2357 1: I have 2 numbers: 
  2358 2: 53147
  2359
  2360/^\D*(?!123)/
  2361    ABC123
  2362 0: AB
  2363     
  2364/^(\D*)(?=\d)(?!123)/
  2365    ABC445
  2366 0: ABC
  2367 1: ABC
  2368\= Expect no match
  2369    ABC123
  2370No match
  2371    
  2372/^[W-]46]/
  2373    W46]789 
  2374 0: W46]
  2375    -46]789
  2376 0: -46]
  2377\= Expect no match
  2378    Wall
  2379No match
  2380    Zebra
  2381No match
  2382    42
  2383No match
  2384    [abcd] 
  2385No match
  2386    ]abcd[
  2387No match
  2388       
  2389/^[W-\]46]/
  2390    W46]789 
  2391 0: W
  2392    Wall
  2393 0: W
  2394    Zebra
  2395 0: Z
  2396    Xylophone  
  2397 0: X
  2398    42
  2399 0: 4
  2400    [abcd] 
  2401 0: [
  2402    ]abcd[
  2403 0: ]
  2404    \\backslash 
  2405 0: \
  2406\= Expect no match
  2407    -46]789
  2408No match
  2409    well
  2410No match
  2411    
  2412/\d\d\/\d\d\/\d\d\d\d/
  2413    01/01/2000
  2414 0: 01/01/2000
  2415
  2416/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
  2417    word cat dog elephant mussel cow horse canary baboon snake shark otherword
  2418 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
  2419\= Expect no match
  2420    word cat dog elephant mussel cow horse canary baboon snake shark
  2421No match
  2422
  2423/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
  2424\= Expect no match
  2425    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
  2426No match
  2427
  2428/^(a){0,0}/
  2429    bcd
  2430 0: 
  2431    abc
  2432 0: 
  2433    aab     
  2434 0: 
  2435
  2436/^(a){0,1}/
  2437    bcd
  2438 0: 
  2439    abc
  2440 0: a
  2441 1: a
  2442    aab  
  2443 0: a
  2444 1: a
  2445
  2446/^(a){0,2}/
  2447    bcd
  2448 0: 
  2449    abc
  2450 0: a
  2451 1: a
  2452    aab  
  2453 0: aa
  2454 1: a
  2455
  2456/^(a){0,3}/
  2457    bcd
  2458 0: 
  2459    abc
  2460 0: a
  2461 1: a
  2462    aab
  2463 0: aa
  2464 1: a
  2465    aaa   
  2466 0: aaa
  2467 1: a
  2468
  2469/^(a){0,}/
  2470    bcd
  2471 0: 
  2472    abc
  2473 0: a
  2474 1: a
  2475    aab
  2476 0: aa
  2477 1: a
  2478    aaa
  2479 0: aaa
  2480 1: a
  2481    aaaaaaaa    
  2482 0: aaaaaaaa
  2483 1: a
  2484
  2485/^(a){1,1}/
  2486    abc
  2487 0: a
  2488 1: a
  2489    aab  
  2490 0: a
  2491 1: a
  2492\= Expect no match
  2493    bcd
  2494No match
  2495
  2496/^(a){1,2}/
  2497    abc
  2498 0: a
  2499 1: a
  2500    aab  
  2501 0: aa
  2502 1: a
  2503\= Expect no match
  2504    bcd
  2505No match
  2506
  2507/^(a){1,3}/
  2508    abc
  2509 0: a
  2510 1: a
  2511    aab
  2512 0: aa
  2513 1: a
  2514    aaa   
  2515 0: aaa
  2516 1: a
  2517\= Expect no match
  2518    bcd
  2519No match
  2520
  2521/^(a){1,}/
  2522    abc
  2523 0: a
  2524 1: a
  2525    aab
  2526 0: aa
  2527 1: a
  2528    aaa
  2529 0: aaa
  2530 1: a
  2531    aaaaaaaa    
  2532 0: aaaaaaaa
  2533 1: a
  2534\= Expect no match
  2535    bcd
  2536No match
  2537
  2538/.*\.gif/
  2539    borfle\nbib.gif\nno
  2540 0: bib.gif
  2541
  2542/.{0,}\.gif/
  2543    borfle\nbib.gif\nno
  2544 0: bib.gif
  2545
  2546/.*\.gif/m
  2547    borfle\nbib.gif\nno
  2548 0: bib.gif
  2549
  2550/.*\.gif/s
  2551    borfle\nbib.gif\nno
  2552 0: borfle\x0abib.gif
  2553
  2554/.*\.gif/ms
  2555    borfle\nbib.gif\nno
  2556 0: borfle\x0abib.gif
  2557    
  2558/.*$/
  2559    borfle\nbib.gif\nno
  2560 0: no
  2561
  2562/.*$/m
  2563    borfle\nbib.gif\nno
  2564 0: borfle
  2565
  2566/.*$/s
  2567    borfle\nbib.gif\nno
  2568 0: borfle\x0abib.gif\x0ano
  2569
  2570/.*$/ms
  2571    borfle\nbib.gif\nno
  2572 0: borfle\x0abib.gif\x0ano
  2573    
  2574/.*$/
  2575    borfle\nbib.gif\nno\n
  2576 0: no
  2577
  2578/.*$/m
  2579    borfle\nbib.gif\nno\n
  2580 0: borfle
  2581
  2582/.*$/s
  2583    borfle\nbib.gif\nno\n
  2584 0: borfle\x0abib.gif\x0ano\x0a
  2585
  2586/.*$/ms
  2587    borfle\nbib.gif\nno\n
  2588 0: borfle\x0abib.gif\x0ano\x0a
  2589    
  2590/(.*X|^B)/
  2591    abcde\n1234Xyz
  2592 0: 1234X
  2593 1: 1234X
  2594    BarFoo 
  2595 0: B
  2596 1: B
  2597\= Expect no match
  2598    abcde\nBar  
  2599No match
  2600
  2601/(.*X|^B)/m
  2602    abcde\n1234Xyz
  2603 0: 1234X
  2604 1: 1234X
  2605    BarFoo 
  2606 0: B
  2607 1: B
  2608    abcde\nBar  
  2609 0: B
  2610 1: B
  2611
  2612/(.*X|^B)/s
  2613    abcde\n1234Xyz
  2614 0: abcde\x0a1234X
  2615 1: abcde\x0a1234X
  2616    BarFoo 
  2617 0: B
  2618 1: B
  2619\= Expect no match
  2620    abcde\nBar  
  2621No match
  2622
  2623/(.*X|^B)/ms
  2624    abcde\n1234Xyz
  2625 0: abcde\x0a1234X
  2626 1: abcde\x0a1234X
  2627    BarFoo 
  2628 0: B
  2629 1: B
  2630    abcde\nBar  
  2631 0: B
  2632 1: B
  2633
  2634/(?s)(.*X|^B)/
  2635    abcde\n1234Xyz
  2636 0: abcde\x0a1234X
  2637 1: abcde\x0a1234X
  2638    BarFoo 
  2639 0: B
  2640 1: B
  2641\= Expect no match 
  2642    abcde\nBar  
  2643No match
  2644
  2645/(?s:.*X|^B)/
  2646    abcde\n1234Xyz
  2647 0: abcde\x0a1234X
  2648    BarFoo 
  2649 0: B
  2650\= Expect no match 
  2651    abcde\nBar  
  2652No match
  2653
  2654/^.*B/
  2655\= Expect no match
  2656    abc\nB
  2657No match
  2658     
  2659/(?s)^.*B/
  2660    abc\nB
  2661 0: abc\x0aB
  2662
  2663/(?m)^.*B/
  2664    abc\nB
  2665 0: B
  2666     
  2667/(?ms)^.*B/
  2668    abc\nB
  2669 0: abc\x0aB
  2670
  2671/(?ms)^B/
  2672    abc\nB
  2673 0: B
  2674
  2675/(?s)B$/
  2676    B\n
  2677 0: B
  2678
  2679/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
  2680    123456654321
  2681 0: 123456654321
  2682  
  2683/^\d\d\d\d\d\d\d\d\d\d\d\d/
  2684    123456654321 
  2685 0: 123456654321
  2686
  2687/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
  2688    123456654321
  2689 0: 123456654321
  2690  
  2691/^[abc]{12}/
  2692    abcabcabcabc
  2693 0: abcabcabcabc
  2694    
  2695/^[a-c]{12}/
  2696    abcabcabcabc
  2697 0: abcabcabcabc
  2698    
  2699/^(a|b|c){12}/
  2700    abcabcabcabc 
  2701 0: abcabcabcabc
  2702 1: c
  2703
  2704/^[abcdefghijklmnopqrstuvwxy0123456789]/
  2705    n
  2706 0: n
  2707\= Expect no match 
  2708    z 
  2709No match
  2710
  2711/abcde{0,0}/
  2712    abcd
  2713 0: abcd
  2714\= Expect no match
  2715    abce  
  2716No match
  2717
  2718/ab[cd]{0,0}e/
  2719    abe
  2720 0: abe
  2721\= Expect no match
  2722    abcde 
  2723No match
  2724    
  2725/ab(c){0,0}d/
  2726    abd
  2727 0: abd
  2728\= Expect no match
  2729    abcd   
  2730No match
  2731
  2732/a(b*)/
  2733    a
  2734 0: a
  2735 1: 
  2736    ab
  2737 0: ab
  2738 1: b
  2739    abbbb
  2740 0: abbbb
  2741 1: bbbb
  2742\= Expect no match
  2743    bbbbb    
  2744No match
  2745    
  2746/ab\d{0}e/
  2747    abe
  2748 0: abe
  2749\= Expect no match
  2750    ab1e   
  2751No match
  2752    
  2753/"([^\\"]+|\\.)*"/
  2754    the \"quick\" brown fox
  2755 0: "quick"
  2756 1: quick
  2757    \"the \\\"quick\\\" brown fox\" 
  2758 0: "the \"quick\" brown fox"
  2759 1:  brown fox
  2760
  2761/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
  2762    <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
  2763 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
  2764 1:  BGCOLOR='#DBE9E9'
  2765 2:  align=left valign=top
  2766 3: 43.
  2767 4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
  2768 5: 
  2769 6: 
  2770 7: <unset>
  2771 8:  align=left valign=top
  2772 9: Lega lstaff.com
  277310:  align=left valign=top
  277411: CA - Statewide
  2775
  2776/a[^a]b/
  2777    acb
  2778 0: acb
  2779    a\nb
  2780 0: a\x0ab
  2781    
  2782/a.b/
  2783    acb
  2784 0: acb
  2785\= Expect no match 
  2786    a\nb   
  2787No match
  2788    
  2789/a[^a]b/s
  2790    acb
  2791 0: acb
  2792    a\nb  
  2793 0: a\x0ab
  2794    
  2795/a.b/s
  2796    acb
  2797 0: acb
  2798    a\nb  
  2799 0: a\x0ab
  2800
  2801/^(b+?|a){1,2}?c/
  2802    bac
  2803 0: bac
  2804 1: a
  2805    bbac
  2806 0: bbac
  2807 1: a
  2808    bbbac
  2809 0: bbbac
  2810 1: a
  2811    bbbbac
  2812 0: bbbbac
  2813 1: a
  2814    bbbbbac 
  2815 0: bbbbbac
  2816 1: a
  2817
  2818/^(b+|a){1,2}?c/
  2819    bac
  2820 0: bac
  2821 1: a
  2822    bbac
  2823 0: bbac
  2824 1: a
  2825    bbbac
  2826 0: bbbac
  2827 1: a
  2828    bbbbac
  2829 0: bbbbac
  2830 1: a
  2831    bbbbbac 
  2832 0: bbbbbac
  2833 1: a
  2834    
  2835/(?!\A)x/m
  2836    a\bx\n
  2837 0: x
  2838    a\nx\n
  2839 0: x
  2840\= Expect no match     
  2841    x\nb\n
  2842No match
  2843    
  2844/(A|B)*?CD/
  2845    CD 
  2846 0: CD
  2847    
  2848/(A|B)*CD/
  2849    CD 
  2850 0: CD
  2851
  2852/(AB)*?\1/
  2853    ABABAB
  2854 0: ABAB
  2855 1: AB
  2856
  2857/(AB)*\1/
  2858    ABABAB
  2859 0: ABABAB
  2860 1: AB
  2861    
  2862/(?<!bar)foo/
  2863    foo
  2864 0: foo
  2865    catfood
  2866 0: foo
  2867    arfootle
  2868 0: foo
  2869    rfoosh
  2870 0: foo
  2871\= Expect no match
  2872    barfoo
  2873No match
  2874    towbarfoo
  2875No match
  2876
  2877/\w{3}(?<!bar)foo/
  2878    catfood
  2879 0: catfoo
  2880\= Expect no match
  2881    foo
  2882No match
  2883    barfoo
  2884No match
  2885    towbarfoo
  2886No match
  2887
  2888/(?<=(foo)a)bar/
  2889    fooabar
  2890 0: bar
  2891 1: foo
  2892\= Expect no match
  2893    bar
  2894No match
  2895    foobbar
  2896No match
  2897      
  2898/\Aabc\z/m
  2899    abc
  2900 0: abc
  2901\= Expect no match
  2902    abc\n   
  2903No match
  2904    qqq\nabc
  2905No match
  2906    abc\nzzz
  2907No match
  2908    qqq\nabc\nzzz
  2909No match
  2910
  2911"(?>.*/)foo"
  2912    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
  2913 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
  2914\= Expect no match     
  2915    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
  2916No match
  2917
  2918/(?>(\.\d\d[1-9]?))\d+/
  2919    1.230003938
  2920 0: .230003938
  2921 1: .23
  2922    1.875000282
  2923 0: .875000282
  2924 1: .875
  2925\= Expect no match 
  2926    1.235 
  2927No match
  2928
  2929/^((?>\w+)|(?>\s+))*$/
  2930    now is the time for all good men to come to the aid of the party
  2931 0: now is the time for all good men to come to the aid of the party
  2932 1: party
  2933\= Expect no match
  2934    this is not a line with only words and spaces!
  2935No match
  2936    
  2937/(\d+)(\w)/
  2938    12345a
  2939 0: 12345a
  2940 1: 12345
  2941 2: a
  2942    12345+ 
  2943 0: 12345
  2944 1: 1234
  2945 2: 5
  2946
  2947/((?>\d+))(\w)/
  2948    12345a
  2949 0: 12345a
  2950 1: 12345
  2951 2: a
  2952\= Expect no match
  2953    12345+ 
  2954No match
  2955
  2956/(?>a+)b/
  2957    aaab
  2958 0: aaab
  2959
  2960/((?>a+)b)/
  2961    aaab
  2962 0: aaab
  2963 1: aaab
  2964
  2965/(?>(a+))b/
  2966    aaab
  2967 0: aaab
  2968 1: aaa
  2969
  2970/(?>b)+/
  2971    aaabbbccc
  2972 0: bbb
  2973
  2974/(?>a+|b+|c+)*c/
  2975    aaabbbbccccd
  2976 0: aaabbbbc
  2977
  2978/((?>[^()]+)|\([^()]*\))+/
  2979    ((abc(ade)ufh()()x
  2980 0: abc(ade)ufh()()x
  2981 1: x
  2982    
  2983/\(((?>[^()]+)|\([^()]+\))+\)/
  2984    (abc)
  2985 0: (abc)
  2986 1: abc
  2987    (abc(def)xyz)
  2988 0: (abc(def)xyz)
  2989 1: xyz
  2990\= Expect no match
  2991    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
  2992No match
  2993
  2994/a(?-i)b/i
  2995    ab
  2996 0: ab
  2997    Ab
  2998 0: Ab
  2999\= Expect no match 
  3000    aB
  3001No match
  3002    AB
  3003No match
  3004        
  3005/(a (?x)b c)d e/
  3006    a bcd e
  3007 0: a bcd e
  3008 1: a bc
  3009\= Expect no match
  3010    a b cd e
  3011No match
  3012    abcd e   
  3013No match
  3014    a bcde 
  3015No match
  3016 
  3017/(a b(?x)c d (?-x)e f)/
  3018    a bcde f
  3019 0: a bcde f
  3020 1: a bcde f
  3021\= Expect no match
  3022    abcdef  
  3023No match
  3024
  3025/(a(?i)b)c/
  3026    abc
  3027 0: abc
  3028 1: ab
  3029    aBc
  3030 0: aBc
  3031 1: aB
  3032\= Expect no match
  3033    abC
  3034No match
  3035    aBC  
  3036No match
  3037    Abc
  3038No match
  3039    ABc
  3040No match
  3041    ABC
  3042No match
  3043    AbC
  3044No match
  3045    
  3046/a(?i:b)c/
  3047    abc
  3048 0: abc
  3049    aBc
  3050 0: aBc
  3051\= Expect no match 
  3052    ABC
  3053No match
  3054    abC
  3055No match
  3056    aBC
  3057No match
  3058    
  3059/a(?i:b)*c/
  3060    aBc
  3061 0: aBc
  3062    aBBc
  3063 0: aBBc
  3064\= Expect no match 
  3065    aBC
  3066No match
  3067    aBBC
  3068No match
  3069    
  3070/a(?=b(?i)c)\w\wd/
  3071    abcd
  3072 0: abcd
  3073    abCd
  3074 0: abCd
  3075\= Expect no match
  3076    aBCd
  3077No match
  3078    abcD     
  3079No match
  3080    
  3081/(?s-i:more.*than).*million/i
  3082    more than million
  3083 0: more than million
  3084    more than MILLION
  3085 0: more than MILLION
  3086    more \n than Million 
  3087 0: more \x0a than Million
  3088\= Expect no match
  3089    MORE THAN MILLION    
  3090No match
  3091    more \n than \n million 
  3092No match
  3093
  3094/(?:(?s-i)more.*than).*million/i
  3095    more than million
  3096 0: more than million
  3097    more than MILLION
  3098 0: more than MILLION
  3099    more \n than Million 
  3100 0: more \x0a than Million
  3101\= Expect no match
  3102    MORE THAN MILLION    
  3103No match
  3104    more \n than \n million 
  3105No match
  3106    
  3107/(?>a(?i)b+)+c/
  3108    abc
  3109 0: abc
  3110    aBbc
  3111 0: aBbc
  3112    aBBc 
  3113 0: aBBc
  3114\= Expect no match
  3115    Abc
  3116No match
  3117    abAb    
  3118No match
  3119    abbC 
  3120No match
  3121    
  3122/(?=a(?i)b)\w\wc/
  3123    abc
  3124 0: abc
  3125    aBc
  3126 0: aBc
  3127\= Expect no match
  3128    Ab 
  3129No match
  3130    abC
  3131No match
  3132    aBC     
  3133No match
  3134    
  3135/(?<=a(?i)b)(\w\w)c/
  3136    abxxc
  3137 0: xxc
  3138 1: xx
  3139    aBxxc
  3140 0: xxc
  3141 1: xx
  3142\= Expect no match
  3143    Abxxc
  3144No match
  3145    ABxxc
  3146No match
  3147    abxxC      
  3148No match
  3149
  3150/(?:(a)|b)(?(1)A|B)/
  3151    aA
  3152 0: aA
  3153 1: a
  3154    bB
  3155 0: bB
  3156\= Expect no match
  3157    aB
  3158No match
  3159    bA    
  3160No match
  3161
  3162/^(a)?(?(1)a|b)+$/
  3163    aa
  3164 0: aa
  3165 1: a
  3166    b
  3167 0: b
  3168    bb  
  3169 0: bb
  3170\= Expect no match
  3171    ab   
  3172No match
  3173    
  3174# Perl gets this next one wrong if the pattern ends with $; in that case it
  3175# fails to match "12". 
  3176
  3177/^(?(?=abc)\w{3}:|\d\d)/
  3178    abc:
  3179 0: abc:
  3180    12
  3181 0: 12
  3182    123
  3183 0: 12
  3184\= Expect no match
  3185    xyz    
  3186No match
  3187
  3188/^(?(?!abc)\d\d|\w{3}:)$/
  3189    abc:
  3190 0: abc:
  3191    12
  3192 0: 12
  3193\= Expect no match
  3194    123
  3195No match
  3196    xyz    
  3197No match
  3198    
  3199/(?(?<=foo)bar|cat)/
  3200    foobar
  3201 0: bar
  3202    cat
  3203 0: cat
  3204    fcat
  3205 0: cat
  3206    focat   
  3207 0: cat
  3208\= Expect no match
  3209    foocat  
  3210No match
  3211
  3212/(?(?<!foo)cat|bar)/
  3213    foobar
  3214 0: bar
  3215    cat
  3216 0: cat
  3217    fcat
  3218 0: cat
  3219    focat   
  3220 0: cat
  3221\= Expect no match
  3222    foocat  
  3223No match
  3224
  3225/( \( )? [^()]+ (?(1) \) |) /x
  3226    abcd
  3227 0: abcd
  3228    (abcd)
  3229 0: (abcd)
  3230 1: (
  3231    the quick (abcd) fox
  3232 0: the quick 
  3233    (abcd   
  3234 0: abcd
  3235
  3236/( \( )? [^()]+ (?(1) \) ) /x
  3237    abcd
  3238 0: abcd
  3239    (abcd)
  3240 0: (abcd)
  3241 1: (
  3242    the quick (abcd) fox
  3243 0: the quick 
  3244    (abcd   
  3245 0: abcd
  3246
  3247/^(?(2)a|(1)(2))+$/
  3248    12
  3249 0: 12
  3250 1: 1
  3251 2: 2
  3252    12a
  3253 0: 12a
  3254 1: 1
  3255 2: 2
  3256    12aa
  3257 0: 12aa
  3258 1: 1
  3259 2: 2
  3260\= Expect no match
  3261    1234    
  3262No match
  3263
  3264/((?i)blah)\s+\1/
  3265    blah blah
  3266 0: blah blah
  3267 1: blah
  3268    BLAH BLAH
  3269 0: BLAH BLAH
  3270 1: BLAH
  3271    Blah Blah
  3272 0: Blah Blah
  3273 1: Blah
  3274    blaH blaH
  3275 0: blaH blaH
  3276 1: blaH
  3277\= Expect no match
  3278    blah BLAH
  3279No match
  3280    Blah blah      
  3281No match
  3282    blaH blah 
  3283No match
  3284
  3285/((?i)blah)\s+(?i:\1)/
  3286    blah blah
  3287 0: blah blah
  3288 1: blah
  3289    BLAH BLAH
  3290 0: BLAH BLAH
  3291 1: BLAH
  3292    Blah Blah
  3293 0: Blah Blah
  3294 1: Blah
  3295    blaH blaH
  3296 0: blaH blaH
  3297 1: blaH
  3298    blah BLAH
  3299 0: blah BLAH
  3300 1: blah
  3301    Blah blah      
  3302 0: Blah blah
  3303 1: Blah
  3304    blaH blah 
  3305 0: blaH blah
  3306 1: blaH
  3307
  3308/(?>a*)*/
  3309    a
  3310 0: a
  3311    aa
  3312 0: aa
  3313    aaaa
  3314 0: aaaa
  3315    
  3316/(abc|)+/
  3317    abc
  3318 0: abc
  3319 1: 
  3320    abcabc
  3321 0: abcabc
  3322 1: 
  3323    abcabcabc
  3324 0: abcabcabc
  3325 1: 
  3326    xyz      
  3327 0: 
  3328 1: 
  3329
  3330/([a]*)*/
  3331    a
  3332 0: a
  3333 1: 
  3334    aaaaa 
  3335 0: aaaaa
  3336 1: 
  3337 
  3338/([ab]*)*/
  3339    a
  3340 0: a
  3341 1: 
  3342    b
  3343 0: b
  3344 1: 
  3345    ababab
  3346 0: ababab
  3347 1: 
  3348    aaaabcde
  3349 0: aaaab
  3350 1: 
  3351    bbbb    
  3352 0: bbbb
  3353 1: 
  3354 
  3355/([^a]*)*/
  3356    b
  3357 0: b
  3358 1: 
  3359    bbbb
  3360 0: bbbb
  3361 1: 
  3362    aaa   
  3363 0: 
  3364 1: 
  3365 
  3366/([^ab]*)*/
  3367    cccc
  3368 0: cccc
  3369 1: 
  3370    abab  
  3371 0: 
  3372 1: 
  3373 
  3374/([a]*?)*/
  3375    a
  3376 0: 
  3377 1: 
  3378    aaaa 
  3379 0: 
  3380 1: 
  3381 
  3382/([ab]*?)*/
  3383    a
  3384 0: 
  3385 1: 
  3386    b
  3387 0: 
  3388 1: 
  3389    abab
  3390 0: 
  3391 1: 
  3392    baba   
  3393 0: 
  3394 1: 
  3395 
  3396/([^a]*?)*/
  3397    b
  3398 0: 
  3399 1: 
  3400    bbbb
  3401 0: 
  3402 1: 
  3403    aaa   
  3404 0: 
  3405 1: 
  3406 
  3407/([^ab]*?)*/
  3408    c
  3409 0: 
  3410 1: 
  3411    cccc
  3412 0: 
  3413 1: 
  3414    baba   
  3415 0: 
  3416 1: 
  3417 
  3418/(?>a*)*/
  3419    a
  3420 0: a
  3421    aaabcde 
  3422 0: aaa
  3423 
  3424/((?>a*))*/
  3425    aaaaa
  3426 0: aaaaa
  3427 1: 
  3428    aabbaa 
  3429 0: aa
  3430 1: 
  3431 
  3432/((?>a*?))*/
  3433    aaaaa
  3434 0: 
  3435 1: 
  3436    aabbaa 
  3437 0: 
  3438 1: 
  3439
  3440/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
  3441    12-sep-98
  3442 0: 12-sep-98
  3443    12-09-98
  3444 0: 12-09-98
  3445\= Expect no match
  3446    sep-12-98
  3447No match
  3448        
  3449/(?<=(foo))bar\1/
  3450    foobarfoo
  3451 0: barfoo
  3452 1: foo
  3453    foobarfootling 
  3454 0: barfoo
  3455 1: foo
  3456\= Expect no match
  3457    foobar
  3458No match
  3459    barfoo   
  3460No match
  3461
  3462/(?i:saturday|sunday)/
  3463    saturday
  3464 0: saturday
  3465    sunday
  3466 0: sunday
  3467    Saturday
  3468 0: Saturday
  3469    Sunday
  3470 0: Sunday
  3471    SATURDAY
  3472 0: SATURDAY
  3473    SUNDAY
  3474 0: SUNDAY
  3475    SunDay
  3476 0: SunDay
  3477    
  3478/(a(?i)bc|BB)x/
  3479    abcx
  3480 0: abcx
  3481 1: abc
  3482    aBCx
  3483 0: aBCx
  3484 1: aBC
  3485    bbx
  3486 0: bbx
  3487 1: bb
  3488    BBx
  3489 0: BBx
  3490 1: BB
  3491\= Expect no match
  3492    abcX
  3493No match
  3494    aBCX
  3495No match
  3496    bbX
  3497No match
  3498    BBX               
  3499No match
  3500
  3501/^([ab](?i)[cd]|[ef])/
  3502    ac
  3503 0: ac
  3504 1: ac
  3505    aC
  3506 0: aC
  3507 1: aC
  3508    bD
  3509 0: bD
  3510 1: bD
  3511    elephant
  3512 0: e
  3513 1: e
  3514    Europe 
  3515 0: E
  3516 1: E
  3517    frog
  3518 0: f
  3519 1: f
  3520    France
  3521 0: F
  3522 1: F
  3523\= Expect no match
  3524    Africa     
  3525No match
  3526
  3527/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
  3528    ab
  3529 0: ab
  3530 1: ab
  3531    aBd
  3532 0: aBd
  3533 1: aBd
  3534    xy
  3535 0: xy
  3536 1: xy
  3537    xY
  3538 0: xY
  3539 1: xY
  3540    zebra
  3541 0: z
  3542 1: z
  3543    Zambesi
  3544 0: Z
  3545 1: Z
  3546\= Expect no match
  3547    aCD  
  3548No match
  3549    XY  
  3550No match
  3551
  3552/(?<=foo\n)^bar/m
  3553    foo\nbar
  3554 0: bar
  3555\= Expect no match
  3556    bar
  3557No match
  3558    baz\nbar   
  3559No match
  3560
  3561/(?<=(?<!foo)bar)baz/
  3562    barbaz
  3563 0: baz
  3564    barbarbaz 
  3565 0: baz
  3566    koobarbaz 
  3567 0: baz
  3568\= Expect no match
  3569    baz
  3570No match
  3571    foobarbaz 
  3572No match
  3573
  3574# The cases of aaaa and aaaaaa are missed out below because Perl does things
  3575# differently. We know that odd, and maybe incorrect, things happen with
  3576# recursive references in Perl, as far as 5.11.3 - see some stuff in test #2.
  3577
  3578/^(a\1?){4}$/
  3579    aaaaa
  3580 0: aaaaa
  3581 1: a
  3582    aaaaaaa
  3583 0: aaaaaaa
  3584 1: a
  3585    aaaaaaaaaa
  3586 0: aaaaaaaaaa
  3587 1: aaaa
  3588\= Expect no match
  3589    a
  3590No match
  3591    aa
  3592No match
  3593    aaa
  3594No match
  3595    aaaaaaaa
  3596No match
  3597    aaaaaaaaa
  3598No match
  3599    aaaaaaaaaaa
  3600No match
  3601    aaaaaaaaaaaa
  3602No match
  3603    aaaaaaaaaaaaa
  3604No match
  3605    aaaaaaaaaaaaaa
  3606No match
  3607    aaaaaaaaaaaaaaa
  3608No match
  3609    aaaaaaaaaaaaaaaa
  3610No match
  3611
  3612/^(a\1?)(a\1?)(a\2?)(a\3?)$/
  3613    aaaa
  3614 0: aaaa
  3615 1: a
  3616 2: a
  3617 3: a
  3618 4: a
  3619    aaaaa
  3620 0: aaaaa
  3621 1: a
  3622 2: aa
  3623 3: a
  3624 4: a
  3625    aaaaaa
  3626 0: aaaaaa
  3627 1: a
  3628 2: aa
  3629 3: a
  3630 4: aa
  3631    aaaaaaa
  3632 0: aaaaaaa
  3633 1: a
  3634 2: aa
  3635 3: aaa
  3636 4: a
  3637    aaaaaaaaaa
  3638 0: aaaaaaaaaa
  3639 1: a
  3640 2: aa
  3641 3: aaa
  3642 4: aaaa
  3643\= Expect no match
  3644    a
  3645No match
  3646    aa
  3647No match
  3648    aaa
  3649No match
  3650    aaaaaaaa
  3651No match
  3652    aaaaaaaaa
  3653No match
  3654    aaaaaaaaaaa
  3655No match
  3656    aaaaaaaaaaaa
  3657No match
  3658    aaaaaaaaaaaaa
  3659No match
  3660    aaaaaaaaaaaaaa
  3661No match
  3662    aaaaaaaaaaaaaaa
  3663No match
  3664    aaaaaaaaaaaaaaaa               
  3665No match
  3666
  3667# The following tests are taken from the Perl 5.005 test suite; some of them
  3668# are compatible with 5.004, but I'd rather not have to sort them out.
  3669
  3670/abc/
  3671    abc
  3672 0: abc
  3673    xabcy
  3674 0: abc
  3675    ababc
  3676 0: abc
  3677\= Expect no match
  3678    xbc
  3679No match
  3680    axc
  3681No match
  3682    abx
  3683No match
  3684
  3685/ab*c/
  3686    abc
  3687 0: abc
  3688
  3689/ab*bc/
  3690    abc
  3691 0: abc
  3692    abbc
  3693 0: abbc
  3694    abbbbc
  3695 0: abbbbc
  3696
  3697/.{1}/
  3698    abbbbc
  3699 0: a
  3700
  3701/.{3,4}/
  3702    abbbbc
  3703 0: abbb
  3704
  3705/ab{0,}bc/
  3706    abbbbc
  3707 0: abbbbc
  3708
  3709/ab+bc/
  3710    abbc
  3711 0: abbc
  3712\= Expect no match
  3713    abc
  3714No match
  3715    abq
  3716No match
  3717
  3718/ab{1,}bc/
  3719
  3720/ab+bc/
  3721    abbbbc
  3722 0: abbbbc
  3723
  3724/ab{1,}bc/
  3725    abbbbc
  3726 0: abbbbc
  3727
  3728/ab{1,3}bc/
  3729    abbbbc
  3730 0: abbbbc
  3731
  3732/ab{3,4}bc/
  3733    abbbbc
  3734 0: abbbbc
  3735
  3736/ab{4,5}bc/
  3737\= Expect no match
  3738    abq
  3739No match
  3740    abbbbc
  3741No match
  3742
  3743/ab?bc/
  3744    abbc
  3745 0: abbc
  3746    abc
  3747 0: abc
  3748
  3749/ab{0,1}bc/
  3750    abc
  3751 0: abc
  3752
  3753/ab?bc/
  3754
  3755/ab?c/
  3756    abc
  3757 0: abc
  3758
  3759/ab{0,1}c/
  3760    abc
  3761 0: abc
  3762
  3763/^abc$/
  3764    abc
  3765 0: abc
  3766\= Expect no match
  3767    abbbbc
  3768No match
  3769    abcc
  3770No match
  3771
  3772/^abc/
  3773    abcc
  3774 0: abc
  3775
  3776/^abc$/
  3777
  3778/abc$/
  3779    aabc
  3780 0: abc
  3781\= Expect no match
  3782    aabcd
  3783No match
  3784
  3785/^/
  3786    abc
  3787 0: 
  3788
  3789/$/
  3790    abc
  3791 0: 
  3792
  3793/a.c/
  3794    abc
  3795 0: abc
  3796    axc
  3797 0: axc
  3798
  3799/a.*c/
  3800    axyzc
  3801 0: axyzc
  3802
  3803/a[bc]d/
  3804    abd
  3805 0: abd
  3806\= Expect no match
  3807    axyzd
  3808No match
  3809    abc
  3810No match
  3811
  3812/a[b-d]e/
  3813    ace
  3814 0: ace
  3815
  3816/a[b-d]/
  3817    aac
  3818 0: ac
  3819
  3820/a[-b]/
  3821    a-
  3822 0: a-
  3823
  3824/a[b-]/
  3825    a-
  3826 0: a-
  3827
  3828/a]/
  3829    a]
  3830 0: a]
  3831
  3832/a[]]b/
  3833    a]b
  3834 0: a]b
  3835
  3836/a[^bc]d/
  3837    aed
  3838 0: aed
  3839\= Expect no match
  3840    abd
  3841No match
  3842    abd
  3843No match
  3844
  3845/a[^-b]c/
  3846    adc
  3847 0: adc
  3848
  3849/a[^]b]c/
  3850    adc
  3851 0: adc
  3852    a-c
  3853 0: a-c
  3854\= Expect no match
  3855    a]c
  3856No match
  3857
  3858/\ba\b/
  3859    a-
  3860 0: a
  3861    -a
  3862 0: a
  3863    -a-
  3864 0: a
  3865
  3866/\by\b/
  3867\= Expect no match
  3868    xy
  3869No match
  3870    yz
  3871No match
  3872    xyz
  3873No match
  3874
  3875/\Ba\B/
  3876\= Expect no match
  3877    a-
  3878No match
  3879    -a
  3880No match
  3881    -a-
  3882No match
  3883
  3884/\By\b/
  3885    xy
  3886 0: y
  3887
  3888/\by\B/
  3889    yz
  3890 0: y
  3891
  3892/\By\B/
  3893    xyz
  3894 0: y
  3895
  3896/\w/
  3897    a
  3898 0: a
  3899
  3900/\W/
  3901    -
  3902 0: -
  3903\= Expect no match
  3904    a
  3905No match
  3906
  3907/a\sb/
  3908    a b
  3909 0: a b
  3910
  3911/a\Sb/
  3912    a-b
  3913 0: a-b
  3914\= Expect no match
  3915    a b
  3916No match
  3917
  3918/\d/
  3919    1
  3920 0: 1
  3921
  3922/\D/
  3923    -
  3924 0: -
  3925\= Expect no match
  3926    1
  3927No match
  3928
  3929/[\w]/
  3930    a
  3931 0: a
  3932
  3933/[\W]/
  3934    -
  3935 0: -
  3936\= Expect no match
  3937    a
  3938No match
  3939
  3940/a[\s]b/
  3941    a b
  3942 0: a b
  3943
  3944/a[\S]b/
  3945    a-b
  3946 0: a-b
  3947\= Expect no match
  3948    a b
  3949No match
  3950
  3951/[\d]/
  3952    1
  3953 0: 1
  3954
  3955/[\D]/
  3956    -
  3957 0: -
  3958\= Expect no match
  3959    1
  3960No match
  3961
  3962/ab|cd/
  3963    abc
  3964 0: ab
  3965    abcd
  3966 0: ab
  3967
  3968/()ef/
  3969    def
  3970 0: ef
  3971 1: 
  3972
  3973/$b/
  3974
  3975/a\(b/
  3976    a(b
  3977 0: a(b
  3978
  3979/a\(*b/
  3980    ab
  3981 0: ab
  3982    a((b
  3983 0: a((b
  3984
  3985/a\\b/
  3986    a\\b
  3987 0: a\b
  3988
  3989/((a))/
  3990    abc
  3991 0: a
  3992 1: a
  3993 2: a
  3994
  3995/(a)b(c)/
  3996    abc
  3997 0: abc
  3998 1: a
  3999 2: c
  4000
  4001/a+b+c/
  4002    aabbabc
  4003 0: abc
  4004
  4005/a{1,}b{1,}c/
  4006    aabbabc
  4007 0: abc
  4008
  4009/a.+?c/
  4010    abcabc
  4011 0: abc
  4012
  4013/(a+|b)*/
  4014    ab
  4015 0: ab
  4016 1: b
  4017
  4018/(a+|b){0,}/
  4019    ab
  4020 0: ab
  4021 1: b
  4022
  4023/(a+|b)+/
  4024    ab
  4025 0: ab
  4026 1: b
  4027
  4028/(a+|b){1,}/
  4029    ab
  4030 0: ab
  4031 1: b
  4032
  4033/(a+|b)?/
  4034    ab
  4035 0: a
  4036 1: a
  4037
  4038/(a+|b){0,1}/
  4039    ab
  4040 0: a
  4041 1: a
  4042
  4043/[^ab]*/
  4044    cde
  4045 0: cde
  4046
  4047/abc/
  4048\= Expect no match
  4049    b
  4050No match
  4051
  4052/a*/
  4053    \
  4054 0: 
  4055
  4056/([abc])*d/
  4057    abbbcd
  4058 0: abbbcd
  4059 1: c
  4060
  4061/([abc])*bcd/
  4062    abcd
  4063 0: abcd
  4064 1: a
  4065
  4066/a|b|c|d|e/
  4067    e
  4068 0: e
  4069
  4070/(a|b|c|d|e)f/
  4071    ef
  4072 0: ef
  4073 1: e
  4074
  4075/abcd*efg/
  4076    abcdefg
  4077 0: abcdefg
  4078
  4079/ab*/
  4080    xabyabbbz
  4081 0: ab
  4082    xayabbbz
  4083 0: a
  4084
  4085/(ab|cd)e/
  4086    abcde
  4087 0: cde
  4088 1: cd
  4089
  4090/[abhgefdc]ij/
  4091    hij
  4092 0: hij
  4093
  4094/^(ab|cd)e/
  4095
  4096/(abc|)ef/
  4097    abcdef
  4098 0: ef
  4099 1: 
  4100
  4101/(a|b)c*d/
  4102    abcd
  4103 0: bcd
  4104 1: b
  4105
  4106/(ab|ab*)bc/
  4107    abc
  4108 0: abc
  4109 1: a
  4110
  4111/a([bc]*)c*/
  4112    abc
  4113 0: abc
  4114 1: bc
  4115
  4116/a([bc]*)(c*d)/
  4117    abcd
  4118 0: abcd
  4119 1: bc
  4120 2: d
  4121
  4122/a([bc]+)(c*d)/
  4123    abcd
  4124 0: abcd
  4125 1: bc
  4126 2: d
  4127
  4128/a([bc]*)(c+d)/
  4129    abcd
  4130 0: abcd
  4131 1: b
  4132 2: cd
  4133
  4134/a[bcd]*dcdcde/
  4135    adcdcde
  4136 0: adcdcde
  4137
  4138/a[bcd]+dcdcde/
  4139\= Expect no match
  4140    abcde
  4141No match
  4142    adcdcde
  4143No match
  4144
  4145/(ab|a)b*c/
  4146    abc
  4147 0: abc
  4148 1: ab
  4149
  4150/((a)(b)c)(d)/
  4151    abcd
  4152 0: abcd
  4153 1: abc
  4154 2: a
  4155 3: b
  4156 4: d
  4157
  4158/[a-zA-Z_][a-zA-Z0-9_]*/
  4159    alpha
  4160 0: alpha
  4161
  4162/^a(bc+|b[eh])g|.h$/
  4163    abh
  4164 0: bh
  4165
  4166/(bc+d$|ef*g.|h?i(j|k))/
  4167    effgz
  4168 0: effgz
  4169 1: effgz
  4170    ij
  4171 0: ij
  4172 1: ij
  4173 2: j
  4174    reffgz
  4175 0: effgz
  4176 1: effgz
  4177\= Expect no match
  4178    effg
  4179No match
  4180    bcdd
  4181No match
  4182
  4183/((((((((((a))))))))))/
  4184    a
  4185 0: a
  4186 1: a
  4187 2: a
  4188 3: a
  4189 4: a
  4190 5: a
  4191 6: a
  4192 7: a
  4193 8: a
  4194 9: a
  419510: a
  4196
  4197/((((((((((a))))))))))\10/
  4198    aa
  4199 0: aa
  4200 1: a
  4201 2: a
  4202 3: a
  4203 4: a
  4204 5: a
  4205 6: a
  4206 7: a
  4207 8: a
  4208 9: a
  420910: a
  4210
  4211/(((((((((a)))))))))/
  4212    a
  4213 0: a
  4214 1: a
  4215 2: a
  4216 3: a
  4217 4: a
  4218 5: a
  4219 6: a
  4220 7: a
  4221 8: a
  4222 9: a
  4223
  4224/multiple words of text/
  4225\= Expect no match
  4226    aa
  4227No match
  4228    uh-uh
  4229No match
  4230
  4231/multiple words/
  4232    multiple words, yeah
  4233 0: multiple words
  4234
  4235/(.*)c(.*)/
  4236    abcde
  4237 0: abcde
  4238 1: ab
  4239 2: de
  4240
  4241/\((.*), (.*)\)/
  4242    (a, b)
  4243 0: (a, b)
  4244 1: a
  4245 2: b
  4246
  4247/[k]/
  4248
  4249/abcd/
  4250    abcd
  4251 0: abcd
  4252
  4253/a(bc)d/
  4254    abcd
  4255 0: abcd
  4256 1: bc
  4257
  4258/a[-]?c/
  4259    ac
  4260 0: ac
  4261
  4262/(abc)\1/
  4263    abcabc
  4264 0: abcabc
  4265 1: abc
  4266
  4267/([a-c]*)\1/
  4268    abcabc
  4269 0: abcabc
  4270 1: abc
  4271
  4272/(a)|\1/
  4273    a
  4274 0: a
  4275 1: a
  4276    ab
  4277 0: a
  4278 1: a
  4279\= Expect no match
  4280    x
  4281No match
  4282
  4283/(([a-c])b*?\2)*/
  4284    ababbbcbc
  4285 0: ababb
  4286 1: bb
  4287 2: b
  4288
  4289/(([a-c])b*?\2){3}/
  4290    ababbbcbc
  4291 0: ababbbcbc
  4292 1: cbc
  4293 2: c
  4294
  4295/((\3|b)\2(a)x)+/
  4296    aaaxabaxbaaxbbax
  4297 0: bbax
  4298 1: bbax
  4299 2: b
  4300 3: a
  4301
  4302/((\3|b)\2(a)){2,}/
  4303    bbaababbabaaaaabbaaaabba
  4304 0: bbaaaabba
  4305 1: bba
  4306 2: b
  4307 3: a
  4308
  4309/abc/i
  4310    ABC
  4311 0: ABC
  4312    XABCY
  4313 0: ABC
  4314    ABABC
  4315 0: ABC
  4316\= Expect no match
  4317    aaxabxbaxbbx
  4318No match
  4319    XBC
  4320No match
  4321    AXC
  4322No match
  4323    ABX
  4324No match
  4325
  4326/ab*c/i
  4327    ABC
  4328 0: ABC
  4329
  4330/ab*bc/i
  4331    ABC
  4332 0: ABC
  4333    ABBC
  4334 0: ABBC
  4335
  4336/ab*?bc/i
  4337    ABBBBC
  4338 0: ABBBBC
  4339
  4340/ab{0,}?bc/i
  4341    ABBBBC
  4342 0: ABBBBC
  4343
  4344/ab+?bc/i
  4345    ABBC
  4346 0: ABBC
  4347
  4348/ab+bc/i
  4349\= Expect no match
  4350    ABC
  4351No match
  4352    ABQ
  4353No match
  4354
  4355/ab{1,}bc/i
  4356
  4357/ab+bc/i
  4358    ABBBBC
  4359 0: ABBBBC
  4360
  4361/ab{1,}?bc/i
  4362    ABBBBC
  4363 0: ABBBBC
  4364
  4365/ab{1,3}?bc/i
  4366    ABBBBC
  4367 0: ABBBBC
  4368
  4369/ab{3,4}?bc/i
  4370    ABBBBC
  4371 0: ABBBBC
  4372
  4373/ab{4,5}?bc/i
  4374\= Expect no match
  4375    ABQ
  4376No match
  4377    ABBBBC
  4378No match
  4379
  4380/ab??bc/i
  4381    ABBC
  4382 0: ABBC
  4383    ABC
  4384 0: ABC
  4385
  4386/ab{0,1}?bc/i
  4387    ABC
  4388 0: ABC
  4389
  4390/ab??bc/i
  4391
  4392/ab??c/i
  4393    ABC
  4394 0: ABC
  4395
  4396/ab{0,1}?c/i
  4397    ABC
  4398 0: ABC
  4399
  4400/^abc$/i
  4401    ABC
  4402 0: ABC
  4403\= Expect no match
  4404    ABBBBC
  4405No match
  4406    ABCC
  4407No match
  4408
  4409/^abc/i
  4410    ABCC
  4411 0: ABC
  4412
  4413/^abc$/i
  4414
  4415/abc$/i
  4416    AABC
  4417 0: ABC
  4418
  4419/^/i
  4420    ABC
  4421 0: 
  4422
  4423/$/i
  4424    ABC
  4425 0: 
  4426
  4427/a.c/i
  4428    ABC
  4429 0: ABC
  4430    AXC
  4431 0: AXC
  4432
  4433/a.*?c/i
  4434    AXYZC
  4435 0: AXYZC
  4436
  4437/a.*c/i
  4438    AABC
  4439 0: AABC
  4440\= Expect no match
  4441    AXYZD
  4442No match
  4443
  4444/a[bc]d/i
  4445    ABD
  4446 0: ABD
  4447
  4448/a[b-d]e/i
  4449    ACE
  4450 0: ACE
  4451\= Expect no match
  4452    ABC
  4453No match
  4454    ABD
  4455No match
  4456
  4457/a[b-d]/i
  4458    AAC
  4459 0: AC
  4460
  4461/a[-b]/i
  4462    A-
  4463 0: A-
  4464
  4465/a[b-]/i
  4466    A-
  4467 0: A-
  4468
  4469/a]/i
  4470    A]
  4471 0: A]
  4472
  4473/a[]]b/i
  4474    A]B
  4475 0: A]B
  4476
  4477/a[^bc]d/i
  4478    AED
  4479 0: AED
  4480
  4481/a[^-b]c/i
  4482    ADC
  4483 0: ADC
  4484\= Expect no match
  4485    ABD
  4486No match
  4487    A-C
  4488No match
  4489
  4490/a[^]b]c/i
  4491    ADC
  4492 0: ADC
  4493
  4494/ab|cd/i
  4495    ABC
  4496 0: AB
  4497    ABCD
  4498 0: AB
  4499
  4500/()ef/i
  4501    DEF
  4502 0: EF
  4503 1: 
  4504
  4505/$b/i
  4506\= Expect no match
  4507    A]C
  4508No match
  4509    B
  4510No match
  4511
  4512/a\(b/i
  4513    A(B
  4514 0: A(B
  4515
  4516/a\(*b/i
  4517    AB
  4518 0: AB
  4519    A((B
  4520 0: A((B
  4521
  4522/a\\b/i
  4523    A\\b
  4524 0: A\b
  4525    a\\B 
  4526 0: a\B
  4527
  4528/((a))/i
  4529    ABC
  4530 0: A
  4531 1: A
  4532 2: A
  4533
  4534/(a)b(c)/i
  4535    ABC
  4536 0: ABC
  4537 1: A
  4538 2: C
  4539
  4540/a+b+c/i
  4541    AABBABC
  4542 0: ABC
  4543
  4544/a{1,}b{1,}c/i
  4545    AABBABC
  4546 0: ABC
  4547
  4548/a.+?c/i
  4549    ABCABC
  4550 0: ABC
  4551
  4552/a.*?c/i
  4553    ABCABC
  4554 0: ABC
  4555
  4556/a.{0,5}?c/i
  4557    ABCABC
  4558 0: ABC
  4559
  4560/(a+|b)*/i
  4561    AB
  4562 0: AB
  4563 1: B
  4564
  4565/(a+|b){0,}/i
  4566    AB
  4567 0: AB
  4568 1: B
  4569
  4570/(a+|b)+/i
  4571    AB
  4572 0: AB
  4573 1: B
  4574
  4575/(a+|b){1,}/i
  4576    AB
  4577 0: AB
  4578 1: B
  4579
  4580/(a+|b)?/i
  4581    AB
  4582 0: A
  4583 1: A
  4584
  4585/(a+|b){0,1}/i
  4586    AB
  4587 0: A
  4588 1: A
  4589
  4590/(a+|b){0,1}?/i
  4591    AB
  4592 0: 
  4593
  4594/[^ab]*/i
  4595    CDE
  4596 0: CDE
  4597
  4598/([abc])*d/i
  4599    ABBBCD
  4600 0: ABBBCD
  4601 1: C
  4602
  4603/([abc])*bcd/i
  4604    ABCD
  4605 0: ABCD
  4606 1: A
  4607
  4608/a|b|c|d|e/i
  4609    E
  4610 0: E
  4611
  4612/(a|b|c|d|e)f/i
  4613    EF
  4614 0: EF
  4615 1: E
  4616
  4617/abcd*efg/i
  4618    ABCDEFG
  4619 0: ABCDEFG
  4620
  4621/ab*/i
  4622    XABYABBBZ
  4623 0: AB
  4624    XAYABBBZ
  4625 0: A
  4626
  4627/(ab|cd)e/i
  4628    ABCDE
  4629 0: CDE
  4630 1: CD
  4631
  4632/[abhgefdc]ij/i
  4633    HIJ
  4634 0: HIJ
  4635
  4636/^(ab|cd)e/i
  4637\= Expect no match
  4638    ABCDE
  4639No match
  4640
  4641/(abc|)ef/i
  4642    ABCDEF
  4643 0: EF
  4644 1: 
  4645
  4646/(a|b)c*d/i
  4647    ABCD
  4648 0: BCD
  4649 1: B
  4650
  4651/(ab|ab*)bc/i
  4652    ABC
  4653 0: ABC
  4654 1: A
  4655
  4656/a([bc]*)c*/i
  4657    ABC
  4658 0: ABC
  4659 1: BC
  4660
  4661/a([bc]*)(c*d)/i
  4662    ABCD
  4663 0: ABCD
  4664 1: BC
  4665 2: D
  4666
  4667/a([bc]+)(c*d)/i
  4668    ABCD
  4669 0: ABCD
  4670 1: BC
  4671 2: D
  4672
  4673/a([bc]*)(c+d)/i
  4674    ABCD
  4675 0: ABCD
  4676 1: B
  4677 2: CD
  4678
  4679/a[bcd]*dcdcde/i
  4680    ADCDCDE
  4681 0: ADCDCDE
  4682
  4683/a[bcd]+dcdcde/i
  4684
  4685/(ab|a)b*c/i
  4686    ABC
  4687 0: ABC
  4688 1: AB
  4689
  4690/((a)(b)c)(d)/i
  4691    ABCD
  4692 0: ABCD
  4693 1: ABC
  4694 2: A
  4695 3: B
  4696 4: D
  4697
  4698/[a-zA-Z_][a-zA-Z0-9_]*/i
  4699    ALPHA
  4700 0: ALPHA
  4701
  4702/^a(bc+|b[eh])g|.h$/i
  4703    ABH
  4704 0: BH
  4705
  4706/(bc+d$|ef*g.|h?i(j|k))/i
  4707    EFFGZ
  4708 0: EFFGZ
  4709 1: EFFGZ
  4710    IJ
  4711 0: IJ
  4712 1: IJ
  4713 2: J
  4714    REFFGZ
  4715 0: EFFGZ
  4716 1: EFFGZ
  4717\= Expect no match
  4718    ADCDCDE
  4719No match
  4720    EFFG
  4721No match
  4722    BCDD
  4723No match
  4724
  4725/((((((((((a))))))))))/i
  4726    A
  4727 0: A
  4728 1: A
  4729 2: A
  4730 3: A
  4731 4: A
  4732 5: A
  4733 6: A
  4734 7: A
  4735 8: A
  4736 9: A
  473710: A
  4738
  4739/((((((((((a))))))))))\10/i
  4740    AA
  4741 0: AA
  4742 1: A
  4743 2: A
  4744 3: A
  4745 4: A
  4746 5: A
  4747 6: A
  4748 7: A
  4749 8: A
  4750 9: A
  475110: A
  4752
  4753/(((((((((a)))))))))/i
  4754    A
  4755 0: A
  4756 1: A
  4757 2: A
  4758 3: A
  4759 4: A
  4760 5: A
  4761 6: A
  4762 7: A
  4763 8: A
  4764 9: A
  4765
  4766/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
  4767    A
  4768 0: A
  4769 1: A
  4770
  4771/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
  4772    C
  4773 0: C
  4774 1: C
  4775
  4776/multiple words of text/i
  4777\= Expect no match
  4778    AA
  4779No match
  4780    UH-UH
  4781No match
  4782
  4783/multiple words/i
  4784    MULTIPLE WORDS, YEAH
  4785 0: MULTIPLE WORDS
  4786
  4787/(.*)c(.*)/i
  4788    ABCDE
  4789 0: ABCDE
  4790 1: AB
  4791 2: DE
  4792
  4793/\((.*), (.*)\)/i
  4794    (A, B)
  4795 0: (A, B)
  4796 1: A
  4797 2: B
  4798
  4799/[k]/i
  4800
  4801/abcd/i
  4802    ABCD
  4803 0: ABCD
  4804
  4805/a(bc)d/i
  4806    ABCD
  4807 0: ABCD
  4808 1: BC
  4809
  4810/a[-]?c/i
  4811    AC
  4812 0: AC
  4813
  4814/(abc)\1/i
  4815    ABCABC
  4816 0: ABCABC
  4817 1: ABC
  4818
  4819/([a-c]*)\1/i
  4820    ABCABC
  4821 0: ABCABC
  4822 1: ABC
  4823
  4824/a(?!b)./
  4825    abad
  4826 0: ad
  4827
  4828/a(?=d)./
  4829    abad
  4830 0: ad
  4831
  4832/a(?=c|d)./
  4833    abad
  4834 0: ad
  4835
  4836/a(?:b|c|d)(.)/
  4837    ace
  4838 0: ace
  4839 1: e
  4840
  4841/a(?:b|c|d)*(.)/
  4842    ace
  4843 0: ace
  4844 1: e
  4845
  4846/a(?:b|c|d)+?(.)/
  4847    ace
  4848 0: ace
  4849 1: e
  4850    acdbcdbe
  4851 0: acd
  4852 1: d
  4853
  4854/a(?:b|c|d)+(.)/
  4855    acdbcdbe
  4856 0: acdbcdbe
  4857 1: e
  4858
  4859/a(?:b|c|d){2}(.)/
  4860    acdbcdbe
  4861 0: acdb
  4862 1: b
  4863
  4864/a(?:b|c|d){4,5}(.)/
  4865    acdbcdbe
  4866 0: acdbcdb
  4867 1: b
  4868
  4869/a(?:b|c|d){4,5}?(.)/
  4870    acdbcdbe
  4871 0: acdbcd
  4872 1: d
  4873
  4874/((foo)|(bar))*/
  4875    foobar
  4876 0: foobar
  4877 1: bar
  4878 2: foo
  4879 3: bar
  4880
  4881/a(?:b|c|d){6,7}(.)/
  4882    acdbcdbe
  4883 0: acdbcdbe
  4884 1: e
  4885
  4886/a(?:b|c|d){6,7}?(.)/
  4887    acdbcdbe
  4888 0: acdbcdbe
  4889 1: e
  4890
  4891/a(?:b|c|d){5,6}(.)/
  4892    acdbcdbe
  4893 0: acdbcdbe
  4894 1: e
  4895
  4896/a(?:b|c|d){5,6}?(.)/
  4897    acdbcdbe
  4898 0: acdbcdb
  4899 1: b
  4900
  4901/a(?:b|c|d){5,7}(.)/
  4902    acdbcdbe
  4903 0: acdbcdbe
  4904 1: e
  4905
  4906/a(?:b|c|d){5,7}?(.)/
  4907    acdbcdbe
  4908 0: acdbcdb
  4909 1: b
  4910
  4911/a(?:b|(c|e){1,2}?|d)+?(.)/
  4912    ace
  4913 0: ace
  4914 1: c
  4915 2: e
  4916
  4917/^(.+)?B/
  4918    AB
  4919 0: AB
  4920 1: A
  4921
  4922/^([^a-z])|(\^)$/
  4923    .
  4924 0: .
  4925 1: .
  4926
  4927/^[<>]&/
  4928    <&OUT
  4929 0: <&
  4930
  4931/^(a\1?){4}$/
  4932    aaaaaaaaaa
  4933 0: aaaaaaaaaa
  4934 1: aaaa
  4935\= Expect no match
  4936    AB
  4937No match
  4938    aaaaaaaaa
  4939No match
  4940    aaaaaaaaaaa
  4941No match
  4942
  4943/^(a(?(1)\1)){4}$/
  4944    aaaaaaaaaa
  4945 0: aaaaaaaaaa
  4946 1: aaaa
  4947\= Expect no match
  4948    aaaaaaaaa
  4949No match
  4950    aaaaaaaaaaa
  4951No match
  4952
  4953/(?:(f)(o)(o)|(b)(a)(r))*/
  4954    foobar
  4955 0: foobar
  4956 1: f
  4957 2: o
  4958 3: o
  4959 4: b
  4960 5: a
  4961 6: r
  4962
  4963/(?<=a)b/
  4964    ab
  4965 0: b
  4966\= Expect no match
  4967    cb
  4968No match
  4969    b
  4970No match
  4971
  4972/(?<!c)b/
  4973    ab
  4974 0: b
  4975    b
  4976 0: b
  4977    b
  4978 0: b
  4979
  4980/(?:..)*a/
  4981    aba
  4982 0: aba
  4983
  4984/(?:..)*?a/
  4985    aba
  4986 0: a
  4987
  4988/^(?:b|a(?=(.)))*\1/
  4989    abc
  4990 0: ab
  4991 1: b
  4992
  4993/^(){3,5}/
  4994    abc
  4995 0: 
  4996 1: 
  4997
  4998/^(a+)*ax/
  4999    aax
  5000 0: aax
  5001 1: a
  5002
  5003/^((a|b)+)*ax/
  5004    aax
  5005 0: aax
  5006 1: a
  5007 2: a
  5008
  5009/^((a|bc)+)*ax/
  5010    aax
  5011 0: aax
  5012 1: a
  5013 2: a
  5014
  5015/(a|x)*ab/
  5016    cab
  5017 0: ab
  5018
  5019/(a)*ab/
  5020    cab
  5021 0: ab
  5022
  5023/(?:(?i)a)b/
  5024    ab
  5025 0: ab
  5026
  5027/((?i)a)b/
  5028    ab
  5029 0: ab
  5030 1: a
  5031
  5032/(?:(?i)a)b/
  5033    Ab
  5034 0: Ab
  5035
  5036/((?i)a)b/
  5037    Ab
  5038 0: Ab
  5039 1: A
  5040
  5041/(?:(?i)a)b/
  5042\= Expect no match
  5043    cb
  5044No match
  5045    aB
  5046No match
  5047
  5048/((?i)a)b/
  5049
  5050/(?i:a)b/
  5051    ab
  5052 0: ab
  5053
  5054/((?i:a))b/
  5055    ab
  5056 0: ab
  5057 1: a
  5058
  5059/(?i:a)b/
  5060    Ab
  5061 0: Ab
  5062
  5063/((?i:a))b/
  5064    Ab
  5065 0: Ab
  5066 1: A
  5067
  5068/(?i:a)b/
  5069\= Expect no match
  5070    aB
  5071No match
  5072    aB
  5073No match
  5074
  5075/((?i:a))b/
  5076
  5077/(?:(?-i)a)b/i
  5078    ab
  5079 0: ab
  5080
  5081/((?-i)a)b/i
  5082    ab
  5083 0: ab
  5084 1: a
  5085
  5086/(?:(?-i)a)b/i
  5087    aB
  5088 0: aB
  5089
  5090/((?-i)a)b/i
  5091    aB
  5092 0: aB
  5093 1: a
  5094
  5095/(?:(?-i)a)b/i
  5096    aB
  5097 0: aB
  5098\= Expect no match
  5099    Ab
  5100No match
  5101    AB
  5102No match
  5103
  5104/(?-i:a)b/i
  5105    ab
  5106 0: ab
  5107
  5108/((?-i:a))b/i
  5109    ab
  5110 0: ab
  5111 1: a
  5112
  5113/(?-i:a)b/i
  5114    aB
  5115 0: aB
  5116
  5117/((?-i:a))b/i
  5118    aB
  5119 0: aB
  5120 1: a
  5121
  5122/(?-i:a)b/i
  5123\= Expect no match
  5124    AB
  5125No match
  5126    Ab
  5127No match
  5128
  5129/((?-i:a))b/i
  5130
  5131/(?-i:a)b/i
  5132    aB
  5133 0: aB
  5134
  5135/((?-i:a))b/i
  5136    aB
  5137 0: aB
  5138 1: a
  5139
  5140/(?-i:a)b/i
  5141\= Expect no match
  5142    Ab
  5143No match
  5144    AB
  5145No match
  5146
  5147/((?-i:a))b/i
  5148
  5149/((?-i:a.))b/i
  5150\= Expect no match
  5151    AB
  5152No match
  5153    a\nB
  5154No match
  5155
  5156/((?s-i:a.))b/i
  5157    a\nB
  5158 0: a\x0aB
  5159 1: a\x0a
  5160
  5161/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
  5162    cabbbb
  5163 0: cabbbb
  5164
  5165/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
  5166    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  5167 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
  5168
  5169/(ab)\d\1/i
  5170    Ab4ab
  5171 0: Ab4ab
  5172 1: Ab
  5173    ab4Ab
  5174 0: ab4Ab
  5175 1: ab
  5176
  5177/foo\w*\d{4}baz/
  5178    foobar1234baz
  5179 0: foobar1234baz
  5180
  5181/x(~~)*(?:(?:F)?)?/
  5182    x~~
  5183 0: x~~
  5184 1: ~~
  5185
  5186/^a(?#xxx){3}c/
  5187    aaac
  5188 0: aaac
  5189
  5190/^a (?#xxx) (?#yyy) {3}c/x
  5191    aaac
  5192 0: aaac
  5193
  5194/(?<![cd])b/
  5195\= Expect no match
  5196    B\nB
  5197No match
  5198    dbcb
  5199No match
  5200
  5201/(?<![cd])[ab]/
  5202    dbaacb
  5203 0: a
  5204
  5205/(?<!(c|d))b/
  5206
  5207/(?<!(c|d))[ab]/
  5208    dbaacb
  5209 0: a
  5210
  5211/(?<!cd)[ab]/
  5212    cdaccb
  5213 0: b
  5214
  5215/^(?:a?b?)*$/
  5216    \
  5217 0: 
  5218    a
  5219 0: a
  5220    ab
  5221 0: ab
  5222    aaa   
  5223 0: aaa
  5224\= Expect no match
  5225    dbcb
  5226No match
  5227    a--
  5228No match
  5229    aa-- 
  5230No match
  5231
  5232/((?s)^a(.))((?m)^b$)/
  5233    a\nb\nc\n
  5234 0: a\x0ab
  5235 1: a\x0a
  5236 2: \x0a
  5237 3: b
  5238
  5239/((?m)^b$)/
  5240    a\nb\nc\n
  5241 0: b
  5242 1: b
  5243
  5244/(?m)^b/
  5245    a\nb\n
  5246 0: b
  5247
  5248/(?m)^(b)/
  5249    a\nb\n
  5250 0: b
  5251 1: b
  5252
  5253/((?m)^b)/
  5254    a\nb\n
  5255 0: b
  5256 1: b
  5257
  5258/\n((?m)^b)/
  5259    a\nb\n
  5260 0: \x0ab
  5261 1: b
  5262
  5263/((?s).)c(?!.)/
  5264    a\nb\nc\n
  5265 0: \x0ac
  5266 1: \x0a
  5267    a\nb\nc\n
  5268 0: \x0ac
  5269 1: \x0a
  5270
  5271/((?s)b.)c(?!.)/
  5272    a\nb\nc\n
  5273 0: b\x0ac
  5274 1: b\x0a
  5275    a\nb\nc\n
  5276 0: b\x0ac
  5277 1: b\x0a
  5278
  5279/^b/
  5280
  5281/()^b/
  5282\= Expect no match
  5283    a\nb\nc\n
  5284No match
  5285    a\nb\nc\n
  5286No match
  5287
  5288/((?m)^b)/
  5289    a\nb\nc\n
  5290 0: b
  5291 1: b
  5292
  5293/(x)?(?(1)a|b)/
  5294\= Expect no match
  5295    a
  5296No match
  5297    a
  5298No match
  5299
  5300/(x)?(?(1)b|a)/
  5301    a
  5302 0: a
  5303
  5304/()?(?(1)b|a)/
  5305    a
  5306 0: a
  5307
  5308/()(?(1)b|a)/
  5309
  5310/()?(?(1)a|b)/
  5311    a
  5312 0: a
  5313 1: 
  5314
  5315/^(\()?blah(?(1)(\)))$/
  5316    (blah)
  5317 0: (blah)
  5318 1: (
  5319 2: )
  5320    blah
  5321 0: blah
  5322\= Expect no match
  5323    a
  5324No match
  5325    blah)
  5326No match
  5327    (blah
  5328No match
  5329
  5330/^(\(+)?blah(?(1)(\)))$/
  5331    (blah)
  5332 0: (blah)
  5333 1: (
  5334 2: )
  5335    blah
  5336 0: blah
  5337\= Expect no match
  5338    blah)
  5339No match
  5340    (blah
  5341No match
  5342
  5343/(?(?!a)a|b)/
  5344
  5345/(?(?!a)b|a)/
  5346    a
  5347 0: a
  5348
  5349/(?(?=a)b|a)/
  5350\= Expect no match
  5351    a
  5352No match
  5353    a
  5354No match
  5355
  5356/(?(?=a)a|b)/
  5357    a
  5358 0: a
  5359
  5360/(?=(a+?))(\1ab)/
  5361    aaab
  5362 0: aab
  5363 1: a
  5364 2: aab
  5365
  5366/^(?=(a+?))\1ab/
  5367
  5368/(\w+:)+/
  5369    one:
  5370 0: one:
  5371 1: one:
  5372
  5373/$(?<=^(a))/
  5374    a
  5375 0: 
  5376 1: a
  5377
  5378/(?=(a+?))(\1ab)/
  5379    aaab
  5380 0: aab
  5381 1: a
  5382 2: aab
  5383
  5384/^(?=(a+?))\1ab/
  5385\= Expect no match
  5386    aaab
  5387No match
  5388    aaab
  5389No match
  5390
  5391/([\w:]+::)?(\w+)$/
  5392    abcd
  5393 0: abcd
  5394 1: <unset>
  5395 2: abcd
  5396    xy:z:::abcd
  5397 0: xy:z:::abcd
  5398 1: xy:z:::
  5399 2: abcd
  5400
  5401/^[^bcd]*(c+)/
  5402    aexycd
  5403 0: aexyc
  5404 1: c
  5405
  5406/(a*)b+/
  5407    caab
  5408 0: aab
  5409 1: aa
  5410
  5411/([\w:]+::)?(\w+)$/
  5412    abcd
  5413 0: abcd
  5414 1: <unset>
  5415 2: abcd
  5416    xy:z:::abcd
  5417 0: xy:z:::abcd
  5418 1: xy:z:::
  5419 2: abcd
  5420\= Expect no match
  5421    abcd:
  5422No match
  5423    abcd:
  5424No match
  5425
  5426/^[^bcd]*(c+)/
  5427    aexycd
  5428 0: aexyc
  5429 1: c
  5430
  5431/(>a+)ab/
  5432
  5433/(?>a+)b/
  5434    aaab
  5435 0: aaab
  5436
  5437/([[:]+)/
  5438    a:[b]:
  5439 0: :[
  5440 1: :[
  5441
  5442/([[=]+)/
  5443    a=[b]=
  5444 0: =[
  5445 1: =[
  5446
  5447/([[.]+)/
  5448    a.[b].
  5449 0: .[
  5450 1: .[
  5451
  5452/((?>a+)b)/
  5453    aaab
  5454 0: aaab
  5455 1: aaab
  5456
  5457/(?>(a+))b/
  5458    aaab
  5459 0: aaab
  5460 1: aaa
  5461
  5462/((?>[^()]+)|\([^()]*\))+/
  5463    ((abc(ade)ufh()()x
  5464 0: abc(ade)ufh()()x
  5465 1: x
  5466
  5467/a\Z/
  5468\= Expect no match
  5469    aaab
  5470No match
  5471    a\nb\n
  5472No match
  5473
  5474/b\Z/
  5475    a\nb\n
  5476 0: b
  5477
  5478/b\z/
  5479
  5480/b\Z/
  5481    a\nb
  5482 0: b
  5483
  5484/b\z/
  5485    a\nb
  5486 0: b
  5487    
  5488/^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
  5489    a
  5490 0: a
  5491 1: 
  5492    abc
  5493 0: abc
  5494 1: 
  5495    a-b
  5496 0: a-b
  5497 1: 
  5498    0-9
  5499 0: 0-9
  5500 1: 
  5501    a.b
  5502 0: a.b
  5503 1: 
  5504    5.6.7
  5505 0: 5.6.7
  5506 1: 
  5507    the.quick.brown.fox
  5508 0: the.quick.brown.fox
  5509 1: 
  5510    a100.b200.300c
  5511 0: a100.b200.300c
  5512 1: 
  5513    12-ab.1245
  5514 0: 12-ab.1245
  5515 1: 
  5516\= Expect no match
  5517    \
  5518No match
  5519    .a
  5520No match
  5521    -a
  5522No match
  5523    a-
  5524No match
  5525    a.
  5526No match
  5527    a_b
  5528No match
  5529    a.-
  5530No match
  5531    a..
  5532No match
  5533    ab..bc
  5534No match
  5535    the.quick.brown.fox-
  5536No match
  5537    the.quick.brown.fox.
  5538No match
  5539    the.quick.brown.fox_
  5540No match
  5541    the.quick.brown.fox+
  5542No match
  5543
  5544/(?>.*)(?<=(abcd|wxyz))/
  5545    alphabetabcd
  5546 0: alphabetabcd
  5547 1: abcd
  5548    endingwxyz
  5549 0: endingwxyz
  5550 1: wxyz
  5551\= Expect no match
  5552    a rather long string that doesn't end with one of them
  5553No match
  5554
  5555/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
  5556    word cat dog elephant mussel cow horse canary baboon snake shark otherword
  5557 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
  5558\= Expect no match
  5559    word cat dog elephant mussel cow horse canary baboon snake shark
  5560No match
  5561  
  5562/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
  5563\= Expect no match
  5564    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
  5565No match
  5566
  5567/(?<=\d{3}(?!999))foo/
  5568    999foo
  5569 0: foo
  5570    123999foo 
  5571 0: foo
  5572\= Expect no match
  5573    123abcfoo
  5574No match
  5575    
  5576/(?<=(?!...999)\d{3})foo/
  5577    999foo
  5578 0: foo
  5579    123999foo 
  5580 0: foo
  5581\= Expect no match
  5582    123abcfoo
  5583No match
  5584
  5585/(?<=\d{3}(?!999)...)foo/
  5586    123abcfoo
  5587 0: foo
  5588    123456foo 
  5589 0: foo
  5590\= Expect no match
  5591    123999foo  
  5592No match
  5593    
  5594/(?<=\d{3}...)(?<!999)foo/
  5595    123abcfoo   
  5596 0: foo
  5597    123456foo 
  5598 0: foo
  5599\= Expect no match
  5600    123999foo  
  5601No match
  5602
  5603/<a[\s]+href[\s]*=[\s]*          # find <a href=
  5604 ([\"\'])?                       # find single or double quote
  5605 (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
  5606                                 # quote, otherwise match up to next space
  5607/isx
  5608    <a href=abcd xyz
  5609 0: <a href=abcd
  5610 1: <unset>
  5611 2: <unset>
  5612 3: abcd
  5613    <a href=\"abcd xyz pqr\" cats
  5614 0: <a href="abcd xyz pqr"
  5615 1: "
  5616 2: abcd xyz pqr
  5617    <a href=\'abcd xyz pqr\' cats
  5618 0: <a href='abcd xyz pqr'
  5619 1: '
  5620 2: abcd xyz pqr
  5621
  5622/<a\s+href\s*=\s*                # find <a href=
  5623 (["'])?                         # find single or double quote
  5624 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
  5625                                 # quote, otherwise match up to next space
  5626/isx
  5627    <a href=abcd xyz
  5628 0: <a href=abcd
  5629 1: <unset>
  5630 2: <unset>
  5631 3: abcd
  5632    <a href=\"abcd xyz pqr\" cats
  5633 0: <a href="abcd xyz pqr"
  5634 1: "
  5635 2: abcd xyz pqr
  5636    <a href       =       \'abcd xyz pqr\' cats
  5637 0: <a href       =       'abcd xyz pqr'
  5638 1: '
  5639 2: abcd xyz pqr
  5640
  5641/<a\s+href(?>\s*)=(?>\s*)        # find <a href=
  5642 (["'])?                         # find single or double quote
  5643 (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
  5644                                 # quote, otherwise match up to next space
  5645/isx
  5646    <a href=abcd xyz
  5647 0: <a href=abcd
  5648 1: <unset>
  5649 2: <unset>
  5650 3: abcd
  5651    <a href=\"abcd xyz pqr\" cats
  5652 0: <a href="abcd xyz pqr"
  5653 1: "
  5654 2: abcd xyz pqr
  5655    <a href       =       \'abcd xyz pqr\' cats
  5656 0: <a href       =       'abcd xyz pqr'
  5657 1: '
  5658 2: abcd xyz pqr
  5659
  5660/((Z)+|A)*/
  5661    ZABCDEFG
  5662 0: ZA
  5663 1: A
  5664 2: Z
  5665
  5666/(Z()|A)*/
  5667    ZABCDEFG
  5668 0: ZA
  5669 1: A
  5670 2: 
  5671
  5672/(Z(())|A)*/
  5673    ZABCDEFG
  5674 0: ZA
  5675 1: A
  5676 2: 
  5677 3: 
  5678
  5679/((?>Z)+|A)*/
  5680    ZABCDEFG
  5681 0: ZA
  5682 1: A
  5683
  5684/((?>)+|A)*/
  5685    ZABCDEFG
  5686 0: 
  5687 1: 
  5688
  5689/^[\d-a]/
  5690    abcde
  5691 0: a
  5692    -things
  5693 0: -
  5694    0digit
  5695 0: 0
  5696\= Expect no match
  5697    bcdef    
  5698No match
  5699    
  5700/[\s]+/
  5701    > \x09\x0a\x0c\x0d\x0b<
  5702 0:  \x09\x0a\x0c\x0d\x0b
  5703     
  5704/\s+/
  5705    > \x09\x0a\x0c\x0d\x0b<
  5706 0:  \x09\x0a\x0c\x0d\x0b
  5707     
  5708/ab/x
  5709    ab
  5710 0: ab
  5711
  5712/(?!\A)x/m
  5713    a\nxb\n
  5714 0: x
  5715
  5716/(?!^)x/m
  5717\= Expect no match
  5718    a\nxb\n
  5719No match
  5720
  5721#/abc\Qabc\Eabc/
  5722#    abcabcabc
  5723# 0: abcabcabc
  5724    
  5725#/abc\Q(*+|\Eabc/
  5726#    abc(*+|abc 
  5727# 0: abc(*+|abc
  5728
  5729#/   abc\Q abc\Eabc/x
  5730#    abc abcabc
  5731# 0: abc abcabc
  5732#\= Expect no match
  5733#    abcabcabc  
  5734#No match
  5735    
  5736#/abc#comment
  5737#    \Q#not comment
  5738#    literal\E/x
  5739#    abc#not comment\n    literal     
  5740# 0: abc#not comment\x0a    literal
  5741
  5742#/abc#comment
  5743#    \Q#not comment
  5744#    literal/x
  5745#    abc#not comment\n    literal     
  5746# 0: abc#not comment\x0a    literal
  5747
  5748#/abc#comment
  5749#    \Q#not comment
  5750#    literal\E #more comment
  5751#    /x
  5752#    abc#not comment\n    literal     
  5753# 0: abc#not comment\x0a    literal
  5754
  5755#/abc#comment
  5756#    \Q#not comment
  5757#    literal\E #more comment/x
  5758#    abc#not comment\n    literal     
  5759# 0: abc#not comment\x0a    literal
  5760
  5761#/\Qabc\$xyz\E/
  5762#    abc\\\$xyz
  5763# 0: abc\$xyz
  5764
  5765#/\Qabc\E\$\Qxyz\E/
  5766#    abc\$xyz
  5767# 0: abc$xyz
  5768
  5769/\Gabc/
  5770    abc
  5771 0: abc
  5772\= Expect no match
  5773    xyzabc  
  5774No match
  5775
  5776/a(?x: b c )d/
  5777    XabcdY
  5778 0: abcd
  5779\= Expect no match 
  5780    Xa b c d Y 
  5781No match
  5782
  5783/((?x)x y z | a b c)/
  5784    XabcY
  5785 0: abc
  5786 1: abc
  5787    AxyzB 
  5788 0: xyz
  5789 1: xyz
  5790
  5791/(?i)AB(?-i)C/
  5792    XabCY
  5793 0: abC
  5794\= Expect no match
  5795    XabcY  
  5796No match
  5797
  5798/((?i)AB(?-i)C|D)E/
  5799    abCE
  5800 0: abCE
  5801 1: abC
  5802    DE
  5803 0: DE
  5804 1: D
  5805\= Expect no match
  5806    abcE
  5807No match
  5808    abCe  
  5809No match
  5810    dE
  5811No match
  5812    De    
  5813No match
  5814
  5815/(.*)\d+\1/
  5816    abc123abc
  5817 0: abc123abc
  5818 1: abc
  5819    abc123bc 
  5820 0: bc123bc
  5821 1: bc
  5822
  5823/(.*)\d+\1/s
  5824    abc123abc
  5825 0: abc123abc
  5826 1: abc
  5827    abc123bc 
  5828 0: bc123bc
  5829 1: bc
  5830    
  5831/((.*))\d+\1/
  5832    abc123abc
  5833 0: abc123abc
  5834 1: abc
  5835 2: abc
  5836    abc123bc  
  5837 0: bc123bc
  5838 1: bc
  5839 2: bc
  5840
  5841# This tests for an IPv6 address in the form where it can have up to
  5842# eight components, one and only one of which is empty. This must be
  5843# an internal component. 
  5844
  5845/^(?!:)                       # colon disallowed at start
  5846  (?:                         # start of item
  5847    (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
  5848    (?(1)0 | () ) )           # if null previously matched, fail; else null
  5849    :                         # followed by colon
  5850  ){1,7}                      # end item; 1-7 of them required               
  5851  [0-9a-f]{1,4} $             # final hex number at end of string
  5852  (?(1)|.)                    # check that there was an empty component
  5853  /ix
  5854    a123::a123
  5855 0: a123::a123
  5856 1: 
  5857    a123:b342::abcd
  5858 0: a123:b342::abcd
  5859 1: 
  5860    a123:b342::324e:abcd
  5861 0: a123:b342::324e:abcd
  5862 1: 
  5863    a123:ddde:b342::324e:abcd
  5864 0: a123:ddde:b342::324e:abcd
  5865 1: 
  5866    a123:ddde:b342::324e:dcba:abcd
  5867 0: a123:ddde:b342::324e:dcba:abcd
  5868 1: 
  5869    a123:ddde:9999:b342::324e:dcba:abcd
  5870 0: a123:ddde:9999:b342::324e:dcba:abcd
  5871 1: 
  5872\= Expect no match
  5873    1:2:3:4:5:6:7:8
  5874No match
  5875    a123:bce:ddde:9999:b342::324e:dcba:abcd
  5876No match
  5877    a123::9999:b342::324e:dcba:abcd
  5878No match
  5879    abcde:2:3:4:5:6:7:8
  5880No match
  5881    ::1
  5882No match
  5883    abcd:fee0:123::   
  5884No match
  5885    :1
  5886No match
  5887    1:  
  5888No match
  5889
  5890#/[z\Qa-d]\E]/
  5891#    z
  5892# 0: z
  5893#    a
  5894# 0: a
  5895#    -
  5896# 0: -
  5897#    d
  5898# 0: d
  5899#    ] 
  5900# 0: ]
  5901#\= Expect no match
  5902#    b     
  5903#No match
  5904
  5905#TODO: PCRE has an optimization to make this workable, .NET does not
  5906#/(a+)*b/
  5907#\= Expect no match
  5908#    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
  5909#No match
  5910
  5911# All these had to be updated because we understand unicode
  5912# and this looks like it's expecting single byte matches
  5913
  5914# .NET generates \xe4...not sure what's up, might just be different code pages
  5915/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
  5916    REGular
  5917 0: REGular
  5918    regulaer
  5919 0: regulaer
  5920    Regex  
  5921 0: Regex
  5922    regulär 
  5923 0: regul\xc3\xa4r
  5924
  5925#/Åæåä[à-ÿÀ-ß]+/
  5926#    Åæåäà
  5927# 0: \xc5\xe6\xe5\xe4\xe0
  5928#    Åæåäÿ
  5929# 0: \xc5\xe6\xe5\xe4\xff
  5930#    ÅæåäÀ
  5931# 0: \xc5\xe6\xe5\xe4\xc0
  5932#    Åæåäß
  5933# 0: \xc5\xe6\xe5\xe4\xdf
  5934
  5935/(?<=Z)X./
  5936    \x84XAZXB
  5937 0: XB
  5938
  5939/ab cd (?x) de fg/
  5940    ab cd defg
  5941 0: ab cd defg
  5942
  5943/ab cd(?x) de fg/
  5944    ab cddefg
  5945 0: ab cddefg
  5946\= Expect no match 
  5947    abcddefg
  5948No match
  5949
  5950/(?<![^f]oo)(bar)/
  5951    foobarX 
  5952 0: bar
  5953 1: bar
  5954\= Expect no match 
  5955    boobarX
  5956No match
  5957
  5958/(?<![^f])X/
  5959    offX
  5960 0: X
  5961\= Expect no match
  5962    onyX  
  5963No match
  5964
  5965/(?<=[^f])X/
  5966    onyX
  5967 0: X
  5968\= Expect no match
  5969    offX 
  5970No match
  5971
  5972/(?:(?(1)a|b)(X))+/
  5973    bXaX
  5974 0: bXaX
  5975 1: X
  5976
  5977/(?:(?(1)\1a|b)(X|Y))+/
  5978    bXXaYYaY
  5979 0: bXXaYYaY
  5980 1: Y
  5981    bXYaXXaX  
  5982 0: bX
  5983 1: X
  5984
  5985# TODO: I think this is a difference caused by the 
  5986# collision of group numbers, but not sure 
  5987#/()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
  5988#    bXXaYYaY
  5989# 0: bX
  5990# 1: 
  5991# 2: 
  5992# 3: 
  5993# 4: 
  5994# 5: 
  5995# 6: 
  5996# 7: 
  5997# 8: 
  5998# 9: 
  5999#10: X
  6000
  6001/[[,abc,]+]/
  6002    abc]
  6003 0: abc]
  6004    a,b]
  6005 0: a,b]
  6006    [a,b,c]  
  6007 0: [a,b,c]
  6008
  6009/(?-x: )/x
  6010    A\x20B
  6011 0:  
  6012    
  6013"(?x)(?-x: \s*#\s*)"
  6014    A # B
  6015 0:  # 
  6016\= Expect no match
  6017    #  
  6018No match
  6019
  6020"(?x-is)(?:(?-ixs) \s*#\s*) include"
  6021    A #include
  6022 0:  #include
  6023\= Expect no match
  6024    A#include  
  6025No match
  6026    A #Include
  6027No match
  6028
  6029/a*b*\w/
  6030    aaabbbb
  6031 0: aaabbbb
  6032    aaaa
  6033 0: aaaa
  6034    a
  6035 0: a
  6036
  6037/a*b?\w/
  6038    aaabbbb
  6039 0: aaabb
  6040    aaaa
  6041 0: aaaa
  6042    a
  6043 0: a
  6044
  6045/a*b{0,4}\w/
  6046    aaabbbb
  6047 0: aaabbbb
  6048    aaaa
  6049 0: aaaa
  6050    a
  6051 0: a
  6052
  6053/a*b{0,}\w/
  6054    aaabbbb
  6055 0: aaabbbb
  6056    aaaa
  6057 0: aaaa
  6058    a
  6059 0: a
  6060    
  6061/a*\d*\w/
  6062    0a
  6063 0: 0a
  6064    a 
  6065 0: a
  6066    
  6067/a*b *\w/x
  6068    a 
  6069 0: a
  6070
  6071/a*b#comment
  6072  *\w/x
  6073    a 
  6074 0: a
  6075
  6076/a* b *\w/x
  6077    a 
  6078 0: a
  6079
  6080/^\w+=.*(\\\n.*)*/
  6081    abc=xyz\\\npqr
  6082 0: abc=xyz\
  6083
  6084/(?=(\w+))\1:/
  6085    abcd:
  6086 0: abcd:
  6087 1: abcd
  6088
  6089/^(?=(\w+))\1:/
  6090    abcd:
  6091 0: abcd:
  6092 1: abcd
  6093
  6094#/^\Eabc/
  6095#    abc
  6096# 0: abc
  6097    
  6098#/^[\Eabc]/
  6099#    a
  6100# 0: a
  6101#\= Expect no match 
  6102#    E 
  6103#No match
  6104    
  6105#/^[a-\Ec]/
  6106#    b
  6107# 0: b
  6108#\= Expect no match
  6109#    -
  6110#No match
  6111#    E    
  6112#No match
  6113
  6114#/^[a\E\E-\Ec]/
  6115#    b
  6116# 0: b
  6117#\= Expect no match
  6118#    -
  6119#No match
  6120#    E    
  6121#No match
  6122
  6123#/^[\E\Qa\E-\Qz\E]+/
  6124#    b
  6125# 0: b
  6126#\= Expect no match
  6127#    -  
  6128#No match
  6129    
  6130#/^[a\Q]bc\E]/
  6131#    a
  6132# 0: a
  6133#    ]
  6134# 0: ]
  6135#    c
  6136# 0: c
  6137    
  6138#/^[a-\Q\E]/
  6139#    a
  6140# 0: a
  6141#    -     
  6142# 0: -
  6143
  6144/^(a()*)*/
  6145    aaaa
  6146 0: aaaa
  6147 1: a
  6148 2: 
  6149
  6150/^(?:a(?:(?:))*)*/
  6151    aaaa
  6152 0: aaaa
  6153
  6154/^(a()+)+/
  6155    aaaa
  6156 0: aaaa
  6157 1: a
  6158 2: 
  6159
  6160/^(?:a(?:(?:))+)+/
  6161    aaaa
  6162 0: aaaa
  6163
  6164/(a){0,3}(?(1)b|(c|))*D/
  6165    abbD
  6166 0: abbD
  6167 1: a
  6168    ccccD
  6169 0: ccccD
  6170 1: <unset>
  6171 2: 
  6172    D  
  6173 0: D
  6174 1: <unset>
  6175 2: 
  6176
  6177# this is really long with debug -- removing for now
  6178#/(a|)*\d/
  6179#    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
  6180# 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
  6181# 1: 
  6182#\= Expect no match
  6183#    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  6184#No match
  6185
  6186/(?>a|)*\d/
  6187    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
  6188 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
  6189\= Expect no match
  6190    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  6191No match
  6192
  6193/(?:a|)*\d/
  6194    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
  6195 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
  6196\= Expect no match
  6197    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  6198No match
  6199
  6200/^(?s)(?>.*)(?<!\n)/
  6201    abc
  6202 0: abc
  6203\= Expect no match
  6204    abc\n  
  6205No match
  6206
  6207/^(?![^\n]*\n\z)/
  6208    abc
  6209 0: 
  6210\= Expect no match
  6211    abc\n 
  6212No match
  6213  
  6214/\z(?<!\n)/
  6215    abc
  6216 0: 
  6217\= Expect no match
  6218    abc\n  
  6219No match
  6220
  6221/(.*(.)?)*/
  6222    abcd
  6223 0: abcd
  6224 1: 
  6225
  6226/( (A | (?(1)0|) )*   )/x
  6227    abcd
  6228 0: 
  6229 1: 
  6230 2: 
  6231
  6232/( ( (?(1)0|) )*   )/x
  6233    abcd
  6234 0: 
  6235 1: 
  6236 2: 
  6237
  6238/(  (?(1)0|)*   )/x
  6239    abcd
  6240 0: 
  6241 1: 
  6242
  6243/[[:abcd:xyz]]/
  6244    a]
  6245 0: a]
  6246    :] 
  6247 0: :]
  6248    
  6249/[abc[:x\]pqr]/
  6250    a
  6251 0: a
  6252    [
  6253 0: [
  6254    :
  6255 0: :
  6256    ]
  6257 0: ]
  6258    p    
  6259 0: p
  6260
  6261/.*[op][xyz]/
  6262\= Expect no match
  6263    fooabcfoo
  6264No match
  6265
  6266/(?(?=.*b)b|^)/
  6267    adc
  6268 0: 
  6269    abc 
  6270 0: b
  6271
  6272/(?(?=^.*b)b|^)/
  6273    adc
  6274 0: 
  6275\= Expect no match
  6276    abc 
  6277No match
  6278
  6279/(?(?=.*b)b|^)*/
  6280    adc
  6281 0: 
  6282    abc 
  6283 0: 
  6284
  6285/(?(?=.*b)b|^)+/
  6286    adc
  6287 0: 
  6288    abc 
  6289 0: b
  6290
  6291/(?(?=b).*b|^d)/
  6292    abc
  6293 0: b
  6294
  6295/(?(?=.*b).*b|^d)/
  6296    abc
  6297 0: ab
  6298
  6299/^%((?(?=[a])[^%])|b)*%$/
  6300    %ab%
  6301 0: %ab%
  6302 1: 
  6303
  6304/(?i)a(?-i)b|c/
  6305    XabX
  6306 0: ab
  6307    XAbX
  6308 0: Ab
  6309    CcC 
  6310 0: c
  6311\= Expect no match
  6312    XABX   
  6313No match
  6314
  6315/[\x00-\xff\s]+/
  6316    \x0a\x0b\x0c\x0d
  6317 0: \x0a\x0b\x0c\x0d
  6318
  6319/(abc)\1/i
  6320\= Expect no match
  6321    abc
  6322No match
  6323
  6324/(abc)\1/
  6325\= Expect no match
  6326    abc
  6327No match
  6328
  6329/[^a]*/i
  6330    12abc
  6331 0: 12
  6332    12ABC
  6333 0: 12
  6334
  6335#Posses
  6336/[^a]*/i
  6337    12abc
  6338 0: 12
  6339    12ABC
  6340 0: 12
  6341
  6342/[^a]*?X/i
  6343\= Expect no match
  6344    12abc
  6345No match
  6346    12ABC
  6347No match
  6348    
  6349/[^a]+?X/i
  6350\= Expect no match
  6351    12abc
  6352No match
  6353    12ABC
  6354No match
  6355
  6356/[^a]?X/i
  6357    12aXbcX
  6358 0: X
  6359    12AXBCX
  6360 0: X
  6361    BCX 
  6362 0: CX
  6363
  6364/[^a]??X/i
  6365    12aXbcX
  6366 0: X
  6367    12AXBCX
  6368 0: X
  6369    BCX
  6370 0: CX
  6371
  6372/[^a]{2,3}/i
  6373    abcdef
  6374 0: bcd
  6375    ABCDEF  
  6376 0: BCD
  6377
  6378/[^a]{2,3}?/i
  6379    abcdef
  6380 0: bc
  6381    ABCDEF  
  6382 0: BC
  6383
  6384/((a|)+)+Z/
  6385    Z
  6386 0: Z
  6387 1: 
  6388 2: 
  6389
  6390/(a)b|(a)c/
  6391    ac
  6392 0: ac
  6393 1: <unset>
  6394 2: a
  6395
  6396/(?>(a))b|(a)c/
  6397    ac
  6398 0: ac
  6399 1: <unset>
  6400 2: a
  6401
  6402/(?=(a))ab|(a)c/
  6403    ac
  6404 0: ac
  6405 1: <unset>
  6406 2: a
  6407
  6408/((?>(a))b|(a)c)/
  6409    ac
  6410 0: ac
  6411 1: ac
  6412 2: <unset>
  6413 3: a
  6414
  6415/(?=(?>(a))b|(a)c)(..)/
  6416    ac
  6417 0: ac
  6418 1: <unset>
  6419 2: a
  6420 3: ac
  6421
  6422/(?>(?>(a))b|(a)c)/
  6423    ac
  6424 0: ac
  6425 1: <unset>
  6426 2: a
  6427
  6428/((?>(a+)b)+(aabab))/
  6429    aaaabaaabaabab
  6430 0: aaaabaaabaabab
  6431 1: aaaabaaabaabab
  6432 2: aaa
  6433 3: aabab
  6434
  6435/(?>a+|ab)+?c/
  6436\= Expect no match
  6437    aabc
  6438No match
  6439
  6440/(?>a+|ab)+c/
  6441\= Expect no match
  6442    aabc
  6443No match
  6444
  6445/(?:a+|ab)+c/
  6446    aabc
  6447 0: aabc
  6448
  6449/^(?:a|ab)+c/
  6450    aaaabc
  6451 0: aaaabc
  6452
  6453/(?=abc){0}xyz/
  6454    xyz 
  6455 0: xyz
  6456
  6457/(?=abc){1}xyz/
  6458\= Expect no match
  6459    xyz 
  6460No match
  6461    
  6462/(?=(a))?./
  6463    ab
  6464 0: a
  6465 1: a
  6466    bc
  6467 0: b
  6468      
  6469/(?=(a))??./
  6470    ab
  6471 0: a
  6472    bc
  6473 0: b
  6474
  6475/^(?!a){0}\w+/
  6476    aaaaa
  6477 0: aaaaa
  6478
  6479/(?<=(abc))?xyz/
  6480    abcxyz
  6481 0: xyz
  6482 1: abc
  6483    pqrxyz 
  6484 0: xyz
  6485
  6486/^[g<a>]+/
  6487    ggg<<<aaa>>>
  6488 0: ggg<<<aaa>>>
  6489\= Expect no match
  6490    \\ga  
  6491No match
  6492    
  6493/^[ga]+/
  6494    gggagagaxyz 
  6495 0: gggagaga
  6496   
  6497/[:a]xxx[b:]/
  6498     :xxx:
  6499 0: :xxx:
  6500     
  6501/(?<=a{2})b/i
  6502    xaabc
  6503 0: b
  6504\= Expect no match
  6505    xabc  
  6506No match
  6507
  6508/(?<!a{2})b/i
  6509    xabc
  6510 0: b
  6511\= Expect no match
  6512    xaabc  
  6513No match
  6514    
  6515/(?<=[^a]{2})b/
  6516    axxbc
  6517 0: b
  6518    aAAbc 
  6519 0: b
  6520\= Expect no match
  6521    xaabc    
  6522No match
  6523
  6524/(?<=[^a]{2})b/i
  6525    axxbc  
  6526 0: b
  6527\= Expect no match
  6528    aAAbc 
  6529No match
  6530    xaabc    
  6531No match
  6532
  6533#/(?|(abc)|(xyz))\1/
  6534#    abcabc
  6535# 0: abcabc
  6536# 1: abc
  6537#    xyzxyz 
  6538# 0: xyzxyz
  6539# 1: xyz
  6540#\= Expect no match
  6541#    abcxyz
  6542#No match
  6543#    xyzabc   
  6544#No match
  6545    
  6546#/(?|(abc)|(xyz))(?1)/
  6547#    abcabc
  6548# 0: abcabc
  6549# 1: abc
  6550#    xyzabc 
  6551# 0: xyzabc
  6552# 1: xyz
  6553#\= Expect no match 
  6554#    xyzxyz 
  6555#No match
  6556 
  6557#/^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
  6558#    XYabcdY
  6559# 0: XYabcdY
  6560# 1: a
  6561# 2: b
  6562# 3: c
  6563# 4: d
  6564# 5: Y
  6565
  6566#/^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
  6567#    XYabcdY
  6568# 0: XYabcdY
  6569# 1: a
  6570# 2: b
  6571# 3: <unset>
  6572# 4: <unset>
  6573# 5: c
  6574# 6: d
  6575# 7: Y
  6576
  6577#/^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
  6578#    XYabcdY
  6579# 0: XYabcdY
  6580# 1: a
  6581# 2: b
  6582# 3: <unset>
  6583# 4: <unset>
  6584# 5: c
  6585# 6: d
  6586# 7: Y
  6587
  6588/(?'abc'\w+):\k<abc>{2}/
  6589    a:aaxyz
  6590 0: a:aa
  6591 1: a
  6592    ab:ababxyz
  6593 0: ab:abab
  6594 1: ab
  6595\= Expect no match
  6596    a:axyz
  6597No match
  6598    ab:abxyz
  6599No match
  6600
  6601/^(?<ab>a)? (?(ab)b|c) (?(ab)d|e)/x
  6602    abd
  6603 0: abd
  6604 1: a
  6605    ce
  6606 0: ce
  6607    
  6608# .NET has more consistent grouping numbers with these dupe groups for the two options
  6609/(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?(quote)[a-z]+|[0-9]+)/x,dupnames
  6610    a\"aaaaa
  6611 0: a"aaaaa
  6612 1: "
  6613 2: <unset>
  6614 3: "
  6615    b\"aaaaa
  6616 0: b"aaaaa
  6617 1: "
  6618 2: <unset>
  6619 3: "
  6620\= Expect no match 
  6621    b\"11111
  6622No match
  6623
  6624#/(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
  6625#    0
  6626# 0: 0
  6627# 1: 0
  6628#    00
  6629# 0: 00
  6630# 1: 00
  6631# 2: 0
  6632#    0000  
  6633# 0: 0000
  6634# 1: 0000
  6635# 2: 0
  6636
  6637#/(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
  6638#    0
  6639# 0: 0
  6640# 1: 0
  6641# 2: 0
  6642#    00
  6643# 0: 0
  6644# 1: 0
  6645# 2: 0
  6646#    0000  
  6647# 0: 0
  6648# 1: 0
  6649# 2: 0
  6650
  6651# Check the use of names for failure
  6652
  6653# Check opening parens in comment when seeking forward reference.
  6654
  6655#/(?P<abn>(?P=abn)xxx|)+/
  6656#    xxx
  6657# 0: 
  6658# 1: 
  6659
  6660#Posses
  6661/^(a)?(\w)/
  6662    aaaaX
  6663 0: aa
  6664 1: a
  6665 2: a
  6666    YZ 
  6667 0: Y
  6668 1: <unset>
  6669 2: Y
  6670
  6671#Posses
  6672/^(?:a)?(\w)/
  6673    aaaaX
  6674 0: aa
  6675 1: a
  6676    YZ 
  6677 0: Y
  6678 1: Y
  6679
  6680/\A.*?(a|bc)/
  6681    ba
  6682 0: ba
  6683 1: a
  6684
  6685/\A.*?(?:a|bc|d)/
  6686    ba
  6687 0: ba
  6688
  6689# --------------------------
  6690
  6691/(another)?(\1?)test/
  6692    hello world test
  6693 0: test
  6694 1: <unset>
  6695 2: 
  6696
  6697/(another)?(\1+)test/
  6698\= Expect no match
  6699    hello world test
  6700No match
  6701
  6702/((?:a?)*)*c/
  6703    aac   
  6704 0: aac
  6705 1: 
  6706
  6707/((?>a?)*)*c/
  6708    aac   
  6709 0: aac
  6710 1: 
  6711
  6712/(?>.*?a)(?<=ba)/
  6713    aba
  6714 0: ba
  6715
  6716/(?:.*?a)(?<=ba)/
  6717    aba
  6718 0: aba
  6719
  6720/(?>.*?a)b/s
  6721    aab
  6722 0: ab
  6723
  6724/(?>.*?a)b/
  6725    aab
  6726 0: ab
  6727
  6728/(?>^a)b/s
  6729\= Expect no match
  6730    aab
  6731No match
  6732
  6733/(?>.*?)(?<=(abcd)|(wxyz))/
  6734    alphabetabcd
  6735 0: 
  6736 1: abcd
  6737    endingwxyz 
  6738 0: 
  6739 1: <unset>
  6740 2: wxyz
  6741
  6742/(?>.*)(?<=(abcd)|(wxyz))/
  6743    alphabetabcd
  6744 0: alphabetabcd
  6745 1: abcd
  6746    endingwxyz
  6747 0: endingwxyz
  6748 1: <unset>
  6749 2: wxyz
  6750
  6751"(?>.*)foo"
  6752\= Expect no match
  6753    abcdfooxyz
  6754No match
  6755    
  6756"(?>.*?)foo"
  6757    abcdfooxyz
  6758 0: foo
  6759
  6760# Tests that try to figure out how Perl works. My hypothesis is that the first
  6761# verb that is backtracked onto is the one that acts. This seems to be the case
  6762# almost all the time, but there is one exception that is perhaps a bug.
  6763 
  6764/a(?=bc).|abd/
  6765    abd
  6766 0: abd
  6767    abc 
  6768 0: ab
  6769  
  6770/a(?>bc)d|abd/
  6771    abceabd 
  6772 0: abd
  6773
  6774# These tests were formerly in test 2, but changes in PCRE and Perl have
  6775# made them compatible. 
  6776    
  6777/^(a)?(?(1)a|b)+$/
  6778\= Expect no match
  6779    a
  6780No match
  6781
  6782# ----
  6783
  6784/^\d*\w{4}/
  6785    1234
  6786 0: 1234
  6787\= Expect no match
  6788    123 
  6789No match
  6790
  6791/^[^b]*\w{4}/
  6792    aaaa
  6793 0: aaaa
  6794\= Expect no match
  6795    aaa     
  6796No match
  6797
  6798/^[^b]*\w{4}/i
  6799    aaaa
  6800 0: aaaa
  6801\= Expect no match
  6802    aaa     
  6803No match
  6804
  6805/^a*\w{4}/
  6806    aaaa
  6807 0: aaaa
  6808\= Expect no match
  6809    aaa     
  6810No match
  6811
  6812/^a*\w{4}/i
  6813    aaaa
  6814 0: aaaa
  6815\= Expect no match
  6816    aaa     
  6817No match
  6818
  6819/(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
  6820    foofoo
  6821 0: foofoo
  6822 1: foo
  6823    barbar
  6824 0: barbar
  6825 1: bar
  6826
  6827# A notable difference between PCRE and .NET.  According to
  6828# the PCRE docs:
  6829# If you make a subroutine call to a non-unique named 
  6830# subpattern, the one that corresponds  to  the first 
  6831# occurrence of the name is used. In the absence of 
  6832# duplicate numbers (see the previous section) this is 
  6833# the one with the lowest number.
  6834# .NET takes the most recently captured number according to MSDN:
  6835# A backreference refers to the most recent definition of 
  6836# a group (the definition most immediately to the left, 
  6837# when matching left to right). When a group makes multiple
  6838# captures, a backreference refers to the most recent capture.
  6839
  6840#/(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/dupnames
  6841#    AfooA
  6842# 0: AfooA
  6843# 1: A
  6844# 2: foo
  6845#    AbarA  
  6846# 0: AbarA
  6847# 1: A
  6848# 2: <unset>
  6849# 3: bar
  6850#\= Expect no match 
  6851#    Afoofoo
  6852#No match
  6853#    Abarbar
  6854#No match
  6855
  6856/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
  6857    1 IN SOA non-sp1 non-sp2(
  6858 0: 1 IN SOA non-sp1 non-sp2(
  6859 1: 1
  6860 2: non-sp1
  6861 3: non-sp2
  6862
  6863# TODO: .NET's group number ordering here in the second example is a bit odd
  6864/^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?(A)x) (?(B)y)$/x,dupnames
  6865    Ax
  6866 0: Ax
  6867 1: A
  6868    BAxy
  6869 0: BAxy
  6870 1: A
  6871 2: B
  6872 
  6873/ ^ a + b $ /x
  6874    aaaab
  6875 0: aaaab
  6876    
  6877/ ^ a + #comment
  6878   b $ /x
  6879    aaaab
  6880 0: aaaab
  6881    
  6882/ ^ a + #comment
  6883  #comment
  6884   b $ /x
  6885    aaaab
  6886 0: aaaab
  6887    
  6888/ ^ (?> a + ) b $ /x
  6889    aaaab 
  6890 0: aaaab
  6891
  6892/ ^ ( a + ) + \w $ /x
  6893    aaaab 
  6894 0: aaaab
  6895 1: aaaa
  6896
  6897/(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
  6898\= Expect no match
  6899    acb
  6900No match
  6901
  6902#Posses
  6903#/\A(?:[^\"]+|\"(?:[^\"]*|\"\")*\")+/
  6904#    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
  6905# 0: NON QUOTED "QUOT""ED" AFTER 
  6906
  6907#Posses
  6908#/\A(?:[^\"]+|\"(?:[^\"]+|\"\")*\")+/
  6909#    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
  6910# 0: NON QUOTED "QUOT""ED" AFTER 
  6911
  6912#Posses
  6913#/\A(?:[^\"]+|\"(?:[^\"]+|\"\")+\")+/
  6914#    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
  6915# 0: NON QUOTED "QUOT""ED" AFTER 
  6916
  6917#Posses
  6918#/\A([^\"1]+|[\"2]([^\"3]*|[\"4][\"5])*[\"6])+/
  6919#    NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
  6920# 0: NON QUOTED "QUOT""ED" AFTER 
  6921# 1:  AFTER 
  6922# 2: 
  6923
  6924/^\w+(?>\s*)(?<=\w)/
  6925    test test
  6926 0: tes
  6927
  6928#/(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
  6929#    acl
  6930# 0: acl
  6931# 1: a
  6932#    bdl
  6933# 0: bdl
  6934# 1: <unset>
  6935# 2: b
  6936#    adl
  6937# 0: dl
  6938#    bcl    
  6939# 0: l
  6940
  6941/\sabc/
  6942    \x0babc
  6943 0: \x0babc
  6944
  6945#/[\Qa]\E]+/
  6946#    aa]]
  6947# 0: aa]]
  6948
  6949#/[\Q]a\E]+/
  6950#    aa]]
  6951# 0: aa]]
  6952
  6953/A((((((((a))))))))\8B/ 
  6954    AaaB
  6955 0: AaaB
  6956 1: a
  6957 2: a
  6958 3: a
  6959 4: a
  6960 5: a
  6961 6: a
  6962 7: a
  6963 8: a
  6964
  6965/A(((((((((a)))))))))\9B/ 
  6966    AaaB
  6967 0: AaaB
  6968 1: a
  6969 2: a
  6970 3: a
  6971 4: a
  6972 5: a
  6973 6: a
  6974 7: a
  6975 8: a
  6976 9: a
  6977    
  6978/(|ab)*?d/
  6979    abd
  6980 0: abd
  6981 1: ab
  6982    xyd 
  6983 0: d
  6984
  6985/(\2|a)(\1)/
  6986    aaa
  6987 0: aa
  6988 1: a
  6989 2: a
  6990
  6991/(\2)(\1)/
  6992
  6993"Z*(|d*){216}"
  6994
  6995/((((((((((((x))))))))))))\12/
  6996    xx
  6997 0: xx
  6998 1: x
  6999 2: x
  7000 3: x
  7001 4: x
  7002 5: x
  7003 6: x
  7004 7: x
  7005 8: x
  7006 9: x
  700710: x
  700811: x
  700912: x
  7010
  7011#"(?|(\k'Pm')|(?'Pm'))"
  7012#    abcd
  7013# 0: 
  7014# 1: 
  7015
  7016#/(?|(aaa)|(b))\g{1}/
  7017#    aaaaaa
  7018# 0: aaaaaa
  7019# 1: aaa
  7020#    bb 
  7021# 0: bb
  7022# 1: b
  7023
  7024#/(?|(aaa)|(b))(?1)/
  7025#    aaaaaa
  7026# 0: aaaaaa
  7027# 1: aaa
  7028#    baaa 
  7029# 0: baaa
  7030# 1: b
  7031#\= Expect no match 
  7032#    bb 
  7033#No match
  7034
  7035#/(?|(aaa)|(b))/
  7036#    xaaa
  7037# 0: aaa
  7038# 1: aaa
  7039#    xbc 
  7040# 0: b
  7041# 1: b
  7042
  7043#/(?|(?'a'aaa)|(?'a'b))\k'a'/
  7044#    aaaaaa
  7045# 0: aaaaaa
  7046# 1: aaa
  7047#    bb 
  7048# 0: bb
  7049# 1: b
  7050
  7051#/(?|(?'a'aaa)|(?'a'b))(?'a'cccc)\k'a'/dupnames
  7052#    aaaccccaaa
  7053# 0: aaaccccaaa
  7054# 1: aaa
  7055# 2: cccc
  7056#    bccccb 
  7057# 0: bccccb
  7058# 1: b
  7059# 2: cccc
  7060
  7061# End of testinput1 

View as plain text