Annotation of embedaddon/pcre/testdata/testinput1, revision 1.1.1.2

1.1       misho       1: /-- This set of tests is for features that are compatible with all versions of
1.1.1.2 ! misho       2:     Perl >= 5.10, in non-UTF-8 mode. It should run clean for both the 8-bit and
        !             3:     16-bit PCRE libraries. --/
1.1       misho       4: 
                      5: /the quick brown fox/
                      6:     the quick brown fox
                      7:     The quick brown FOX
                      8:     What do you know about the quick brown fox?
                      9:     What do you know about THE QUICK BROWN FOX?
                     10: 
                     11: /The quick brown fox/i
                     12:     the quick brown fox
                     13:     The quick brown FOX
                     14:     What do you know about the quick brown fox?
                     15:     What do you know about THE QUICK BROWN FOX?
                     16: 
                     17: /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
                     18:     abcd\t\n\r\f\a\e9;\$\\?caxyz
                     19: 
                     20: /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
                     21:     abxyzpqrrrabbxyyyypqAzz
                     22:     abxyzpqrrrabbxyyyypqAzz
                     23:     aabxyzpqrrrabbxyyyypqAzz
                     24:     aaabxyzpqrrrabbxyyyypqAzz
                     25:     aaaabxyzpqrrrabbxyyyypqAzz
                     26:     abcxyzpqrrrabbxyyyypqAzz
                     27:     aabcxyzpqrrrabbxyyyypqAzz
                     28:     aaabcxyzpqrrrabbxyyyypAzz
                     29:     aaabcxyzpqrrrabbxyyyypqAzz
                     30:     aaabcxyzpqrrrabbxyyyypqqAzz
                     31:     aaabcxyzpqrrrabbxyyyypqqqAzz
                     32:     aaabcxyzpqrrrabbxyyyypqqqqAzz
                     33:     aaabcxyzpqrrrabbxyyyypqqqqqAzz
                     34:     aaabcxyzpqrrrabbxyyyypqqqqqqAzz
                     35:     aaaabcxyzpqrrrabbxyyyypqAzz
                     36:     abxyzzpqrrrabbxyyyypqAzz
                     37:     aabxyzzzpqrrrabbxyyyypqAzz
                     38:     aaabxyzzzzpqrrrabbxyyyypqAzz
                     39:     aaaabxyzzzzpqrrrabbxyyyypqAzz
                     40:     abcxyzzpqrrrabbxyyyypqAzz
                     41:     aabcxyzzzpqrrrabbxyyyypqAzz
                     42:     aaabcxyzzzzpqrrrabbxyyyypqAzz
                     43:     aaaabcxyzzzzpqrrrabbxyyyypqAzz
                     44:     aaaabcxyzzzzpqrrrabbbxyyyypqAzz
                     45:     aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
                     46:     aaabcxyzpqrrrabbxyyyypABzz
                     47:     aaabcxyzpqrrrabbxyyyypABBzz
                     48:     >>>aaabxyzpqrrrabbxyyyypqAzz
                     49:     >aaaabxyzpqrrrabbxyyyypqAzz
                     50:     >>>>abcxyzpqrrrabbxyyyypqAzz
                     51:     *** Failers
                     52:     abxyzpqrrabbxyyyypqAzz
                     53:     abxyzpqrrrrabbxyyyypqAzz
                     54:     abxyzpqrrrabxyyyypqAzz
                     55:     aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
                     56:     aaaabcxyzzzzpqrrrabbbxyyypqAzz
                     57:     aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
                     58: 
                     59: /^(abc){1,2}zz/
                     60:     abczz
                     61:     abcabczz
                     62:     *** Failers
                     63:     zz
                     64:     abcabcabczz
                     65:     >>abczz
                     66: 
                     67: /^(b+?|a){1,2}?c/
                     68:     bc
                     69:     bbc
                     70:     bbbc
                     71:     bac
                     72:     bbac
                     73:     aac
                     74:     abbbbbbbbbbbc
                     75:     bbbbbbbbbbbac
                     76:     *** Failers
                     77:     aaac
                     78:     abbbbbbbbbbbac
                     79: 
                     80: /^(b+|a){1,2}c/
                     81:     bc
                     82:     bbc
                     83:     bbbc
                     84:     bac
                     85:     bbac
                     86:     aac
                     87:     abbbbbbbbbbbc
                     88:     bbbbbbbbbbbac
                     89:     *** Failers
                     90:     aaac
                     91:     abbbbbbbbbbbac
                     92: 
                     93: /^(b+|a){1,2}?bc/
                     94:     bbc
                     95: 
                     96: /^(b*|ba){1,2}?bc/
                     97:     babc
                     98:     bbabc
                     99:     bababc
                    100:     *** Failers
                    101:     bababbc
                    102:     babababc
                    103: 
                    104: /^(ba|b*){1,2}?bc/
                    105:     babc
                    106:     bbabc
                    107:     bababc
                    108:     *** Failers
                    109:     bababbc
                    110:     babababc
                    111: 
                    112: /^\ca\cA\c[\c{\c:/
                    113:     \x01\x01\e;z
                    114: 
                    115: /^[ab\]cde]/
                    116:     athing
                    117:     bthing
                    118:     ]thing
                    119:     cthing
                    120:     dthing
                    121:     ething
                    122:     *** Failers
                    123:     fthing
                    124:     [thing
                    125:     \\thing
                    126: 
                    127: /^[]cde]/
                    128:     ]thing
                    129:     cthing
                    130:     dthing
                    131:     ething
                    132:     *** Failers
                    133:     athing
                    134:     fthing
                    135: 
                    136: /^[^ab\]cde]/
                    137:     fthing
                    138:     [thing
                    139:     \\thing
                    140:     *** Failers
                    141:     athing
                    142:     bthing
                    143:     ]thing
                    144:     cthing
                    145:     dthing
                    146:     ething
                    147: 
                    148: /^[^]cde]/
                    149:     athing
                    150:     fthing
                    151:     *** Failers
                    152:     ]thing
                    153:     cthing
                    154:     dthing
                    155:     ething
                    156: 
                    157: /^\/
                    158:     
                    159: 
                    160: /^/
                    161:     
                    162: 
                    163: /^[0-9]+$/
                    164:     0
                    165:     1
                    166:     2
                    167:     3
                    168:     4
                    169:     5
                    170:     6
                    171:     7
                    172:     8
                    173:     9
                    174:     10
                    175:     100
                    176:     *** Failers
                    177:     abc
                    178: 
                    179: /^.*nter/
                    180:     enter
                    181:     inter
                    182:     uponter
                    183: 
                    184: /^xxx[0-9]+$/
                    185:     xxx0
                    186:     xxx1234
                    187:     *** Failers
                    188:     xxx
                    189: 
                    190: /^.+[0-9][0-9][0-9]$/
                    191:     x123
                    192:     xx123
                    193:     123456
                    194:     *** Failers
                    195:     123
                    196:     x1234
                    197: 
                    198: /^.+?[0-9][0-9][0-9]$/
                    199:     x123
                    200:     xx123
                    201:     123456
                    202:     *** Failers
                    203:     123
                    204:     x1234
                    205: 
                    206: /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
                    207:     abc!pqr=apquxz.ixr.zzz.ac.uk
                    208:     *** Failers
                    209:     !pqr=apquxz.ixr.zzz.ac.uk
                    210:     abc!=apquxz.ixr.zzz.ac.uk
                    211:     abc!pqr=apquxz:ixr.zzz.ac.uk
                    212:     abc!pqr=apquxz.ixr.zzz.ac.ukk
                    213: 
                    214: /:/
                    215:     Well, we need a colon: somewhere
                    216:     *** Fail if we don't
                    217: 
                    218: /([\da-f:]+)$/i
                    219:     0abc
                    220:     abc
                    221:     fed
                    222:     E
                    223:     ::
                    224:     5f03:12C0::932e
                    225:     fed def
                    226:     Any old stuff
                    227:     *** Failers
                    228:     0zzz
                    229:     gzzz
                    230:     fed\x20
                    231:     Any old rubbish
                    232: 
                    233: /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
                    234:     .1.2.3
                    235:     A.12.123.0
                    236:     *** Failers
                    237:     .1.2.3333
                    238:     1.2.3
                    239:     1234.2.3
                    240: 
                    241: /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
                    242:     1 IN SOA non-sp1 non-sp2(
                    243:     1    IN    SOA    non-sp1    non-sp2   (
                    244:     *** Failers
                    245:     1IN SOA non-sp1 non-sp2(
                    246: 
                    247: /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
                    248:     a.
                    249:     Z.
                    250:     2.
                    251:     ab-c.pq-r.
                    252:     sxk.zzz.ac.uk.
                    253:     x-.y-.
                    254:     *** Failers
                    255:     -abc.peq.
                    256: 
                    257: /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
                    258:     *.a
                    259:     *.b0-a
                    260:     *.c3-b.c
                    261:     *.c-a.b-c
                    262:     *** Failers
                    263:     *.0
                    264:     *.a-
                    265:     *.a-b.c-
                    266:     *.c-a.0-c
                    267: 
                    268: /^(?=ab(de))(abd)(e)/
                    269:     abde
                    270: 
                    271: /^(?!(ab)de|x)(abd)(f)/
                    272:     abdf
                    273: 
                    274: /^(?=(ab(cd)))(ab)/
                    275:     abcd
                    276: 
                    277: /^[\da-f](\.[\da-f])*$/i
                    278:     a.b.c.d
                    279:     A.B.C.D
                    280:     a.b.c.1.2.3.C
                    281: 
                    282: /^\".*\"\s*(;.*)?$/
                    283:     \"1234\"
                    284:     \"abcd\" ;
                    285:     \"\" ; rhubarb
                    286:     *** Failers
                    287:     \"1234\" : things
                    288: 
                    289: /^$/
                    290:     \
                    291:     *** Failers
                    292: 
                    293: /   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
                    294:     ab c
                    295:     *** Failers
                    296:     abc
                    297:     ab cde
                    298: 
                    299: /(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
                    300:     ab c
                    301:     *** Failers
                    302:     abc
                    303:     ab cde
                    304: 
                    305: /^   a\ b[c ]d       $/x
                    306:     a bcd
                    307:     a b d
                    308:     *** Failers
                    309:     abcd
                    310:     ab d
                    311: 
                    312: /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
                    313:     abcdefhijklm
                    314: 
                    315: /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
                    316:     abcdefhijklm
                    317: 
                    318: /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
                    319:     a+ Z0+\x08\n\x1d\x12
                    320: 
                    321: /^[.^$|()*+?{,}]+/
                    322:     .^\$(*+)|{?,?}
                    323: 
                    324: /^a*\w/
                    325:     z
                    326:     az
                    327:     aaaz
                    328:     a
                    329:     aa
                    330:     aaaa
                    331:     a+
                    332:     aa+
                    333: 
                    334: /^a*?\w/
                    335:     z
                    336:     az
                    337:     aaaz
                    338:     a
                    339:     aa
                    340:     aaaa
                    341:     a+
                    342:     aa+
                    343: 
                    344: /^a+\w/
                    345:     az
                    346:     aaaz
                    347:     aa
                    348:     aaaa
                    349:     aa+
                    350: 
                    351: /^a+?\w/
                    352:     az
                    353:     aaaz
                    354:     aa
                    355:     aaaa
                    356:     aa+
                    357: 
                    358: /^\d{8}\w{2,}/
                    359:     1234567890
                    360:     12345678ab
                    361:     12345678__
                    362:     *** Failers
                    363:     1234567
                    364: 
                    365: /^[aeiou\d]{4,5}$/
                    366:     uoie
                    367:     1234
                    368:     12345
                    369:     aaaaa
                    370:     *** Failers
                    371:     123456
                    372: 
                    373: /^[aeiou\d]{4,5}?/
                    374:     uoie
                    375:     1234
                    376:     12345
                    377:     aaaaa
                    378:     123456
                    379: 
                    380: /\A(abc|def)=(\1){2,3}\Z/
                    381:     abc=abcabc
                    382:     def=defdefdef
                    383:     *** Failers
                    384:     abc=defdef
                    385: 
                    386: /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
                    387:     abcdefghijkcda2
                    388:     abcdefghijkkkkcda2
                    389: 
                    390: /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
                    391:     cataract cataract23
                    392:     catatonic catatonic23
                    393:     caterpillar caterpillar23
                    394: 
                    395: 
                    396: /^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]/
                    397:     From abcd  Mon Sep 01 12:33:02 1997
                    398: 
                    399: /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
                    400:     From abcd  Mon Sep 01 12:33:02 1997
                    401:     From abcd  Mon Sep  1 12:33:02 1997
                    402:     *** Failers
                    403:     From abcd  Sep 01 12:33:02 1997
                    404: 
                    405: /^12.34/s
                    406:     12\n34
                    407:     12\r34
                    408: 
                    409: /\w+(?=\t)/
                    410:     the quick brown\t fox
                    411: 
                    412: /foo(?!bar)(.*)/
                    413:     foobar is foolish see?
                    414: 
                    415: /(?:(?!foo)...|^.{0,2})bar(.*)/
                    416:     foobar crowbar etc
                    417:     barrel
                    418:     2barrel
                    419:     A barrel
                    420: 
                    421: /^(\D*)(?=\d)(?!123)/
                    422:     abc456
                    423:     *** Failers
                    424:     abc123
                    425: 
                    426: /^1234(?# test newlines
                    427:   inside)/
                    428:     1234
                    429: 
                    430: /^1234 #comment in extended re
                    431:   /x
                    432:     1234
                    433: 
                    434: /#rhubarb
                    435:   abcd/x
                    436:     abcd
                    437: 
                    438: /^abcd#rhubarb/x
                    439:     abcd
                    440: 
                    441: /^(a)\1{2,3}(.)/
                    442:     aaab
                    443:     aaaab
                    444:     aaaaab
                    445:     aaaaaab
                    446: 
                    447: /(?!^)abc/
                    448:     the abc
                    449:     *** Failers
                    450:     abc
                    451: 
                    452: /(?=^)abc/
                    453:     abc
                    454:     *** Failers
                    455:     the abc
                    456: 
                    457: /^[ab]{1,3}(ab*|b)/
                    458:     aabbbbb
                    459: 
                    460: /^[ab]{1,3}?(ab*|b)/
                    461:     aabbbbb
                    462: 
                    463: /^[ab]{1,3}?(ab*?|b)/
                    464:     aabbbbb
                    465: 
                    466: /^[ab]{1,3}(ab*?|b)/
                    467:     aabbbbb
                    468: 
                    469: /  (?: [\040\t] |  \(
                    470: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    471: \)  )*                          # optional leading comment
                    472: (?:    (?:
                    473: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    474: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    475: |
                    476: " (?:                      # opening quote...
                    477: [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
                    478: |                     #    or
                    479: \\ [^\x80-\xff]           #   Escaped something (something != CR)
                    480: )* "  # closing quote
                    481: )                    # initial word
                    482: (?:  (?: [\040\t] |  \(
                    483: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    484: \)  )*  \.  (?: [\040\t] |  \(
                    485: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    486: \)  )*   (?:
                    487: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    488: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    489: |
                    490: " (?:                      # opening quote...
                    491: [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
                    492: |                     #    or
                    493: \\ [^\x80-\xff]           #   Escaped something (something != CR)
                    494: )* "  # closing quote
                    495: )  )* # further okay, if led by a period
                    496: (?: [\040\t] |  \(
                    497: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    498: \)  )*  @  (?: [\040\t] |  \(
                    499: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    500: \)  )*    (?:
                    501: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    502: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    503: |   \[                         # [
                    504: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    505: \]                        #           ]
                    506: )                           # initial subdomain
                    507: (?:                                  #
                    508: (?: [\040\t] |  \(
                    509: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    510: \)  )*  \.                        # if led by a period...
                    511: (?: [\040\t] |  \(
                    512: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    513: \)  )*   (?:
                    514: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    515: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    516: |   \[                         # [
                    517: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    518: \]                        #           ]
                    519: )                     #   ...further okay
                    520: )*
                    521: # address
                    522: |                     #  or
                    523: (?:
                    524: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    525: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    526: |
                    527: " (?:                      # opening quote...
                    528: [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
                    529: |                     #    or
                    530: \\ [^\x80-\xff]           #   Escaped something (something != CR)
                    531: )* "  # closing quote
                    532: )             # one word, optionally followed by....
                    533: (?:
                    534: [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
                    535: \(
                    536: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    537: \)       |  # comments, or...
                    538: 
                    539: " (?:                      # opening quote...
                    540: [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
                    541: |                     #    or
                    542: \\ [^\x80-\xff]           #   Escaped something (something != CR)
                    543: )* "  # closing quote
                    544: # quoted strings
                    545: )*
                    546: <  (?: [\040\t] |  \(
                    547: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    548: \)  )*                     # leading <
                    549: (?:  @  (?: [\040\t] |  \(
                    550: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    551: \)  )*    (?:
                    552: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    553: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    554: |   \[                         # [
                    555: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    556: \]                        #           ]
                    557: )                           # initial subdomain
                    558: (?:                                  #
                    559: (?: [\040\t] |  \(
                    560: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    561: \)  )*  \.                        # if led by a period...
                    562: (?: [\040\t] |  \(
                    563: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    564: \)  )*   (?:
                    565: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    566: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    567: |   \[                         # [
                    568: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    569: \]                        #           ]
                    570: )                     #   ...further okay
                    571: )*
                    572: 
                    573: (?:  (?: [\040\t] |  \(
                    574: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    575: \)  )*  ,  (?: [\040\t] |  \(
                    576: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    577: \)  )*  @  (?: [\040\t] |  \(
                    578: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    579: \)  )*    (?:
                    580: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    581: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    582: |   \[                         # [
                    583: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    584: \]                        #           ]
                    585: )                           # initial subdomain
                    586: (?:                                  #
                    587: (?: [\040\t] |  \(
                    588: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    589: \)  )*  \.                        # if led by a period...
                    590: (?: [\040\t] |  \(
                    591: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    592: \)  )*   (?:
                    593: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    594: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    595: |   \[                         # [
                    596: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    597: \]                        #           ]
                    598: )                     #   ...further okay
                    599: )*
                    600: )* # further okay, if led by comma
                    601: :                                # closing colon
                    602: (?: [\040\t] |  \(
                    603: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    604: \)  )*  )? #       optional route
                    605: (?:
                    606: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    607: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    608: |
                    609: " (?:                      # opening quote...
                    610: [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
                    611: |                     #    or
                    612: \\ [^\x80-\xff]           #   Escaped something (something != CR)
                    613: )* "  # closing quote
                    614: )                    # initial word
                    615: (?:  (?: [\040\t] |  \(
                    616: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    617: \)  )*  \.  (?: [\040\t] |  \(
                    618: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    619: \)  )*   (?:
                    620: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    621: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    622: |
                    623: " (?:                      # opening quote...
                    624: [^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
                    625: |                     #    or
                    626: \\ [^\x80-\xff]           #   Escaped something (something != CR)
                    627: )* "  # closing quote
                    628: )  )* # further okay, if led by a period
                    629: (?: [\040\t] |  \(
                    630: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    631: \)  )*  @  (?: [\040\t] |  \(
                    632: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    633: \)  )*    (?:
                    634: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    635: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    636: |   \[                         # [
                    637: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    638: \]                        #           ]
                    639: )                           # initial subdomain
                    640: (?:                                  #
                    641: (?: [\040\t] |  \(
                    642: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    643: \)  )*  \.                        # if led by a period...
                    644: (?: [\040\t] |  \(
                    645: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    646: \)  )*   (?:
                    647: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    648: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    649: |   \[                         # [
                    650: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
                    651: \]                        #           ]
                    652: )                     #   ...further okay
                    653: )*
                    654: #       address spec
                    655: (?: [\040\t] |  \(
                    656: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    657: \)  )*  > #                  trailing >
                    658: # name and address
                    659: )  (?: [\040\t] |  \(
                    660: (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
                    661: \)  )*                       # optional trailing comment
                    662: /x
                    663:     Alan Other <user\@dom.ain>
                    664:     <user\@dom.ain>
                    665:     user\@dom.ain
                    666:     \"A. Other\" <user.1234\@dom.ain> (a comment)
                    667:     A. Other <user.1234\@dom.ain> (a comment)
                    668:     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
                    669:     A missing angle <user\@some.where
                    670:     *** Failers
                    671:     The quick brown fox
                    672: 
                    673: /[\040\t]*                    # Nab whitespace.
                    674: (?:
                    675: \(                              #  (
                    676: [^\\\x80-\xff\n\015()] *                             #     normal*
                    677: (?:                                 #       (
                    678: (?:  \\ [^\x80-\xff]  |
                    679: \(                            #  (
                    680: [^\\\x80-\xff\n\015()] *                            #     normal*
                    681: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    682: \)                           #                       )
                    683: )    #         special
                    684: [^\\\x80-\xff\n\015()] *                         #         normal*
                    685: )*                                  #            )*
                    686: \)                             #                )
                    687: [\040\t]* )*    # If comment found, allow more spaces.
                    688: # optional leading comment
                    689: (?:
                    690: (?:
                    691: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    692: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    693: # Atom
                    694: |                       #  or
                    695: "                                     # "
                    696: [^\\\x80-\xff\n\015"] *                            #   normal
                    697: (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
                    698: "                                     #        "
                    699: # Quoted string
                    700: )
                    701: [\040\t]*                    # Nab whitespace.
                    702: (?:
                    703: \(                              #  (
                    704: [^\\\x80-\xff\n\015()] *                             #     normal*
                    705: (?:                                 #       (
                    706: (?:  \\ [^\x80-\xff]  |
                    707: \(                            #  (
                    708: [^\\\x80-\xff\n\015()] *                            #     normal*
                    709: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    710: \)                           #                       )
                    711: )    #         special
                    712: [^\\\x80-\xff\n\015()] *                         #         normal*
                    713: )*                                  #            )*
                    714: \)                             #                )
                    715: [\040\t]* )*    # If comment found, allow more spaces.
                    716: (?:
                    717: \.
                    718: [\040\t]*                    # Nab whitespace.
                    719: (?:
                    720: \(                              #  (
                    721: [^\\\x80-\xff\n\015()] *                             #     normal*
                    722: (?:                                 #       (
                    723: (?:  \\ [^\x80-\xff]  |
                    724: \(                            #  (
                    725: [^\\\x80-\xff\n\015()] *                            #     normal*
                    726: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    727: \)                           #                       )
                    728: )    #         special
                    729: [^\\\x80-\xff\n\015()] *                         #         normal*
                    730: )*                                  #            )*
                    731: \)                             #                )
                    732: [\040\t]* )*    # If comment found, allow more spaces.
                    733: (?:
                    734: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    735: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    736: # Atom
                    737: |                       #  or
                    738: "                                     # "
                    739: [^\\\x80-\xff\n\015"] *                            #   normal
                    740: (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
                    741: "                                     #        "
                    742: # Quoted string
                    743: )
                    744: [\040\t]*                    # Nab whitespace.
                    745: (?:
                    746: \(                              #  (
                    747: [^\\\x80-\xff\n\015()] *                             #     normal*
                    748: (?:                                 #       (
                    749: (?:  \\ [^\x80-\xff]  |
                    750: \(                            #  (
                    751: [^\\\x80-\xff\n\015()] *                            #     normal*
                    752: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    753: \)                           #                       )
                    754: )    #         special
                    755: [^\\\x80-\xff\n\015()] *                         #         normal*
                    756: )*                                  #            )*
                    757: \)                             #                )
                    758: [\040\t]* )*    # If comment found, allow more spaces.
                    759: # additional words
                    760: )*
                    761: @
                    762: [\040\t]*                    # Nab whitespace.
                    763: (?:
                    764: \(                              #  (
                    765: [^\\\x80-\xff\n\015()] *                             #     normal*
                    766: (?:                                 #       (
                    767: (?:  \\ [^\x80-\xff]  |
                    768: \(                            #  (
                    769: [^\\\x80-\xff\n\015()] *                            #     normal*
                    770: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    771: \)                           #                       )
                    772: )    #         special
                    773: [^\\\x80-\xff\n\015()] *                         #         normal*
                    774: )*                                  #            )*
                    775: \)                             #                )
                    776: [\040\t]* )*    # If comment found, allow more spaces.
                    777: (?:
                    778: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    779: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    780: |
                    781: \[                            # [
                    782: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                    783: \]                           #           ]
                    784: )
                    785: [\040\t]*                    # Nab whitespace.
                    786: (?:
                    787: \(                              #  (
                    788: [^\\\x80-\xff\n\015()] *                             #     normal*
                    789: (?:                                 #       (
                    790: (?:  \\ [^\x80-\xff]  |
                    791: \(                            #  (
                    792: [^\\\x80-\xff\n\015()] *                            #     normal*
                    793: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    794: \)                           #                       )
                    795: )    #         special
                    796: [^\\\x80-\xff\n\015()] *                         #         normal*
                    797: )*                                  #            )*
                    798: \)                             #                )
                    799: [\040\t]* )*    # If comment found, allow more spaces.
                    800: # optional trailing comments
                    801: (?:
                    802: \.
                    803: [\040\t]*                    # Nab whitespace.
                    804: (?:
                    805: \(                              #  (
                    806: [^\\\x80-\xff\n\015()] *                             #     normal*
                    807: (?:                                 #       (
                    808: (?:  \\ [^\x80-\xff]  |
                    809: \(                            #  (
                    810: [^\\\x80-\xff\n\015()] *                            #     normal*
                    811: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    812: \)                           #                       )
                    813: )    #         special
                    814: [^\\\x80-\xff\n\015()] *                         #         normal*
                    815: )*                                  #            )*
                    816: \)                             #                )
                    817: [\040\t]* )*    # If comment found, allow more spaces.
                    818: (?:
                    819: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    820: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    821: |
                    822: \[                            # [
                    823: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                    824: \]                           #           ]
                    825: )
                    826: [\040\t]*                    # Nab whitespace.
                    827: (?:
                    828: \(                              #  (
                    829: [^\\\x80-\xff\n\015()] *                             #     normal*
                    830: (?:                                 #       (
                    831: (?:  \\ [^\x80-\xff]  |
                    832: \(                            #  (
                    833: [^\\\x80-\xff\n\015()] *                            #     normal*
                    834: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    835: \)                           #                       )
                    836: )    #         special
                    837: [^\\\x80-\xff\n\015()] *                         #         normal*
                    838: )*                                  #            )*
                    839: \)                             #                )
                    840: [\040\t]* )*    # If comment found, allow more spaces.
                    841: # optional trailing comments
                    842: )*
                    843: # address
                    844: |                             #  or
                    845: (?:
                    846: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    847: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    848: # Atom
                    849: |                       #  or
                    850: "                                     # "
                    851: [^\\\x80-\xff\n\015"] *                            #   normal
                    852: (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
                    853: "                                     #        "
                    854: # Quoted string
                    855: )
                    856: # leading word
                    857: [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
                    858: (?:
                    859: (?:
                    860: \(                              #  (
                    861: [^\\\x80-\xff\n\015()] *                             #     normal*
                    862: (?:                                 #       (
                    863: (?:  \\ [^\x80-\xff]  |
                    864: \(                            #  (
                    865: [^\\\x80-\xff\n\015()] *                            #     normal*
                    866: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    867: \)                           #                       )
                    868: )    #         special
                    869: [^\\\x80-\xff\n\015()] *                         #         normal*
                    870: )*                                  #            )*
                    871: \)                             #                )
                    872: |
                    873: "                                     # "
                    874: [^\\\x80-\xff\n\015"] *                            #   normal
                    875: (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
                    876: "                                     #        "
                    877: ) # "special" comment or quoted string
                    878: [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
                    879: )*
                    880: <
                    881: [\040\t]*                    # Nab whitespace.
                    882: (?:
                    883: \(                              #  (
                    884: [^\\\x80-\xff\n\015()] *                             #     normal*
                    885: (?:                                 #       (
                    886: (?:  \\ [^\x80-\xff]  |
                    887: \(                            #  (
                    888: [^\\\x80-\xff\n\015()] *                            #     normal*
                    889: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    890: \)                           #                       )
                    891: )    #         special
                    892: [^\\\x80-\xff\n\015()] *                         #         normal*
                    893: )*                                  #            )*
                    894: \)                             #                )
                    895: [\040\t]* )*    # If comment found, allow more spaces.
                    896: # <
                    897: (?:
                    898: @
                    899: [\040\t]*                    # Nab whitespace.
                    900: (?:
                    901: \(                              #  (
                    902: [^\\\x80-\xff\n\015()] *                             #     normal*
                    903: (?:                                 #       (
                    904: (?:  \\ [^\x80-\xff]  |
                    905: \(                            #  (
                    906: [^\\\x80-\xff\n\015()] *                            #     normal*
                    907: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    908: \)                           #                       )
                    909: )    #         special
                    910: [^\\\x80-\xff\n\015()] *                         #         normal*
                    911: )*                                  #            )*
                    912: \)                             #                )
                    913: [\040\t]* )*    # If comment found, allow more spaces.
                    914: (?:
                    915: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    916: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    917: |
                    918: \[                            # [
                    919: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                    920: \]                           #           ]
                    921: )
                    922: [\040\t]*                    # Nab whitespace.
                    923: (?:
                    924: \(                              #  (
                    925: [^\\\x80-\xff\n\015()] *                             #     normal*
                    926: (?:                                 #       (
                    927: (?:  \\ [^\x80-\xff]  |
                    928: \(                            #  (
                    929: [^\\\x80-\xff\n\015()] *                            #     normal*
                    930: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    931: \)                           #                       )
                    932: )    #         special
                    933: [^\\\x80-\xff\n\015()] *                         #         normal*
                    934: )*                                  #            )*
                    935: \)                             #                )
                    936: [\040\t]* )*    # If comment found, allow more spaces.
                    937: # optional trailing comments
                    938: (?:
                    939: \.
                    940: [\040\t]*                    # Nab whitespace.
                    941: (?:
                    942: \(                              #  (
                    943: [^\\\x80-\xff\n\015()] *                             #     normal*
                    944: (?:                                 #       (
                    945: (?:  \\ [^\x80-\xff]  |
                    946: \(                            #  (
                    947: [^\\\x80-\xff\n\015()] *                            #     normal*
                    948: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    949: \)                           #                       )
                    950: )    #         special
                    951: [^\\\x80-\xff\n\015()] *                         #         normal*
                    952: )*                                  #            )*
                    953: \)                             #                )
                    954: [\040\t]* )*    # If comment found, allow more spaces.
                    955: (?:
                    956: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                    957: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                    958: |
                    959: \[                            # [
                    960: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                    961: \]                           #           ]
                    962: )
                    963: [\040\t]*                    # Nab whitespace.
                    964: (?:
                    965: \(                              #  (
                    966: [^\\\x80-\xff\n\015()] *                             #     normal*
                    967: (?:                                 #       (
                    968: (?:  \\ [^\x80-\xff]  |
                    969: \(                            #  (
                    970: [^\\\x80-\xff\n\015()] *                            #     normal*
                    971: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    972: \)                           #                       )
                    973: )    #         special
                    974: [^\\\x80-\xff\n\015()] *                         #         normal*
                    975: )*                                  #            )*
                    976: \)                             #                )
                    977: [\040\t]* )*    # If comment found, allow more spaces.
                    978: # optional trailing comments
                    979: )*
                    980: (?: ,
                    981: [\040\t]*                    # Nab whitespace.
                    982: (?:
                    983: \(                              #  (
                    984: [^\\\x80-\xff\n\015()] *                             #     normal*
                    985: (?:                                 #       (
                    986: (?:  \\ [^\x80-\xff]  |
                    987: \(                            #  (
                    988: [^\\\x80-\xff\n\015()] *                            #     normal*
                    989: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                    990: \)                           #                       )
                    991: )    #         special
                    992: [^\\\x80-\xff\n\015()] *                         #         normal*
                    993: )*                                  #            )*
                    994: \)                             #                )
                    995: [\040\t]* )*    # If comment found, allow more spaces.
                    996: @
                    997: [\040\t]*                    # Nab whitespace.
                    998: (?:
                    999: \(                              #  (
                   1000: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1001: (?:                                 #       (
                   1002: (?:  \\ [^\x80-\xff]  |
                   1003: \(                            #  (
                   1004: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1005: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1006: \)                           #                       )
                   1007: )    #         special
                   1008: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1009: )*                                  #            )*
                   1010: \)                             #                )
                   1011: [\040\t]* )*    # If comment found, allow more spaces.
                   1012: (?:
                   1013: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                   1014: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                   1015: |
                   1016: \[                            # [
                   1017: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                   1018: \]                           #           ]
                   1019: )
                   1020: [\040\t]*                    # Nab whitespace.
                   1021: (?:
                   1022: \(                              #  (
                   1023: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1024: (?:                                 #       (
                   1025: (?:  \\ [^\x80-\xff]  |
                   1026: \(                            #  (
                   1027: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1028: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1029: \)                           #                       )
                   1030: )    #         special
                   1031: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1032: )*                                  #            )*
                   1033: \)                             #                )
                   1034: [\040\t]* )*    # If comment found, allow more spaces.
                   1035: # optional trailing comments
                   1036: (?:
                   1037: \.
                   1038: [\040\t]*                    # Nab whitespace.
                   1039: (?:
                   1040: \(                              #  (
                   1041: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1042: (?:                                 #       (
                   1043: (?:  \\ [^\x80-\xff]  |
                   1044: \(                            #  (
                   1045: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1046: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1047: \)                           #                       )
                   1048: )    #         special
                   1049: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1050: )*                                  #            )*
                   1051: \)                             #                )
                   1052: [\040\t]* )*    # If comment found, allow more spaces.
                   1053: (?:
                   1054: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                   1055: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                   1056: |
                   1057: \[                            # [
                   1058: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                   1059: \]                           #           ]
                   1060: )
                   1061: [\040\t]*                    # Nab whitespace.
                   1062: (?:
                   1063: \(                              #  (
                   1064: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1065: (?:                                 #       (
                   1066: (?:  \\ [^\x80-\xff]  |
                   1067: \(                            #  (
                   1068: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1069: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1070: \)                           #                       )
                   1071: )    #         special
                   1072: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1073: )*                                  #            )*
                   1074: \)                             #                )
                   1075: [\040\t]* )*    # If comment found, allow more spaces.
                   1076: # optional trailing comments
                   1077: )*
                   1078: )*  # additional domains
                   1079: :
                   1080: [\040\t]*                    # Nab whitespace.
                   1081: (?:
                   1082: \(                              #  (
                   1083: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1084: (?:                                 #       (
                   1085: (?:  \\ [^\x80-\xff]  |
                   1086: \(                            #  (
                   1087: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1088: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1089: \)                           #                       )
                   1090: )    #         special
                   1091: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1092: )*                                  #            )*
                   1093: \)                             #                )
                   1094: [\040\t]* )*    # If comment found, allow more spaces.
                   1095: # optional trailing comments
                   1096: )?     #       optional route
                   1097: (?:
                   1098: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                   1099: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                   1100: # Atom
                   1101: |                       #  or
                   1102: "                                     # "
                   1103: [^\\\x80-\xff\n\015"] *                            #   normal
                   1104: (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
                   1105: "                                     #        "
                   1106: # Quoted string
                   1107: )
                   1108: [\040\t]*                    # Nab whitespace.
                   1109: (?:
                   1110: \(                              #  (
                   1111: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1112: (?:                                 #       (
                   1113: (?:  \\ [^\x80-\xff]  |
                   1114: \(                            #  (
                   1115: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1116: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1117: \)                           #                       )
                   1118: )    #         special
                   1119: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1120: )*                                  #            )*
                   1121: \)                             #                )
                   1122: [\040\t]* )*    # If comment found, allow more spaces.
                   1123: (?:
                   1124: \.
                   1125: [\040\t]*                    # Nab whitespace.
                   1126: (?:
                   1127: \(                              #  (
                   1128: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1129: (?:                                 #       (
                   1130: (?:  \\ [^\x80-\xff]  |
                   1131: \(                            #  (
                   1132: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1133: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1134: \)                           #                       )
                   1135: )    #         special
                   1136: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1137: )*                                  #            )*
                   1138: \)                             #                )
                   1139: [\040\t]* )*    # If comment found, allow more spaces.
                   1140: (?:
                   1141: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                   1142: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                   1143: # Atom
                   1144: |                       #  or
                   1145: "                                     # "
                   1146: [^\\\x80-\xff\n\015"] *                            #   normal
                   1147: (?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
                   1148: "                                     #        "
                   1149: # Quoted string
                   1150: )
                   1151: [\040\t]*                    # Nab whitespace.
                   1152: (?:
                   1153: \(                              #  (
                   1154: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1155: (?:                                 #       (
                   1156: (?:  \\ [^\x80-\xff]  |
                   1157: \(                            #  (
                   1158: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1159: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1160: \)                           #                       )
                   1161: )    #         special
                   1162: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1163: )*                                  #            )*
                   1164: \)                             #                )
                   1165: [\040\t]* )*    # If comment found, allow more spaces.
                   1166: # additional words
                   1167: )*
                   1168: @
                   1169: [\040\t]*                    # Nab whitespace.
                   1170: (?:
                   1171: \(                              #  (
                   1172: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1173: (?:                                 #       (
                   1174: (?:  \\ [^\x80-\xff]  |
                   1175: \(                            #  (
                   1176: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1177: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1178: \)                           #                       )
                   1179: )    #         special
                   1180: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1181: )*                                  #            )*
                   1182: \)                             #                )
                   1183: [\040\t]* )*    # If comment found, allow more spaces.
                   1184: (?:
                   1185: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                   1186: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                   1187: |
                   1188: \[                            # [
                   1189: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                   1190: \]                           #           ]
                   1191: )
                   1192: [\040\t]*                    # Nab whitespace.
                   1193: (?:
                   1194: \(                              #  (
                   1195: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1196: (?:                                 #       (
                   1197: (?:  \\ [^\x80-\xff]  |
                   1198: \(                            #  (
                   1199: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1200: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1201: \)                           #                       )
                   1202: )    #         special
                   1203: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1204: )*                                  #            )*
                   1205: \)                             #                )
                   1206: [\040\t]* )*    # If comment found, allow more spaces.
                   1207: # optional trailing comments
                   1208: (?:
                   1209: \.
                   1210: [\040\t]*                    # Nab whitespace.
                   1211: (?:
                   1212: \(                              #  (
                   1213: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1214: (?:                                 #       (
                   1215: (?:  \\ [^\x80-\xff]  |
                   1216: \(                            #  (
                   1217: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1218: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1219: \)                           #                       )
                   1220: )    #         special
                   1221: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1222: )*                                  #            )*
                   1223: \)                             #                )
                   1224: [\040\t]* )*    # If comment found, allow more spaces.
                   1225: (?:
                   1226: [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
                   1227: (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
                   1228: |
                   1229: \[                            # [
                   1230: (?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
                   1231: \]                           #           ]
                   1232: )
                   1233: [\040\t]*                    # Nab whitespace.
                   1234: (?:
                   1235: \(                              #  (
                   1236: [^\\\x80-\xff\n\015()] *                             #     normal*
                   1237: (?:                                 #       (
                   1238: (?:  \\ [^\x80-\xff]  |
                   1239: \(                            #  (
                   1240: [^\\\x80-\xff\n\015()] *                            #     normal*
                   1241: (?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
                   1242: \)                           #                       )
                   1243: )    #         special
                   1244: [^\\\x80-\xff\n\015()] *                         #         normal*
                   1245: )*                                  #            )*
                   1246: \)                             #                )
                   1247: [\040\t]* )*    # If comment found, allow more spaces.
                   1248: # optional trailing comments
                   1249: )*
                   1250: #       address spec
                   1251: >                    #                 >
                   1252: # name and address
                   1253: )
                   1254: /x
                   1255:     Alan Other <user\@dom.ain>
                   1256:     <user\@dom.ain>
                   1257:     user\@dom.ain
                   1258:     \"A. Other\" <user.1234\@dom.ain> (a comment)
                   1259:     A. Other <user.1234\@dom.ain> (a comment)
                   1260:     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
                   1261:     A missing angle <user\@some.where
                   1262:     *** Failers
                   1263:     The quick brown fox
                   1264: 
                   1265: /abc\0def\00pqr\000xyz\0000AB/
                   1266:     abc\0def\00pqr\000xyz\0000AB
                   1267:     abc456 abc\0def\00pqr\000xyz\0000ABCDE
                   1268: 
                   1269: /abc\x0def\x00pqr\x000xyz\x0000AB/
                   1270:     abc\x0def\x00pqr\x000xyz\x0000AB
                   1271:     abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
                   1272: 
                   1273: /^[\000-\037]/
                   1274:     \0A
                   1275:     \01B
                   1276:     \037C
                   1277: 
                   1278: /\0*/
                   1279:     \0\0\0\0
                   1280: 
                   1281: /A\x0{2,3}Z/
                   1282:     The A\x0\x0Z
                   1283:     An A\0\x0\0Z
                   1284:     *** Failers
                   1285:     A\0Z
                   1286:     A\0\x0\0\x0Z
                   1287: 
                   1288: /^(cow|)\1(bell)/
                   1289:     cowcowbell
                   1290:     bell
                   1291:     *** Failers
                   1292:     cowbell
                   1293: 
                   1294: /^\s/
                   1295:     \040abc
                   1296:     \x0cabc
                   1297:     \nabc
                   1298:     \rabc
                   1299:     \tabc
                   1300:     *** Failers
                   1301:     abc
                   1302: 
                   1303: /^a    b
                   1304:       c/x
                   1305:     abc
                   1306: 
                   1307: /^(a|)\1*b/
                   1308:     ab
                   1309:     aaaab
                   1310:     b
                   1311:     *** Failers
                   1312:     acb
                   1313: 
                   1314: /^(a|)\1+b/
                   1315:     aab
                   1316:     aaaab
                   1317:     b
                   1318:     *** Failers
                   1319:     ab
                   1320: 
                   1321: /^(a|)\1?b/
                   1322:     ab
                   1323:     aab
                   1324:     b
                   1325:     *** Failers
                   1326:     acb
                   1327: 
                   1328: /^(a|)\1{2}b/
                   1329:     aaab
                   1330:     b
                   1331:     *** Failers
                   1332:     ab
                   1333:     aab
                   1334:     aaaab
                   1335: 
                   1336: /^(a|)\1{2,3}b/
                   1337:     aaab
                   1338:     aaaab
                   1339:     b
                   1340:     *** Failers
                   1341:     ab
                   1342:     aab
                   1343:     aaaaab
                   1344: 
                   1345: /ab{1,3}bc/
                   1346:     abbbbc
                   1347:     abbbc
                   1348:     abbc
                   1349:     *** Failers
                   1350:     abc
                   1351:     abbbbbc
                   1352: 
                   1353: /([^.]*)\.([^:]*):[T ]+(.*)/
                   1354:     track1.title:TBlah blah blah
                   1355: 
                   1356: /([^.]*)\.([^:]*):[T ]+(.*)/i
                   1357:     track1.title:TBlah blah blah
                   1358: 
                   1359: /([^.]*)\.([^:]*):[t ]+(.*)/i
                   1360:     track1.title:TBlah blah blah
                   1361: 
                   1362: /^[W-c]+$/
                   1363:     WXY_^abc
                   1364:     *** Failers
                   1365:     wxy
                   1366: 
                   1367: /^[W-c]+$/i
                   1368:     WXY_^abc
                   1369:     wxy_^ABC
                   1370: 
                   1371: /^[\x3f-\x5F]+$/i
                   1372:     WXY_^abc
                   1373:     wxy_^ABC
                   1374: 
                   1375: /^abc$/m
                   1376:     abc
                   1377:     qqq\nabc
                   1378:     abc\nzzz
                   1379:     qqq\nabc\nzzz
                   1380: 
                   1381: /^abc$/
                   1382:     abc
                   1383:     *** Failers
                   1384:     qqq\nabc
                   1385:     abc\nzzz
                   1386:     qqq\nabc\nzzz
                   1387: 
                   1388: /\Aabc\Z/m
                   1389:     abc
                   1390:     abc\n 
                   1391:     *** Failers
                   1392:     qqq\nabc
                   1393:     abc\nzzz
                   1394:     qqq\nabc\nzzz
                   1395:     
                   1396: /\A(.)*\Z/s
                   1397:     abc\ndef
                   1398: 
                   1399: /\A(.)*\Z/m
                   1400:     *** Failers
                   1401:     abc\ndef
                   1402: 
                   1403: /(?:b)|(?::+)/
                   1404:     b::c
                   1405:     c::b
                   1406: 
                   1407: /[-az]+/
                   1408:     az-
                   1409:     *** Failers
                   1410:     b
                   1411: 
                   1412: /[az-]+/
                   1413:     za-
                   1414:     *** Failers
                   1415:     b
                   1416: 
                   1417: /[a\-z]+/
                   1418:     a-z
                   1419:     *** Failers
                   1420:     b
                   1421: 
                   1422: /[a-z]+/
                   1423:     abcdxyz
                   1424: 
                   1425: /[\d-]+/
                   1426:     12-34
                   1427:     *** Failers
                   1428:     aaa
                   1429: 
                   1430: /[\d-z]+/
                   1431:     12-34z
                   1432:     *** Failers
                   1433:     aaa
                   1434: 
                   1435: /\x5c/
                   1436:     \\
                   1437: 
                   1438: /\x20Z/
                   1439:     the Zoo
                   1440:     *** Failers
                   1441:     Zulu
                   1442: 
                   1443: /(abc)\1/i
                   1444:     abcabc
                   1445:     ABCabc
                   1446:     abcABC
                   1447: 
                   1448: /ab{3cd/
                   1449:     ab{3cd
                   1450: 
                   1451: /ab{3,cd/
                   1452:     ab{3,cd
                   1453: 
                   1454: /ab{3,4a}cd/
                   1455:     ab{3,4a}cd
                   1456: 
                   1457: /{4,5a}bc/
                   1458:     {4,5a}bc
                   1459: 
                   1460: /abc$/
                   1461:     abc
                   1462:     abc\n
                   1463:     *** Failers
                   1464:     abc\ndef
                   1465: 
                   1466: /(abc)\123/
                   1467:     abc\x53
                   1468: 
                   1469: /(abc)\223/
                   1470:     abc\x93
                   1471: 
                   1472: /(abc)\323/
                   1473:     abc\xd3
                   1474: 
                   1475: /(abc)\100/
                   1476:     abc\x40
                   1477:     abc\100
                   1478: 
                   1479: /(abc)\1000/
                   1480:     abc\x400
                   1481:     abc\x40\x30
                   1482:     abc\1000
                   1483:     abc\100\x30
                   1484:     abc\100\060
                   1485:     abc\100\60
                   1486: 
                   1487: /abc\81/
                   1488:     abc\081
                   1489:     abc\0\x38\x31
                   1490: 
                   1491: /abc\91/
                   1492:     abc\091
                   1493:     abc\0\x39\x31
                   1494: 
                   1495: /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
                   1496:     abcdefghijkllS
                   1497: 
                   1498: /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
                   1499:     abcdefghijk\12S
                   1500: 
                   1501: /ab\idef/
                   1502:     abidef
                   1503: 
                   1504: /a{0}bc/
                   1505:     bc
                   1506: 
                   1507: /(a|(bc)){0,0}?xyz/
                   1508:     xyz
                   1509: 
                   1510: /abc[\10]de/
                   1511:     abc\010de
                   1512: 
                   1513: /abc[\1]de/
                   1514:     abc\1de
                   1515: 
                   1516: /(abc)[\1]de/
                   1517:     abc\1de
                   1518: 
                   1519: /(?s)a.b/
                   1520:     a\nb
                   1521: 
                   1522: /^([^a])([^\b])([^c]*)([^d]{3,4})/
                   1523:     baNOTccccd
                   1524:     baNOTcccd
                   1525:     baNOTccd
                   1526:     bacccd
                   1527:     *** Failers
                   1528:     anything
                   1529:     b\bc   
                   1530:     baccd
                   1531: 
                   1532: /[^a]/
                   1533:     Abc
                   1534:   
                   1535: /[^a]/i
                   1536:     Abc 
                   1537: 
                   1538: /[^a]+/
                   1539:     AAAaAbc
                   1540:   
                   1541: /[^a]+/i
                   1542:     AAAaAbc 
                   1543: 
                   1544: /[^a]+/
                   1545:     bbb\nccc
                   1546:    
                   1547: /[^k]$/
                   1548:     abc
                   1549:     *** Failers
                   1550:     abk   
                   1551:    
                   1552: /[^k]{2,3}$/
                   1553:     abc
                   1554:     kbc
                   1555:     kabc 
                   1556:     *** Failers
                   1557:     abk
                   1558:     akb
                   1559:     akk 
                   1560: 
                   1561: /^\d{8,}\@.+[^k]$/
                   1562:     12345678\@a.b.c.d
                   1563:     123456789\@x.y.z
                   1564:     *** Failers
                   1565:     12345678\@x.y.uk
                   1566:     1234567\@a.b.c.d       
                   1567: 
                   1568: /(a)\1{8,}/
                   1569:     aaaaaaaaa
                   1570:     aaaaaaaaaa
                   1571:     *** Failers
                   1572:     aaaaaaa   
                   1573: 
                   1574: /[^a]/
                   1575:     aaaabcd
                   1576:     aaAabcd 
                   1577: 
                   1578: /[^a]/i
                   1579:     aaaabcd
                   1580:     aaAabcd 
                   1581: 
                   1582: /[^az]/
                   1583:     aaaabcd
                   1584:     aaAabcd 
                   1585: 
                   1586: /[^az]/i
                   1587:     aaaabcd
                   1588:     aaAabcd 
                   1589: 
                   1590: /\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\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
                   1591:  \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\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
                   1592: 
                   1593: /P[^*]TAIRE[^*]{1,6}?LL/
                   1594:     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
                   1595: 
                   1596: /P[^*]TAIRE[^*]{1,}?LL/
                   1597:     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
                   1598: 
                   1599: /(\.\d\d[1-9]?)\d+/
                   1600:     1.230003938
                   1601:     1.875000282   
                   1602:     1.235  
                   1603:                   
                   1604: /(\.\d\d((?=0)|\d(?=\d)))/
                   1605:     1.230003938      
                   1606:     1.875000282
                   1607:     *** Failers 
                   1608:     1.235 
                   1609:     
                   1610: /a(?)b/
                   1611:     ab 
                   1612:  
                   1613: /\b(foo)\s+(\w+)/i
                   1614:     Food is on the foo table
                   1615:     
                   1616: /foo(.*)bar/
                   1617:     The food is under the bar in the barn.
                   1618:     
                   1619: /foo(.*?)bar/  
                   1620:     The food is under the bar in the barn.
                   1621: 
                   1622: /(.*)(\d*)/
                   1623:     I have 2 numbers: 53147
                   1624:     
                   1625: /(.*)(\d+)/
                   1626:     I have 2 numbers: 53147
                   1627:  
                   1628: /(.*?)(\d*)/
                   1629:     I have 2 numbers: 53147
                   1630: 
                   1631: /(.*?)(\d+)/
                   1632:     I have 2 numbers: 53147
                   1633: 
                   1634: /(.*)(\d+)$/
                   1635:     I have 2 numbers: 53147
                   1636: 
                   1637: /(.*?)(\d+)$/
                   1638:     I have 2 numbers: 53147
                   1639: 
                   1640: /(.*)\b(\d+)$/
                   1641:     I have 2 numbers: 53147
                   1642: 
                   1643: /(.*\D)(\d+)$/
                   1644:     I have 2 numbers: 53147
                   1645: 
                   1646: /^\D*(?!123)/
                   1647:     ABC123
                   1648:      
                   1649: /^(\D*)(?=\d)(?!123)/
                   1650:     ABC445
                   1651:     *** Failers
                   1652:     ABC123
                   1653:     
                   1654: /^[W-]46]/
                   1655:     W46]789 
                   1656:     -46]789
                   1657:     *** Failers
                   1658:     Wall
                   1659:     Zebra
                   1660:     42
                   1661:     [abcd] 
                   1662:     ]abcd[
                   1663:        
                   1664: /^[W-\]46]/
                   1665:     W46]789 
                   1666:     Wall
                   1667:     Zebra
                   1668:     Xylophone  
                   1669:     42
                   1670:     [abcd] 
                   1671:     ]abcd[
                   1672:     \\backslash 
                   1673:     *** Failers
                   1674:     -46]789
                   1675:     well
                   1676:     
                   1677: /\d\d\/\d\d\/\d\d\d\d/
                   1678:     01/01/2000
                   1679: 
                   1680: /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
                   1681:   word cat dog elephant mussel cow horse canary baboon snake shark otherword
                   1682:   word cat dog elephant mussel cow horse canary baboon snake shark
                   1683: 
                   1684: /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
                   1685:   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
                   1686: 
                   1687: /^(a){0,0}/
                   1688:     bcd
                   1689:     abc
                   1690:     aab     
                   1691: 
                   1692: /^(a){0,1}/
                   1693:     bcd
                   1694:     abc
                   1695:     aab  
                   1696: 
                   1697: /^(a){0,2}/
                   1698:     bcd
                   1699:     abc
                   1700:     aab  
                   1701: 
                   1702: /^(a){0,3}/
                   1703:     bcd
                   1704:     abc
                   1705:     aab
                   1706:     aaa   
                   1707: 
                   1708: /^(a){0,}/
                   1709:     bcd
                   1710:     abc
                   1711:     aab
                   1712:     aaa
                   1713:     aaaaaaaa    
                   1714: 
                   1715: /^(a){1,1}/
                   1716:     bcd
                   1717:     abc
                   1718:     aab  
                   1719: 
                   1720: /^(a){1,2}/
                   1721:     bcd
                   1722:     abc
                   1723:     aab  
                   1724: 
                   1725: /^(a){1,3}/
                   1726:     bcd
                   1727:     abc
                   1728:     aab
                   1729:     aaa   
                   1730: 
                   1731: /^(a){1,}/
                   1732:     bcd
                   1733:     abc
                   1734:     aab
                   1735:     aaa
                   1736:     aaaaaaaa    
                   1737: 
                   1738: /.*\.gif/
                   1739:     borfle\nbib.gif\nno
                   1740: 
                   1741: /.{0,}\.gif/
                   1742:     borfle\nbib.gif\nno
                   1743: 
                   1744: /.*\.gif/m
                   1745:     borfle\nbib.gif\nno
                   1746: 
                   1747: /.*\.gif/s
                   1748:     borfle\nbib.gif\nno
                   1749: 
                   1750: /.*\.gif/ms
                   1751:     borfle\nbib.gif\nno
                   1752:     
                   1753: /.*$/
                   1754:     borfle\nbib.gif\nno
                   1755: 
                   1756: /.*$/m
                   1757:     borfle\nbib.gif\nno
                   1758: 
                   1759: /.*$/s
                   1760:     borfle\nbib.gif\nno
                   1761: 
                   1762: /.*$/ms
                   1763:     borfle\nbib.gif\nno
                   1764:     
                   1765: /.*$/
                   1766:     borfle\nbib.gif\nno\n
                   1767: 
                   1768: /.*$/m
                   1769:     borfle\nbib.gif\nno\n
                   1770: 
                   1771: /.*$/s
                   1772:     borfle\nbib.gif\nno\n
                   1773: 
                   1774: /.*$/ms
                   1775:     borfle\nbib.gif\nno\n
                   1776:     
                   1777: /(.*X|^B)/
                   1778:     abcde\n1234Xyz
                   1779:     BarFoo 
                   1780:     *** Failers
                   1781:     abcde\nBar  
                   1782: 
                   1783: /(.*X|^B)/m
                   1784:     abcde\n1234Xyz
                   1785:     BarFoo 
                   1786:     abcde\nBar  
                   1787: 
                   1788: /(.*X|^B)/s
                   1789:     abcde\n1234Xyz
                   1790:     BarFoo 
                   1791:     *** Failers
                   1792:     abcde\nBar  
                   1793: 
                   1794: /(.*X|^B)/ms
                   1795:     abcde\n1234Xyz
                   1796:     BarFoo 
                   1797:     abcde\nBar  
                   1798: 
                   1799: /(?s)(.*X|^B)/
                   1800:     abcde\n1234Xyz
                   1801:     BarFoo 
                   1802:     *** Failers 
                   1803:     abcde\nBar  
                   1804: 
                   1805: /(?s:.*X|^B)/
                   1806:     abcde\n1234Xyz
                   1807:     BarFoo 
                   1808:     *** Failers 
                   1809:     abcde\nBar  
                   1810: 
                   1811: /^.*B/
                   1812:     **** Failers
                   1813:     abc\nB
                   1814:      
                   1815: /(?s)^.*B/
                   1816:     abc\nB
                   1817: 
                   1818: /(?m)^.*B/
                   1819:     abc\nB
                   1820:      
                   1821: /(?ms)^.*B/
                   1822:     abc\nB
                   1823: 
                   1824: /(?ms)^B/
                   1825:     abc\nB
                   1826: 
                   1827: /(?s)B$/
                   1828:     B\n
                   1829: 
                   1830: /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
                   1831:     123456654321
                   1832:   
                   1833: /^\d\d\d\d\d\d\d\d\d\d\d\d/
                   1834:     123456654321 
                   1835: 
                   1836: /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
                   1837:     123456654321
                   1838:   
                   1839: /^[abc]{12}/
                   1840:     abcabcabcabc
                   1841:     
                   1842: /^[a-c]{12}/
                   1843:     abcabcabcabc
                   1844:     
                   1845: /^(a|b|c){12}/
                   1846:     abcabcabcabc 
                   1847: 
                   1848: /^[abcdefghijklmnopqrstuvwxy0123456789]/
                   1849:     n
                   1850:     *** Failers 
                   1851:     z 
                   1852: 
                   1853: /abcde{0,0}/
                   1854:     abcd
                   1855:     *** Failers
                   1856:     abce  
                   1857: 
                   1858: /ab[cd]{0,0}e/
                   1859:     abe
                   1860:     *** Failers
                   1861:     abcde 
                   1862:     
                   1863: /ab(c){0,0}d/
                   1864:     abd
                   1865:     *** Failers
                   1866:     abcd   
                   1867: 
                   1868: /a(b*)/
                   1869:     a
                   1870:     ab
                   1871:     abbbb
                   1872:     *** Failers
                   1873:     bbbbb    
                   1874:     
                   1875: /ab\d{0}e/
                   1876:     abe
                   1877:     *** Failers
                   1878:     ab1e   
                   1879:     
                   1880: /"([^\\"]+|\\.)*"/
                   1881:     the \"quick\" brown fox
                   1882:     \"the \\\"quick\\\" brown fox\" 
                   1883: 
                   1884: /.*?/g+
                   1885:     abc
                   1886:   
                   1887: /\b/g+
                   1888:     abc 
                   1889: 
                   1890: /\b/+g
                   1891:     abc 
                   1892: 
                   1893: //g
                   1894:     abc
                   1895: 
                   1896: /<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
                   1897:   <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>
                   1898: 
                   1899: /a[^a]b/
                   1900:     acb
                   1901:     a\nb
                   1902:     
                   1903: /a.b/
                   1904:     acb
                   1905:     *** Failers 
                   1906:     a\nb   
                   1907:     
                   1908: /a[^a]b/s
                   1909:     acb
                   1910:     a\nb  
                   1911:     
                   1912: /a.b/s
                   1913:     acb
                   1914:     a\nb  
                   1915: 
                   1916: /^(b+?|a){1,2}?c/
                   1917:     bac
                   1918:     bbac
                   1919:     bbbac
                   1920:     bbbbac
                   1921:     bbbbbac 
                   1922: 
                   1923: /^(b+|a){1,2}?c/
                   1924:     bac
                   1925:     bbac
                   1926:     bbbac
                   1927:     bbbbac
                   1928:     bbbbbac 
                   1929:     
                   1930: /(?!\A)x/m
                   1931:     x\nb\n
                   1932:     a\bx\n  
                   1933:     
                   1934: /\x0{ab}/
                   1935:     \0{ab} 
                   1936: 
                   1937: /(A|B)*?CD/
                   1938:     CD 
                   1939:     
                   1940: /(A|B)*CD/
                   1941:     CD 
                   1942: 
                   1943: /(AB)*?\1/
                   1944:     ABABAB
                   1945: 
                   1946: /(AB)*\1/
                   1947:     ABABAB
                   1948:     
                   1949: /(?<!bar)foo/
                   1950:     foo
                   1951:     catfood
                   1952:     arfootle
                   1953:     rfoosh
                   1954:     *** Failers
                   1955:     barfoo
                   1956:     towbarfoo
                   1957: 
                   1958: /\w{3}(?<!bar)foo/
                   1959:     catfood
                   1960:     *** Failers
                   1961:     foo
                   1962:     barfoo
                   1963:     towbarfoo
                   1964: 
                   1965: /(?<=(foo)a)bar/
                   1966:     fooabar
                   1967:     *** Failers
                   1968:     bar
                   1969:     foobbar
                   1970:       
                   1971: /\Aabc\z/m
                   1972:     abc
                   1973:     *** Failers
                   1974:     abc\n   
                   1975:     qqq\nabc
                   1976:     abc\nzzz
                   1977:     qqq\nabc\nzzz
                   1978: 
                   1979: "(?>.*/)foo"
                   1980:     /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
                   1981: 
                   1982: "(?>.*/)foo"
                   1983:     /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
                   1984: 
                   1985: /(?>(\.\d\d[1-9]?))\d+/
                   1986:     1.230003938
                   1987:     1.875000282
                   1988:     *** Failers 
                   1989:     1.235 
                   1990: 
                   1991: /^((?>\w+)|(?>\s+))*$/
                   1992:     now is the time for all good men to come to the aid of the party
                   1993:     *** Failers
                   1994:     this is not a line with only words and spaces!
                   1995:     
                   1996: /(\d+)(\w)/
                   1997:     12345a
                   1998:     12345+ 
                   1999: 
                   2000: /((?>\d+))(\w)/
                   2001:     12345a
                   2002:     *** Failers
                   2003:     12345+ 
                   2004: 
                   2005: /(?>a+)b/
                   2006:     aaab
                   2007: 
                   2008: /((?>a+)b)/
                   2009:     aaab
                   2010: 
                   2011: /(?>(a+))b/
                   2012:     aaab
                   2013: 
                   2014: /(?>b)+/
                   2015:     aaabbbccc
                   2016: 
                   2017: /(?>a+|b+|c+)*c/
                   2018:     aaabbbbccccd
                   2019: 
                   2020: /((?>[^()]+)|\([^()]*\))+/
                   2021:     ((abc(ade)ufh()()x
                   2022:     
                   2023: /\(((?>[^()]+)|\([^()]+\))+\)/ 
                   2024:     (abc)
                   2025:     (abc(def)xyz)
                   2026:     *** Failers
                   2027:     ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
                   2028: 
                   2029: /a(?-i)b/i
                   2030:     ab
                   2031:     Ab
                   2032:     *** Failers 
                   2033:     aB
                   2034:     AB
                   2035:         
                   2036: /(a (?x)b c)d e/
                   2037:     a bcd e
                   2038:     *** Failers
                   2039:     a b cd e
                   2040:     abcd e   
                   2041:     a bcde 
                   2042:  
                   2043: /(a b(?x)c d (?-x)e f)/
                   2044:     a bcde f
                   2045:     *** Failers
                   2046:     abcdef  
                   2047: 
                   2048: /(a(?i)b)c/
                   2049:     abc
                   2050:     aBc
                   2051:     *** Failers
                   2052:     abC
                   2053:     aBC  
                   2054:     Abc
                   2055:     ABc
                   2056:     ABC
                   2057:     AbC
                   2058:     
                   2059: /a(?i:b)c/
                   2060:     abc
                   2061:     aBc
                   2062:     *** Failers 
                   2063:     ABC
                   2064:     abC
                   2065:     aBC
                   2066:     
                   2067: /a(?i:b)*c/
                   2068:     aBc
                   2069:     aBBc
                   2070:     *** Failers 
                   2071:     aBC
                   2072:     aBBC
                   2073:     
                   2074: /a(?=b(?i)c)\w\wd/
                   2075:     abcd
                   2076:     abCd
                   2077:     *** Failers
                   2078:     aBCd
                   2079:     abcD     
                   2080:     
                   2081: /(?s-i:more.*than).*million/i
                   2082:     more than million
                   2083:     more than MILLION
                   2084:     more \n than Million 
                   2085:     *** Failers
                   2086:     MORE THAN MILLION    
                   2087:     more \n than \n million 
                   2088: 
                   2089: /(?:(?s-i)more.*than).*million/i
                   2090:     more than million
                   2091:     more than MILLION
                   2092:     more \n than Million 
                   2093:     *** Failers
                   2094:     MORE THAN MILLION    
                   2095:     more \n than \n million 
                   2096:     
                   2097: /(?>a(?i)b+)+c/ 
                   2098:     abc
                   2099:     aBbc
                   2100:     aBBc 
                   2101:     *** Failers
                   2102:     Abc
                   2103:     abAb    
                   2104:     abbC 
                   2105:     
                   2106: /(?=a(?i)b)\w\wc/
                   2107:     abc
                   2108:     aBc
                   2109:     *** Failers
                   2110:     Ab 
                   2111:     abC
                   2112:     aBC     
                   2113:     
                   2114: /(?<=a(?i)b)(\w\w)c/
                   2115:     abxxc
                   2116:     aBxxc
                   2117:     *** Failers
                   2118:     Abxxc
                   2119:     ABxxc
                   2120:     abxxC      
                   2121: 
                   2122: /(?:(a)|b)(?(1)A|B)/
                   2123:     aA
                   2124:     bB
                   2125:     *** Failers
                   2126:     aB
                   2127:     bA    
                   2128: 
                   2129: /^(a)?(?(1)a|b)+$/
                   2130:     aa
                   2131:     b
                   2132:     bb  
                   2133:     *** Failers
                   2134:     ab   
                   2135: 
                   2136: /^(?(?=abc)\w{3}:|\d\d)$/
                   2137:     abc:
                   2138:     12
                   2139:     *** Failers
                   2140:     123
                   2141:     xyz    
                   2142: 
                   2143: /^(?(?!abc)\d\d|\w{3}:)$/
                   2144:     abc:
                   2145:     12
                   2146:     *** Failers
                   2147:     123
                   2148:     xyz    
                   2149:     
                   2150: /(?(?<=foo)bar|cat)/
                   2151:     foobar
                   2152:     cat
                   2153:     fcat
                   2154:     focat   
                   2155:     *** Failers
                   2156:     foocat  
                   2157: 
                   2158: /(?(?<!foo)cat|bar)/
                   2159:     foobar
                   2160:     cat
                   2161:     fcat
                   2162:     focat   
                   2163:     *** Failers
                   2164:     foocat  
                   2165: 
                   2166: /( \( )? [^()]+ (?(1) \) |) /x
                   2167:     abcd
                   2168:     (abcd)
                   2169:     the quick (abcd) fox
                   2170:     (abcd   
                   2171: 
                   2172: /( \( )? [^()]+ (?(1) \) ) /x
                   2173:     abcd
                   2174:     (abcd)
                   2175:     the quick (abcd) fox
                   2176:     (abcd   
                   2177: 
                   2178: /^(?(2)a|(1)(2))+$/
                   2179:     12
                   2180:     12a
                   2181:     12aa
                   2182:     *** Failers
                   2183:     1234    
                   2184: 
                   2185: /((?i)blah)\s+\1/
                   2186:     blah blah
                   2187:     BLAH BLAH
                   2188:     Blah Blah
                   2189:     blaH blaH
                   2190:     *** Failers
                   2191:     blah BLAH
                   2192:     Blah blah      
                   2193:     blaH blah 
                   2194: 
                   2195: /((?i)blah)\s+(?i:\1)/
                   2196:     blah blah
                   2197:     BLAH BLAH
                   2198:     Blah Blah
                   2199:     blaH blaH
                   2200:     blah BLAH
                   2201:     Blah blah      
                   2202:     blaH blah 
                   2203: 
                   2204: /(?>a*)*/
                   2205:     a
                   2206:     aa
                   2207:     aaaa
                   2208:     
                   2209: /(abc|)+/
                   2210:     abc
                   2211:     abcabc
                   2212:     abcabcabc
                   2213:     xyz      
                   2214: 
                   2215: /([a]*)*/
                   2216:     a
                   2217:     aaaaa 
                   2218:  
                   2219: /([ab]*)*/
                   2220:     a
                   2221:     b
                   2222:     ababab
                   2223:     aaaabcde
                   2224:     bbbb    
                   2225:  
                   2226: /([^a]*)*/
                   2227:     b
                   2228:     bbbb
                   2229:     aaa   
                   2230:  
                   2231: /([^ab]*)*/
                   2232:     cccc
                   2233:     abab  
                   2234:  
                   2235: /([a]*?)*/
                   2236:     a
                   2237:     aaaa 
                   2238:  
                   2239: /([ab]*?)*/
                   2240:     a
                   2241:     b
                   2242:     abab
                   2243:     baba   
                   2244:  
                   2245: /([^a]*?)*/
                   2246:     b
                   2247:     bbbb
                   2248:     aaa   
                   2249:  
                   2250: /([^ab]*?)*/
                   2251:     c
                   2252:     cccc
                   2253:     baba   
                   2254:  
                   2255: /(?>a*)*/
                   2256:     a
                   2257:     aaabcde 
                   2258:  
                   2259: /((?>a*))*/
                   2260:     aaaaa
                   2261:     aabbaa 
                   2262:  
                   2263: /((?>a*?))*/
                   2264:     aaaaa
                   2265:     aabbaa 
                   2266: 
                   2267: /(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
                   2268:     12-sep-98
                   2269:     12-09-98
                   2270:     *** Failers
                   2271:     sep-12-98
                   2272:         
                   2273: /(?<=(foo))bar\1/
                   2274:     foobarfoo
                   2275:     foobarfootling 
                   2276:     *** Failers
                   2277:     foobar
                   2278:     barfoo   
                   2279: 
                   2280: /(?i:saturday|sunday)/
                   2281:     saturday
                   2282:     sunday
                   2283:     Saturday
                   2284:     Sunday
                   2285:     SATURDAY
                   2286:     SUNDAY
                   2287:     SunDay
                   2288:     
                   2289: /(a(?i)bc|BB)x/
                   2290:     abcx
                   2291:     aBCx
                   2292:     bbx
                   2293:     BBx
                   2294:     *** Failers
                   2295:     abcX
                   2296:     aBCX
                   2297:     bbX
                   2298:     BBX               
                   2299: 
                   2300: /^([ab](?i)[cd]|[ef])/
                   2301:     ac
                   2302:     aC
                   2303:     bD
                   2304:     elephant
                   2305:     Europe 
                   2306:     frog
                   2307:     France
                   2308:     *** Failers
                   2309:     Africa     
                   2310: 
                   2311: /^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
                   2312:     ab
                   2313:     aBd
                   2314:     xy
                   2315:     xY
                   2316:     zebra
                   2317:     Zambesi
                   2318:     *** Failers
                   2319:     aCD  
                   2320:     XY  
                   2321: 
                   2322: /(?<=foo\n)^bar/m
                   2323:     foo\nbar
                   2324:     *** Failers
                   2325:     bar
                   2326:     baz\nbar   
                   2327: 
                   2328: /(?<=(?<!foo)bar)baz/
                   2329:     barbaz
                   2330:     barbarbaz 
                   2331:     koobarbaz 
                   2332:     *** Failers
                   2333:     baz
                   2334:     foobarbaz 
                   2335: 
                   2336: /The cases of aaaa and aaaaaa are missed out below because Perl does things/
                   2337: /differently. We know that odd, and maybe incorrect, things happen with/
                   2338: /recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
                   2339: 
                   2340: /^(a\1?){4}$/
                   2341:     a
                   2342:     aa
                   2343:     aaa
                   2344:     aaaaa
                   2345:     aaaaaaa
                   2346:     aaaaaaaa
                   2347:     aaaaaaaaa
                   2348:     aaaaaaaaaa
                   2349:     aaaaaaaaaaa
                   2350:     aaaaaaaaaaaa
                   2351:     aaaaaaaaaaaaa
                   2352:     aaaaaaaaaaaaaa
                   2353:     aaaaaaaaaaaaaaa
                   2354:     aaaaaaaaaaaaaaaa               
                   2355: 
                   2356: /^(a\1?)(a\1?)(a\2?)(a\3?)$/
                   2357:     a
                   2358:     aa
                   2359:     aaa
                   2360:     aaaa
                   2361:     aaaaa
                   2362:     aaaaaa
                   2363:     aaaaaaa
                   2364:     aaaaaaaa
                   2365:     aaaaaaaaa
                   2366:     aaaaaaaaaa
                   2367:     aaaaaaaaaaa
                   2368:     aaaaaaaaaaaa
                   2369:     aaaaaaaaaaaaa
                   2370:     aaaaaaaaaaaaaa
                   2371:     aaaaaaaaaaaaaaa
                   2372:     aaaaaaaaaaaaaaaa               
                   2373: 
                   2374: /The following tests are taken from the Perl 5.005 test suite; some of them/
                   2375: /are compatible with 5.004, but I'd rather not have to sort them out./
                   2376: 
                   2377: /abc/
                   2378:     abc
                   2379:     xabcy
                   2380:     ababc
                   2381:     *** Failers
                   2382:     xbc
                   2383:     axc
                   2384:     abx
                   2385: 
                   2386: /ab*c/
                   2387:     abc
                   2388: 
                   2389: /ab*bc/
                   2390:     abc
                   2391:     abbc
                   2392:     abbbbc
                   2393: 
                   2394: /.{1}/
                   2395:     abbbbc
                   2396: 
                   2397: /.{3,4}/
                   2398:     abbbbc
                   2399: 
                   2400: /ab{0,}bc/
                   2401:     abbbbc
                   2402: 
                   2403: /ab+bc/
                   2404:     abbc
                   2405:     *** Failers
                   2406:     abc
                   2407:     abq
                   2408: 
                   2409: /ab{1,}bc/
                   2410: 
                   2411: /ab+bc/
                   2412:     abbbbc
                   2413: 
                   2414: /ab{1,}bc/
                   2415:     abbbbc
                   2416: 
                   2417: /ab{1,3}bc/
                   2418:     abbbbc
                   2419: 
                   2420: /ab{3,4}bc/
                   2421:     abbbbc
                   2422: 
                   2423: /ab{4,5}bc/
                   2424:     *** Failers
                   2425:     abq
                   2426:     abbbbc
                   2427: 
                   2428: /ab?bc/
                   2429:     abbc
                   2430:     abc
                   2431: 
                   2432: /ab{0,1}bc/
                   2433:     abc
                   2434: 
                   2435: /ab?bc/
                   2436: 
                   2437: /ab?c/
                   2438:     abc
                   2439: 
                   2440: /ab{0,1}c/
                   2441:     abc
                   2442: 
                   2443: /^abc$/
                   2444:     abc
                   2445:     *** Failers
                   2446:     abbbbc
                   2447:     abcc
                   2448: 
                   2449: /^abc/
                   2450:     abcc
                   2451: 
                   2452: /^abc$/
                   2453: 
                   2454: /abc$/
                   2455:     aabc
                   2456:     *** Failers
                   2457:     aabc
                   2458:     aabcd
                   2459: 
                   2460: /^/
                   2461:     abc
                   2462: 
                   2463: /$/
                   2464:     abc
                   2465: 
                   2466: /a.c/
                   2467:     abc
                   2468:     axc
                   2469: 
                   2470: /a.*c/
                   2471:     axyzc
                   2472: 
                   2473: /a[bc]d/
                   2474:     abd
                   2475:     *** Failers
                   2476:     axyzd
                   2477:     abc
                   2478: 
                   2479: /a[b-d]e/
                   2480:     ace
                   2481: 
                   2482: /a[b-d]/
                   2483:     aac
                   2484: 
                   2485: /a[-b]/
                   2486:     a-
                   2487: 
                   2488: /a[b-]/
                   2489:     a-
                   2490: 
                   2491: /a]/
                   2492:     a]
                   2493: 
                   2494: /a[]]b/
                   2495:     a]b
                   2496: 
                   2497: /a[^bc]d/
                   2498:     aed
                   2499:     *** Failers
                   2500:     abd
                   2501:     abd
                   2502: 
                   2503: /a[^-b]c/
                   2504:     adc
                   2505: 
                   2506: /a[^]b]c/
                   2507:     adc
                   2508:     *** Failers
                   2509:     a-c
                   2510:     a]c
                   2511: 
                   2512: /\ba\b/
                   2513:     a-
                   2514:     -a
                   2515:     -a-
                   2516: 
                   2517: /\by\b/
                   2518:     *** Failers
                   2519:     xy
                   2520:     yz
                   2521:     xyz
                   2522: 
                   2523: /\Ba\B/
                   2524:     *** Failers
                   2525:     a-
                   2526:     -a
                   2527:     -a-
                   2528: 
                   2529: /\By\b/
                   2530:     xy
                   2531: 
                   2532: /\by\B/
                   2533:     yz
                   2534: 
                   2535: /\By\B/
                   2536:     xyz
                   2537: 
                   2538: /\w/
                   2539:     a
                   2540: 
                   2541: /\W/
                   2542:     -
                   2543:     *** Failers
                   2544:     -
                   2545:     a
                   2546: 
                   2547: /a\sb/
                   2548:     a b
                   2549: 
                   2550: /a\Sb/
                   2551:     a-b
                   2552:     *** Failers
                   2553:     a-b
                   2554:     a b
                   2555: 
                   2556: /\d/
                   2557:     1
                   2558: 
                   2559: /\D/
                   2560:     -
                   2561:     *** Failers
                   2562:     -
                   2563:     1
                   2564: 
                   2565: /[\w]/
                   2566:     a
                   2567: 
                   2568: /[\W]/
                   2569:     -
                   2570:     *** Failers
                   2571:     -
                   2572:     a
                   2573: 
                   2574: /a[\s]b/
                   2575:     a b
                   2576: 
                   2577: /a[\S]b/
                   2578:     a-b
                   2579:     *** Failers
                   2580:     a-b
                   2581:     a b
                   2582: 
                   2583: /[\d]/
                   2584:     1
                   2585: 
                   2586: /[\D]/
                   2587:     -
                   2588:     *** Failers
                   2589:     -
                   2590:     1
                   2591: 
                   2592: /ab|cd/
                   2593:     abc
                   2594:     abcd
                   2595: 
                   2596: /()ef/
                   2597:     def
                   2598: 
                   2599: /$b/
                   2600: 
                   2601: /a\(b/
                   2602:     a(b
                   2603: 
                   2604: /a\(*b/
                   2605:     ab
                   2606:     a((b
                   2607: 
                   2608: /a\\b/
                   2609:     a\b
                   2610: 
                   2611: /((a))/
                   2612:     abc
                   2613: 
                   2614: /(a)b(c)/
                   2615:     abc
                   2616: 
                   2617: /a+b+c/
                   2618:     aabbabc
                   2619: 
                   2620: /a{1,}b{1,}c/
                   2621:     aabbabc
                   2622: 
                   2623: /a.+?c/
                   2624:     abcabc
                   2625: 
                   2626: /(a+|b)*/
                   2627:     ab
                   2628: 
                   2629: /(a+|b){0,}/
                   2630:     ab
                   2631: 
                   2632: /(a+|b)+/
                   2633:     ab
                   2634: 
                   2635: /(a+|b){1,}/
                   2636:     ab
                   2637: 
                   2638: /(a+|b)?/
                   2639:     ab
                   2640: 
                   2641: /(a+|b){0,1}/
                   2642:     ab
                   2643: 
                   2644: /[^ab]*/
                   2645:     cde
                   2646: 
                   2647: /abc/
                   2648:     *** Failers
                   2649:     b
                   2650:     
                   2651: 
                   2652: /a*/
                   2653:     
                   2654: 
                   2655: /([abc])*d/
                   2656:     abbbcd
                   2657: 
                   2658: /([abc])*bcd/
                   2659:     abcd
                   2660: 
                   2661: /a|b|c|d|e/
                   2662:     e
                   2663: 
                   2664: /(a|b|c|d|e)f/
                   2665:     ef
                   2666: 
                   2667: /abcd*efg/
                   2668:     abcdefg
                   2669: 
                   2670: /ab*/
                   2671:     xabyabbbz
                   2672:     xayabbbz
                   2673: 
                   2674: /(ab|cd)e/
                   2675:     abcde
                   2676: 
                   2677: /[abhgefdc]ij/
                   2678:     hij
                   2679: 
                   2680: /^(ab|cd)e/
                   2681: 
                   2682: /(abc|)ef/
                   2683:     abcdef
                   2684: 
                   2685: /(a|b)c*d/
                   2686:     abcd
                   2687: 
                   2688: /(ab|ab*)bc/
                   2689:     abc
                   2690: 
                   2691: /a([bc]*)c*/
                   2692:     abc
                   2693: 
                   2694: /a([bc]*)(c*d)/
                   2695:     abcd
                   2696: 
                   2697: /a([bc]+)(c*d)/
                   2698:     abcd
                   2699: 
                   2700: /a([bc]*)(c+d)/
                   2701:     abcd
                   2702: 
                   2703: /a[bcd]*dcdcde/
                   2704:     adcdcde
                   2705: 
                   2706: /a[bcd]+dcdcde/
                   2707:     *** Failers
                   2708:     abcde
                   2709:     adcdcde
                   2710: 
                   2711: /(ab|a)b*c/
                   2712:     abc
                   2713: 
                   2714: /((a)(b)c)(d)/
                   2715:     abcd
                   2716: 
                   2717: /[a-zA-Z_][a-zA-Z0-9_]*/
                   2718:     alpha
                   2719: 
                   2720: /^a(bc+|b[eh])g|.h$/
                   2721:     abh
                   2722: 
                   2723: /(bc+d$|ef*g.|h?i(j|k))/
                   2724:     effgz
                   2725:     ij
                   2726:     reffgz
                   2727:     *** Failers
                   2728:     effg
                   2729:     bcdd
                   2730: 
                   2731: /((((((((((a))))))))))/
                   2732:     a
                   2733: 
                   2734: /((((((((((a))))))))))\10/
                   2735:     aa
                   2736: 
                   2737: /(((((((((a)))))))))/
                   2738:     a
                   2739: 
                   2740: /multiple words of text/
                   2741:     *** Failers
                   2742:     aa
                   2743:     uh-uh
                   2744: 
                   2745: /multiple words/
                   2746:     multiple words, yeah
                   2747: 
                   2748: /(.*)c(.*)/
                   2749:     abcde
                   2750: 
                   2751: /\((.*), (.*)\)/
                   2752:     (a, b)
                   2753: 
                   2754: /[k]/
                   2755: 
                   2756: /abcd/
                   2757:     abcd
                   2758: 
                   2759: /a(bc)d/
                   2760:     abcd
                   2761: 
                   2762: /a[-]?c/
                   2763:     ac
                   2764: 
                   2765: /(abc)\1/
                   2766:     abcabc
                   2767: 
                   2768: /([a-c]*)\1/
                   2769:     abcabc
                   2770: 
                   2771: /(a)|\1/
                   2772:     a
                   2773:     *** Failers
                   2774:     ab
                   2775:     x
                   2776: 
                   2777: /(([a-c])b*?\2)*/
                   2778:     ababbbcbc
                   2779: 
                   2780: /(([a-c])b*?\2){3}/
                   2781:     ababbbcbc
                   2782: 
                   2783: /((\3|b)\2(a)x)+/
                   2784:     aaaxabaxbaaxbbax
                   2785: 
                   2786: /((\3|b)\2(a)){2,}/
                   2787:     bbaababbabaaaaabbaaaabba
                   2788: 
                   2789: /abc/i
                   2790:     ABC
                   2791:     XABCY
                   2792:     ABABC
                   2793:     *** Failers
                   2794:     aaxabxbaxbbx
                   2795:     XBC
                   2796:     AXC
                   2797:     ABX
                   2798: 
                   2799: /ab*c/i
                   2800:     ABC
                   2801: 
                   2802: /ab*bc/i
                   2803:     ABC
                   2804:     ABBC
                   2805: 
                   2806: /ab*?bc/i
                   2807:     ABBBBC
                   2808: 
                   2809: /ab{0,}?bc/i
                   2810:     ABBBBC
                   2811: 
                   2812: /ab+?bc/i
                   2813:     ABBC
                   2814: 
                   2815: /ab+bc/i
                   2816:     *** Failers
                   2817:     ABC
                   2818:     ABQ
                   2819: 
                   2820: /ab{1,}bc/i
                   2821: 
                   2822: /ab+bc/i
                   2823:     ABBBBC
                   2824: 
                   2825: /ab{1,}?bc/i
                   2826:     ABBBBC
                   2827: 
                   2828: /ab{1,3}?bc/i
                   2829:     ABBBBC
                   2830: 
                   2831: /ab{3,4}?bc/i
                   2832:     ABBBBC
                   2833: 
                   2834: /ab{4,5}?bc/i
                   2835:     *** Failers
                   2836:     ABQ
                   2837:     ABBBBC
                   2838: 
                   2839: /ab??bc/i
                   2840:     ABBC
                   2841:     ABC
                   2842: 
                   2843: /ab{0,1}?bc/i
                   2844:     ABC
                   2845: 
                   2846: /ab??bc/i
                   2847: 
                   2848: /ab??c/i
                   2849:     ABC
                   2850: 
                   2851: /ab{0,1}?c/i
                   2852:     ABC
                   2853: 
                   2854: /^abc$/i
                   2855:     ABC
                   2856:     *** Failers
                   2857:     ABBBBC
                   2858:     ABCC
                   2859: 
                   2860: /^abc/i
                   2861:     ABCC
                   2862: 
                   2863: /^abc$/i
                   2864: 
                   2865: /abc$/i
                   2866:     AABC
                   2867: 
                   2868: /^/i
                   2869:     ABC
                   2870: 
                   2871: /$/i
                   2872:     ABC
                   2873: 
                   2874: /a.c/i
                   2875:     ABC
                   2876:     AXC
                   2877: 
                   2878: /a.*?c/i
                   2879:     AXYZC
                   2880: 
                   2881: /a.*c/i
                   2882:     *** Failers
                   2883:     AABC
                   2884:     AXYZD
                   2885: 
                   2886: /a[bc]d/i
                   2887:     ABD
                   2888: 
                   2889: /a[b-d]e/i
                   2890:     ACE
                   2891:     *** Failers
                   2892:     ABC
                   2893:     ABD
                   2894: 
                   2895: /a[b-d]/i
                   2896:     AAC
                   2897: 
                   2898: /a[-b]/i
                   2899:     A-
                   2900: 
                   2901: /a[b-]/i
                   2902:     A-
                   2903: 
                   2904: /a]/i
                   2905:     A]
                   2906: 
                   2907: /a[]]b/i
                   2908:     A]B
                   2909: 
                   2910: /a[^bc]d/i
                   2911:     AED
                   2912: 
                   2913: /a[^-b]c/i
                   2914:     ADC
                   2915:     *** Failers
                   2916:     ABD
                   2917:     A-C
                   2918: 
                   2919: /a[^]b]c/i
                   2920:     ADC
                   2921: 
                   2922: /ab|cd/i
                   2923:     ABC
                   2924:     ABCD
                   2925: 
                   2926: /()ef/i
                   2927:     DEF
                   2928: 
                   2929: /$b/i
                   2930:     *** Failers
                   2931:     A]C
                   2932:     B
                   2933: 
                   2934: /a\(b/i
                   2935:     A(B
                   2936: 
                   2937: /a\(*b/i
                   2938:     AB
                   2939:     A((B
                   2940: 
                   2941: /a\\b/i
                   2942:     A\B
                   2943: 
                   2944: /((a))/i
                   2945:     ABC
                   2946: 
                   2947: /(a)b(c)/i
                   2948:     ABC
                   2949: 
                   2950: /a+b+c/i
                   2951:     AABBABC
                   2952: 
                   2953: /a{1,}b{1,}c/i
                   2954:     AABBABC
                   2955: 
                   2956: /a.+?c/i
                   2957:     ABCABC
                   2958: 
                   2959: /a.*?c/i
                   2960:     ABCABC
                   2961: 
                   2962: /a.{0,5}?c/i
                   2963:     ABCABC
                   2964: 
                   2965: /(a+|b)*/i
                   2966:     AB
                   2967: 
                   2968: /(a+|b){0,}/i
                   2969:     AB
                   2970: 
                   2971: /(a+|b)+/i
                   2972:     AB
                   2973: 
                   2974: /(a+|b){1,}/i
                   2975:     AB
                   2976: 
                   2977: /(a+|b)?/i
                   2978:     AB
                   2979: 
                   2980: /(a+|b){0,1}/i
                   2981:     AB
                   2982: 
                   2983: /(a+|b){0,1}?/i
                   2984:     AB
                   2985: 
                   2986: /[^ab]*/i
                   2987:     CDE
                   2988: 
                   2989: /abc/i
                   2990: 
                   2991: /a*/i
                   2992:     
                   2993: 
                   2994: /([abc])*d/i
                   2995:     ABBBCD
                   2996: 
                   2997: /([abc])*bcd/i
                   2998:     ABCD
                   2999: 
                   3000: /a|b|c|d|e/i
                   3001:     E
                   3002: 
                   3003: /(a|b|c|d|e)f/i
                   3004:     EF
                   3005: 
                   3006: /abcd*efg/i
                   3007:     ABCDEFG
                   3008: 
                   3009: /ab*/i
                   3010:     XABYABBBZ
                   3011:     XAYABBBZ
                   3012: 
                   3013: /(ab|cd)e/i
                   3014:     ABCDE
                   3015: 
                   3016: /[abhgefdc]ij/i
                   3017:     HIJ
                   3018: 
                   3019: /^(ab|cd)e/i
                   3020:     ABCDE
                   3021: 
                   3022: /(abc|)ef/i
                   3023:     ABCDEF
                   3024: 
                   3025: /(a|b)c*d/i
                   3026:     ABCD
                   3027: 
                   3028: /(ab|ab*)bc/i
                   3029:     ABC
                   3030: 
                   3031: /a([bc]*)c*/i
                   3032:     ABC
                   3033: 
                   3034: /a([bc]*)(c*d)/i
                   3035:     ABCD
                   3036: 
                   3037: /a([bc]+)(c*d)/i
                   3038:     ABCD
                   3039: 
                   3040: /a([bc]*)(c+d)/i
                   3041:     ABCD
                   3042: 
                   3043: /a[bcd]*dcdcde/i
                   3044:     ADCDCDE
                   3045: 
                   3046: /a[bcd]+dcdcde/i
                   3047: 
                   3048: /(ab|a)b*c/i
                   3049:     ABC
                   3050: 
                   3051: /((a)(b)c)(d)/i
                   3052:     ABCD
                   3053: 
                   3054: /[a-zA-Z_][a-zA-Z0-9_]*/i
                   3055:     ALPHA
                   3056: 
                   3057: /^a(bc+|b[eh])g|.h$/i
                   3058:     ABH
                   3059: 
                   3060: /(bc+d$|ef*g.|h?i(j|k))/i
                   3061:     EFFGZ
                   3062:     IJ
                   3063:     REFFGZ
                   3064:     *** Failers
                   3065:     ADCDCDE
                   3066:     EFFG
                   3067:     BCDD
                   3068: 
                   3069: /((((((((((a))))))))))/i
                   3070:     A
                   3071: 
                   3072: /((((((((((a))))))))))\10/i
                   3073:     AA
                   3074: 
                   3075: /(((((((((a)))))))))/i
                   3076:     A
                   3077: 
                   3078: /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
                   3079:     A
                   3080: 
                   3081: /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
                   3082:     C
                   3083: 
                   3084: /multiple words of text/i
                   3085:     *** Failers
                   3086:     AA
                   3087:     UH-UH
                   3088: 
                   3089: /multiple words/i
                   3090:     MULTIPLE WORDS, YEAH
                   3091: 
                   3092: /(.*)c(.*)/i
                   3093:     ABCDE
                   3094: 
                   3095: /\((.*), (.*)\)/i
                   3096:     (A, B)
                   3097: 
                   3098: /[k]/i
                   3099: 
                   3100: /abcd/i
                   3101:     ABCD
                   3102: 
                   3103: /a(bc)d/i
                   3104:     ABCD
                   3105: 
                   3106: /a[-]?c/i
                   3107:     AC
                   3108: 
                   3109: /(abc)\1/i
                   3110:     ABCABC
                   3111: 
                   3112: /([a-c]*)\1/i
                   3113:     ABCABC
                   3114: 
                   3115: /a(?!b)./
                   3116:     abad
                   3117: 
                   3118: /a(?=d)./
                   3119:     abad
                   3120: 
                   3121: /a(?=c|d)./
                   3122:     abad
                   3123: 
                   3124: /a(?:b|c|d)(.)/
                   3125:     ace
                   3126: 
                   3127: /a(?:b|c|d)*(.)/
                   3128:     ace
                   3129: 
                   3130: /a(?:b|c|d)+?(.)/
                   3131:     ace
                   3132:     acdbcdbe
                   3133: 
                   3134: /a(?:b|c|d)+(.)/
                   3135:     acdbcdbe
                   3136: 
                   3137: /a(?:b|c|d){2}(.)/
                   3138:     acdbcdbe
                   3139: 
                   3140: /a(?:b|c|d){4,5}(.)/
                   3141:     acdbcdbe
                   3142: 
                   3143: /a(?:b|c|d){4,5}?(.)/
                   3144:     acdbcdbe
                   3145: 
                   3146: /((foo)|(bar))*/
                   3147:     foobar
                   3148: 
                   3149: /a(?:b|c|d){6,7}(.)/
                   3150:     acdbcdbe
                   3151: 
                   3152: /a(?:b|c|d){6,7}?(.)/
                   3153:     acdbcdbe
                   3154: 
                   3155: /a(?:b|c|d){5,6}(.)/
                   3156:     acdbcdbe
                   3157: 
                   3158: /a(?:b|c|d){5,6}?(.)/
                   3159:     acdbcdbe
                   3160: 
                   3161: /a(?:b|c|d){5,7}(.)/
                   3162:     acdbcdbe
                   3163: 
                   3164: /a(?:b|c|d){5,7}?(.)/
                   3165:     acdbcdbe
                   3166: 
                   3167: /a(?:b|(c|e){1,2}?|d)+?(.)/
                   3168:     ace
                   3169: 
                   3170: /^(.+)?B/
                   3171:     AB
                   3172: 
                   3173: /^([^a-z])|(\^)$/
                   3174:     .
                   3175: 
                   3176: /^[<>]&/
                   3177:     <&OUT
                   3178: 
                   3179: /^(a\1?){4}$/
                   3180:     aaaaaaaaaa
                   3181:     *** Failers
                   3182:     AB
                   3183:     aaaaaaaaa
                   3184:     aaaaaaaaaaa
                   3185: 
                   3186: /^(a(?(1)\1)){4}$/
                   3187:     aaaaaaaaaa
                   3188:     *** Failers
                   3189:     aaaaaaaaa
                   3190:     aaaaaaaaaaa
                   3191: 
                   3192: /(?:(f)(o)(o)|(b)(a)(r))*/
                   3193:     foobar
                   3194: 
                   3195: /(?<=a)b/
                   3196:     ab
                   3197:     *** Failers
                   3198:     cb
                   3199:     b
                   3200: 
                   3201: /(?<!c)b/
                   3202:     ab
                   3203:     b
                   3204:     b
                   3205: 
                   3206: /(?:..)*a/
                   3207:     aba
                   3208: 
                   3209: /(?:..)*?a/
                   3210:     aba
                   3211: 
                   3212: /^(?:b|a(?=(.)))*\1/
                   3213:     abc
                   3214: 
                   3215: /^(){3,5}/
                   3216:     abc
                   3217: 
                   3218: /^(a+)*ax/
                   3219:     aax
                   3220: 
                   3221: /^((a|b)+)*ax/
                   3222:     aax
                   3223: 
                   3224: /^((a|bc)+)*ax/
                   3225:     aax
                   3226: 
                   3227: /(a|x)*ab/
                   3228:     cab
                   3229: 
                   3230: /(a)*ab/
                   3231:     cab
                   3232: 
                   3233: /(?:(?i)a)b/
                   3234:     ab
                   3235: 
                   3236: /((?i)a)b/
                   3237:     ab
                   3238: 
                   3239: /(?:(?i)a)b/
                   3240:     Ab
                   3241: 
                   3242: /((?i)a)b/
                   3243:     Ab
                   3244: 
                   3245: /(?:(?i)a)b/
                   3246:     *** Failers
                   3247:     cb
                   3248:     aB
                   3249: 
                   3250: /((?i)a)b/
                   3251: 
                   3252: /(?i:a)b/
                   3253:     ab
                   3254: 
                   3255: /((?i:a))b/
                   3256:     ab
                   3257: 
                   3258: /(?i:a)b/
                   3259:     Ab
                   3260: 
                   3261: /((?i:a))b/
                   3262:     Ab
                   3263: 
                   3264: /(?i:a)b/
                   3265:     *** Failers
                   3266:     aB
                   3267:     aB
                   3268: 
                   3269: /((?i:a))b/
                   3270: 
                   3271: /(?:(?-i)a)b/i
                   3272:     ab
                   3273: 
                   3274: /((?-i)a)b/i
                   3275:     ab
                   3276: 
                   3277: /(?:(?-i)a)b/i
                   3278:     aB
                   3279: 
                   3280: /((?-i)a)b/i
                   3281:     aB
                   3282: 
                   3283: /(?:(?-i)a)b/i
                   3284:     *** Failers
                   3285:     aB
                   3286:     Ab
                   3287: 
                   3288: /((?-i)a)b/i
                   3289: 
                   3290: /(?:(?-i)a)b/i
                   3291:     aB
                   3292: 
                   3293: /((?-i)a)b/i
                   3294:     aB
                   3295: 
                   3296: /(?:(?-i)a)b/i
                   3297:     *** Failers
                   3298:     Ab
                   3299:     AB
                   3300: 
                   3301: /((?-i)a)b/i
                   3302: 
                   3303: /(?-i:a)b/i
                   3304:     ab
                   3305: 
                   3306: /((?-i:a))b/i
                   3307:     ab
                   3308: 
                   3309: /(?-i:a)b/i
                   3310:     aB
                   3311: 
                   3312: /((?-i:a))b/i
                   3313:     aB
                   3314: 
                   3315: /(?-i:a)b/i
                   3316:     *** Failers
                   3317:     AB
                   3318:     Ab
                   3319: 
                   3320: /((?-i:a))b/i
                   3321: 
                   3322: /(?-i:a)b/i
                   3323:     aB
                   3324: 
                   3325: /((?-i:a))b/i
                   3326:     aB
                   3327: 
                   3328: /(?-i:a)b/i
                   3329:     *** Failers
                   3330:     Ab
                   3331:     AB
                   3332: 
                   3333: /((?-i:a))b/i
                   3334: 
                   3335: /((?-i:a.))b/i
                   3336:     *** Failers
                   3337:     AB
                   3338:     a\nB
                   3339: 
                   3340: /((?s-i:a.))b/i
                   3341:     a\nB
                   3342: 
                   3343: /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
                   3344:     cabbbb
                   3345: 
                   3346: /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
                   3347:     caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
                   3348: 
                   3349: /(ab)\d\1/i
                   3350:     Ab4ab
                   3351:     ab4Ab
                   3352: 
                   3353: /foo\w*\d{4}baz/
                   3354:     foobar1234baz
                   3355: 
                   3356: /x(~~)*(?:(?:F)?)?/
                   3357:     x~~
                   3358: 
                   3359: /^a(?#xxx){3}c/
                   3360:     aaac
                   3361: 
                   3362: /^a (?#xxx) (?#yyy) {3}c/x
                   3363:     aaac
                   3364: 
                   3365: /(?<![cd])b/
                   3366:     *** Failers
                   3367:     B\nB
                   3368:     dbcb
                   3369: 
                   3370: /(?<![cd])[ab]/
                   3371:     dbaacb
                   3372: 
                   3373: /(?<!(c|d))b/
                   3374: 
                   3375: /(?<!(c|d))[ab]/
                   3376:     dbaacb
                   3377: 
                   3378: /(?<!cd)[ab]/
                   3379:     cdaccb
                   3380: 
                   3381: /^(?:a?b?)*$/
                   3382:     \
                   3383:     a
                   3384:     ab
                   3385:     aaa   
                   3386:     *** Failers
                   3387:     dbcb
                   3388:     a--
                   3389:     aa-- 
                   3390: 
                   3391: /((?s)^a(.))((?m)^b$)/
                   3392:     a\nb\nc\n
                   3393: 
                   3394: /((?m)^b$)/
                   3395:     a\nb\nc\n
                   3396: 
                   3397: /(?m)^b/
                   3398:     a\nb\n
                   3399: 
                   3400: /(?m)^(b)/
                   3401:     a\nb\n
                   3402: 
                   3403: /((?m)^b)/
                   3404:     a\nb\n
                   3405: 
                   3406: /\n((?m)^b)/
                   3407:     a\nb\n
                   3408: 
                   3409: /((?s).)c(?!.)/
                   3410:     a\nb\nc\n
                   3411:     a\nb\nc\n
                   3412: 
                   3413: /((?s)b.)c(?!.)/
                   3414:     a\nb\nc\n
                   3415:     a\nb\nc\n
                   3416: 
                   3417: /^b/
                   3418: 
                   3419: /()^b/
                   3420:     *** Failers
                   3421:     a\nb\nc\n
                   3422:     a\nb\nc\n
                   3423: 
                   3424: /((?m)^b)/
                   3425:     a\nb\nc\n
                   3426: 
                   3427: /(x)?(?(1)a|b)/
                   3428:     *** Failers
                   3429:     a
                   3430:     a
                   3431: 
                   3432: /(x)?(?(1)b|a)/
                   3433:     a
                   3434: 
                   3435: /()?(?(1)b|a)/
                   3436:     a
                   3437: 
                   3438: /()(?(1)b|a)/
                   3439: 
                   3440: /()?(?(1)a|b)/
                   3441:     a
                   3442: 
                   3443: /^(\()?blah(?(1)(\)))$/
                   3444:     (blah)
                   3445:     blah
                   3446:     *** Failers
                   3447:     a
                   3448:     blah)
                   3449:     (blah
                   3450: 
                   3451: /^(\(+)?blah(?(1)(\)))$/
                   3452:     (blah)
                   3453:     blah
                   3454:     *** Failers
                   3455:     blah)
                   3456:     (blah
                   3457: 
                   3458: /(?(?!a)a|b)/
                   3459: 
                   3460: /(?(?!a)b|a)/
                   3461:     a
                   3462: 
                   3463: /(?(?=a)b|a)/
                   3464:     *** Failers
                   3465:     a
                   3466:     a
                   3467: 
                   3468: /(?(?=a)a|b)/
                   3469:     a
                   3470: 
                   3471: /(?=(a+?))(\1ab)/
                   3472:     aaab
                   3473: 
                   3474: /^(?=(a+?))\1ab/
                   3475: 
                   3476: /(\w+:)+/
                   3477:     one:
                   3478: 
                   3479: /$(?<=^(a))/
                   3480:     a
                   3481: 
                   3482: /(?=(a+?))(\1ab)/
                   3483:     aaab
                   3484: 
                   3485: /^(?=(a+?))\1ab/
                   3486:     *** Failers
                   3487:     aaab
                   3488:     aaab
                   3489: 
                   3490: /([\w:]+::)?(\w+)$/
                   3491:     abcd
                   3492:     xy:z:::abcd
                   3493: 
                   3494: /^[^bcd]*(c+)/
                   3495:     aexycd
                   3496: 
                   3497: /(a*)b+/
                   3498:     caab
                   3499: 
                   3500: /([\w:]+::)?(\w+)$/
                   3501:     abcd
                   3502:     xy:z:::abcd
                   3503:     *** Failers
                   3504:     abcd:
                   3505:     abcd:
                   3506: 
                   3507: /^[^bcd]*(c+)/
                   3508:     aexycd
                   3509: 
                   3510: /(>a+)ab/
                   3511: 
                   3512: /(?>a+)b/
                   3513:     aaab
                   3514: 
                   3515: /([[:]+)/
                   3516:     a:[b]:
                   3517: 
                   3518: /([[=]+)/
                   3519:     a=[b]=
                   3520: 
                   3521: /([[.]+)/
                   3522:     a.[b].
                   3523: 
                   3524: /((?>a+)b)/
                   3525:     aaab
                   3526: 
                   3527: /(?>(a+))b/
                   3528:     aaab
                   3529: 
                   3530: /((?>[^()]+)|\([^()]*\))+/
                   3531:     ((abc(ade)ufh()()x
                   3532: 
                   3533: /a\Z/
                   3534:     *** Failers
                   3535:     aaab
                   3536:     a\nb\n
                   3537: 
                   3538: /b\Z/
                   3539:     a\nb\n
                   3540: 
                   3541: /b\z/
                   3542: 
                   3543: /b\Z/
                   3544:     a\nb
                   3545: 
                   3546: /b\z/
                   3547:     a\nb
                   3548:     *** Failers
                   3549:     
                   3550: /^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
                   3551:     a
                   3552:     abc
                   3553:     a-b
                   3554:     0-9 
                   3555:     a.b
                   3556:     5.6.7  
                   3557:     the.quick.brown.fox
                   3558:     a100.b200.300c  
                   3559:     12-ab.1245 
                   3560:     *** Failers
                   3561:     \
                   3562:     .a
                   3563:     -a
                   3564:     a-
                   3565:     a.  
                   3566:     a_b 
                   3567:     a.-
                   3568:     a..  
                   3569:     ab..bc 
                   3570:     the.quick.brown.fox-
                   3571:     the.quick.brown.fox.
                   3572:     the.quick.brown.fox_
                   3573:     the.quick.brown.fox+       
                   3574: 
                   3575: /(?>.*)(?<=(abcd|wxyz))/
                   3576:     alphabetabcd
                   3577:     endingwxyz
                   3578:     *** Failers
                   3579:     a rather long string that doesn't end with one of them
                   3580: 
                   3581: /word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
                   3582:     word cat dog elephant mussel cow horse canary baboon snake shark otherword
                   3583:     word cat dog elephant mussel cow horse canary baboon snake shark
                   3584:   
                   3585: /word (?>[a-zA-Z0-9]+ ){0,30}otherword/
                   3586:     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
                   3587: 
                   3588: /(?<=\d{3}(?!999))foo/
                   3589:     999foo
                   3590:     123999foo 
                   3591:     *** Failers
                   3592:     123abcfoo
                   3593:     
                   3594: /(?<=(?!...999)\d{3})foo/
                   3595:     999foo
                   3596:     123999foo 
                   3597:     *** Failers
                   3598:     123abcfoo
                   3599: 
                   3600: /(?<=\d{3}(?!999)...)foo/
                   3601:     123abcfoo
                   3602:     123456foo 
                   3603:     *** Failers
                   3604:     123999foo  
                   3605:     
                   3606: /(?<=\d{3}...)(?<!999)foo/
                   3607:     123abcfoo   
                   3608:     123456foo 
                   3609:     *** Failers
                   3610:     123999foo  
                   3611: 
                   3612: /<a[\s]+href[\s]*=[\s]*          # find <a href=
                   3613:  ([\"\'])?                       # find single or double quote
                   3614:  (?(1) (.*?)\1 | ([^\s]+))       # if quote found, match up to next matching
                   3615:                                  # quote, otherwise match up to next space
                   3616: /isx
                   3617:     <a href=abcd xyz
                   3618:     <a href=\"abcd xyz pqr\" cats
                   3619:     <a href=\'abcd xyz pqr\' cats
                   3620: 
                   3621: /<a\s+href\s*=\s*                # find <a href=
                   3622:  (["'])?                         # find single or double quote
                   3623:  (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
                   3624:                                  # quote, otherwise match up to next space
                   3625: /isx
                   3626:     <a href=abcd xyz
                   3627:     <a href=\"abcd xyz pqr\" cats
                   3628:     <a href       =       \'abcd xyz pqr\' cats
                   3629: 
                   3630: /<a\s+href(?>\s*)=(?>\s*)        # find <a href=
                   3631:  (["'])?                         # find single or double quote
                   3632:  (?(1) (.*?)\1 | (\S+))          # if quote found, match up to next matching
                   3633:                                  # quote, otherwise match up to next space
                   3634: /isx
                   3635:     <a href=abcd xyz
                   3636:     <a href=\"abcd xyz pqr\" cats
                   3637:     <a href       =       \'abcd xyz pqr\' cats
                   3638: 
                   3639: /((Z)+|A)*/
                   3640:     ZABCDEFG
                   3641: 
                   3642: /(Z()|A)*/
                   3643:     ZABCDEFG
                   3644: 
                   3645: /(Z(())|A)*/
                   3646:     ZABCDEFG
                   3647: 
                   3648: /((?>Z)+|A)*/
                   3649:     ZABCDEFG
                   3650: 
                   3651: /((?>)+|A)*/
                   3652:     ZABCDEFG
                   3653: 
                   3654: /a*/g
                   3655:     abbab
                   3656: 
                   3657: /^[a-\d]/
                   3658:     abcde
                   3659:     -things
                   3660:     0digit
                   3661:     *** Failers
                   3662:     bcdef    
                   3663: 
                   3664: /^[\d-a]/
                   3665:     abcde
                   3666:     -things
                   3667:     0digit
                   3668:     *** Failers
                   3669:     bcdef    
                   3670:     
                   3671: /[[:space:]]+/
                   3672:     > \x09\x0a\x0c\x0d\x0b<
                   3673:      
                   3674: /[[:blank:]]+/
                   3675:     > \x09\x0a\x0c\x0d\x0b<
                   3676:      
                   3677: /[\s]+/
                   3678:     > \x09\x0a\x0c\x0d\x0b<
                   3679:      
                   3680: /\s+/
                   3681:     > \x09\x0a\x0c\x0d\x0b<
                   3682:      
                   3683: /ab/x
                   3684:     ab
                   3685: 
                   3686: /(?!\A)x/m
                   3687:   a\nxb\n
                   3688: 
                   3689: /(?!^)x/m
                   3690:   a\nxb\n
                   3691: 
                   3692: /abc\Qabc\Eabc/
                   3693:     abcabcabc
                   3694:     
                   3695: /abc\Q(*+|\Eabc/
                   3696:     abc(*+|abc 
                   3697: 
                   3698: /   abc\Q abc\Eabc/x
                   3699:     abc abcabc
                   3700:     *** Failers
                   3701:     abcabcabc  
                   3702:     
                   3703: /abc#comment
                   3704:     \Q#not comment
                   3705:     literal\E/x
                   3706:     abc#not comment\n    literal     
                   3707: 
                   3708: /abc#comment
                   3709:     \Q#not comment
                   3710:     literal/x
                   3711:     abc#not comment\n    literal     
                   3712: 
                   3713: /abc#comment
                   3714:     \Q#not comment
                   3715:     literal\E #more comment
                   3716:     /x
                   3717:     abc#not comment\n    literal     
                   3718: 
                   3719: /abc#comment
                   3720:     \Q#not comment
                   3721:     literal\E #more comment/x
                   3722:     abc#not comment\n    literal     
                   3723: 
                   3724: /\Qabc\$xyz\E/
                   3725:     abc\\\$xyz
                   3726: 
                   3727: /\Qabc\E\$\Qxyz\E/
                   3728:     abc\$xyz
                   3729: 
                   3730: /\Gabc/
                   3731:     abc
                   3732:     *** Failers
                   3733:     xyzabc  
                   3734: 
                   3735: /\Gabc./g
                   3736:     abc1abc2xyzabc3
                   3737: 
                   3738: /abc./g
                   3739:     abc1abc2xyzabc3 
                   3740: 
                   3741: /a(?x: b c )d/
                   3742:     XabcdY
                   3743:     *** Failers 
                   3744:     Xa b c d Y 
                   3745: 
                   3746: /((?x)x y z | a b c)/
                   3747:     XabcY
                   3748:     AxyzB 
                   3749: 
                   3750: /(?i)AB(?-i)C/
                   3751:     XabCY
                   3752:     *** Failers
                   3753:     XabcY  
                   3754: 
                   3755: /((?i)AB(?-i)C|D)E/
                   3756:     abCE
                   3757:     DE
                   3758:     *** Failers
                   3759:     abcE
                   3760:     abCe  
                   3761:     dE
                   3762:     De    
                   3763: 
                   3764: /(.*)\d+\1/
                   3765:     abc123abc
                   3766:     abc123bc 
                   3767: 
                   3768: /(.*)\d+\1/s
                   3769:     abc123abc
                   3770:     abc123bc 
                   3771:     
                   3772: /((.*))\d+\1/
                   3773:     abc123abc
                   3774:     abc123bc  
                   3775: 
                   3776: /-- This tests for an IPv6 address in the form where it can have up to --/
                   3777: /-- eight components, one and only one of which is empty. This must be --/
                   3778: /-- an internal component. --/
                   3779: 
                   3780: /^(?!:)                       # colon disallowed at start
                   3781:   (?:                         # start of item
                   3782:     (?: [0-9a-f]{1,4} |       # 1-4 hex digits or
                   3783:     (?(1)0 | () ) )           # if null previously matched, fail; else null
                   3784:     :                         # followed by colon
                   3785:   ){1,7}                      # end item; 1-7 of them required               
                   3786:   [0-9a-f]{1,4} $             # final hex number at end of string
                   3787:   (?(1)|.)                    # check that there was an empty component
                   3788:   /xi
                   3789:     a123::a123
                   3790:     a123:b342::abcd
                   3791:     a123:b342::324e:abcd
                   3792:     a123:ddde:b342::324e:abcd
                   3793:     a123:ddde:b342::324e:dcba:abcd
                   3794:     a123:ddde:9999:b342::324e:dcba:abcd
                   3795:     *** Failers
                   3796:     1:2:3:4:5:6:7:8
                   3797:     a123:bce:ddde:9999:b342::324e:dcba:abcd
                   3798:     a123::9999:b342::324e:dcba:abcd
                   3799:     abcde:2:3:4:5:6:7:8
                   3800:     ::1
                   3801:     abcd:fee0:123::   
                   3802:     :1
                   3803:     1:  
                   3804: 
                   3805: /[z\Qa-d]\E]/
                   3806:     z
                   3807:     a
                   3808:     -
                   3809:     d
                   3810:     ] 
                   3811:     *** Failers
                   3812:     b     
                   3813: 
                   3814: /[\z\C]/
                   3815:     z
                   3816:     C 
                   3817:     
                   3818: /\M/
                   3819:     M 
                   3820:     
                   3821: /(a+)*b/
                   3822:     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
                   3823:     
                   3824: /(?i)reg(?:ul(?:[a]|ae)r|ex)/
                   3825:     REGular
                   3826:     regulaer
                   3827:     Regex  
                   3828:     regulr 
                   3829: 
                   3830: /[--]+/
                   3831:     
                   3832:     
                   3833:     
                   3834:     
                   3835: 
                   3836: /(?<=Z)X./
                   3837:   \x84XAZXB
                   3838: 
                   3839: /ab cd (?x) de fg/
                   3840:     ab cd defg
                   3841: 
                   3842: /ab cd(?x) de fg/
                   3843:     ab cddefg
                   3844:     ** Failers 
                   3845:     abcddefg
                   3846: 
                   3847: /(?<![^f]oo)(bar)/
                   3848:     foobarX 
                   3849:     ** Failers 
                   3850:     boobarX
                   3851: 
                   3852: /(?<![^f])X/
                   3853:     offX
                   3854:     ** Failers
                   3855:     onyX  
                   3856: 
                   3857: /(?<=[^f])X/
                   3858:     onyX
                   3859:     ** Failers
                   3860:     offX 
                   3861: 
                   3862: /^/mg
                   3863:     a\nb\nc\n
                   3864:     \ 
                   3865:     
                   3866: /(?<=C\n)^/mg
                   3867:     A\nC\nC\n 
                   3868: 
                   3869: /(?:(?(1)a|b)(X))+/
                   3870:     bXaX
                   3871: 
                   3872: /(?:(?(1)\1a|b)(X|Y))+/
                   3873:     bXXaYYaY
                   3874:     bXYaXXaX  
                   3875: 
                   3876: /()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
                   3877:     bXXaYYaY
                   3878: 
                   3879: /[[,abc,]+]/
                   3880:     abc]
                   3881:     a,b]
                   3882:     [a,b,c]  
                   3883: 
                   3884: /(?-x: )/x
                   3885:     A\x20B
                   3886:     
                   3887: "(?x)(?-x: \s*#\s*)"
                   3888:     A # B
                   3889:     ** Failers
                   3890:     #  
                   3891: 
                   3892: "(?x-is)(?:(?-ixs) \s*#\s*) include"
                   3893:     A #include
                   3894:     ** Failers
                   3895:     A#include  
                   3896:     A #Include
                   3897: 
                   3898: /a*b*\w/
                   3899:     aaabbbb
                   3900:     aaaa
                   3901:     a
                   3902: 
                   3903: /a*b?\w/
                   3904:     aaabbbb
                   3905:     aaaa
                   3906:     a
                   3907: 
                   3908: /a*b{0,4}\w/
                   3909:     aaabbbb
                   3910:     aaaa
                   3911:     a
                   3912: 
                   3913: /a*b{0,}\w/
                   3914:     aaabbbb
                   3915:     aaaa
                   3916:     a
                   3917:     
                   3918: /a*\d*\w/
                   3919:     0a
                   3920:     a 
                   3921:     
                   3922: /a*b *\w/x
                   3923:     a 
                   3924: 
                   3925: /a*b#comment
                   3926:   *\w/x
                   3927:     a 
                   3928: 
                   3929: /a* b *\w/x
                   3930:     a 
                   3931: 
                   3932: /^\w+=.*(\\\n.*)*/
                   3933:     abc=xyz\\\npqr
                   3934: 
                   3935: /(?=(\w+))\1:/
                   3936:     abcd:
                   3937: 
                   3938: /^(?=(\w+))\1:/
                   3939:     abcd:
                   3940: 
                   3941: /^\Eabc/
                   3942:     abc
                   3943:     
                   3944: /^[\Eabc]/
                   3945:     a
                   3946:     ** Failers 
                   3947:     E 
                   3948:     
                   3949: /^[a-\Ec]/
                   3950:     b
                   3951:     ** Failers
                   3952:     -
                   3953:     E    
                   3954: 
                   3955: /^[a\E\E-\Ec]/
                   3956:     b
                   3957:     ** Failers
                   3958:     -
                   3959:     E    
                   3960: 
                   3961: /^[\E\Qa\E-\Qz\E]+/
                   3962:     b
                   3963:     ** Failers
                   3964:     -  
                   3965:     
                   3966: /^[a\Q]bc\E]/
                   3967:     a
                   3968:     ]
                   3969:     c
                   3970:     
                   3971: /^[a-\Q\E]/
                   3972:     a
                   3973:     -     
                   3974: 
                   3975: /^(a()*)*/
                   3976:     aaaa
                   3977: 
                   3978: /^(?:a(?:(?:))*)*/
                   3979:     aaaa
                   3980: 
                   3981: /^(a()+)+/
                   3982:     aaaa
                   3983: 
                   3984: /^(?:a(?:(?:))+)+/
                   3985:     aaaa
                   3986: 
                   3987: /(a){0,3}(?(1)b|(c|))*D/
                   3988:     abbD
                   3989:     ccccD
                   3990:     D  
                   3991: 
                   3992: /(a|)*\d/
                   3993:   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                   3994:   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
                   3995: 
                   3996: /(?>a|)*\d/
                   3997:   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                   3998:   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
                   3999: 
                   4000: /(?:a|)*\d/
                   4001:   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
                   4002:   aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
                   4003: 
                   4004: /\Z/g
                   4005:   abc\n
                   4006:   
                   4007: /^(?s)(?>.*)(?<!\n)/
                   4008:   abc
                   4009:   abc\n  
                   4010: 
                   4011: /^(?![^\n]*\n\z)/
                   4012:   abc
                   4013:   abc\n 
                   4014:   
                   4015: /\z(?<!\n)/
                   4016:   abc
                   4017:   abc\n  
                   4018: 
                   4019: /(.*(.)?)*/
                   4020:     abcd
                   4021: 
                   4022: /( (A | (?(1)0|) )*   )/x
                   4023:     abcd
                   4024: 
                   4025: /( ( (?(1)0|) )*   )/x
                   4026:     abcd
                   4027: 
                   4028: /(  (?(1)0|)*   )/x
                   4029:     abcd
                   4030: 
                   4031: /[[:abcd:xyz]]/
                   4032:     a]
                   4033:     :] 
                   4034:     
                   4035: /[abc[:x\]pqr]/
                   4036:     a
                   4037:     [
                   4038:     :
                   4039:     ]
                   4040:     p    
                   4041: 
                   4042: /.*[op][xyz]/
                   4043:     fooabcfoo
                   4044: 
                   4045: /(?(?=.*b)b|^)/
                   4046:    adc
                   4047:    abc 
                   4048: 
                   4049: /(?(?=^.*b)b|^)/
                   4050:    adc
                   4051:    abc 
                   4052: 
                   4053: /(?(?=.*b)b|^)*/
                   4054:    adc
                   4055:    abc 
                   4056: 
                   4057: /(?(?=.*b)b|^)+/
                   4058:    adc
                   4059:    abc 
                   4060: 
                   4061: /(?(?=b).*b|^d)/
                   4062:     abc
                   4063: 
                   4064: /(?(?=.*b).*b|^d)/
                   4065:     abc
                   4066: 
                   4067: /^%((?(?=[a])[^%])|b)*%$/
                   4068:     %ab%
                   4069: 
                   4070: /(?i)a(?-i)b|c/
                   4071:     XabX
                   4072:     XAbX
                   4073:     CcC 
                   4074:     ** Failers
                   4075:     XABX   
                   4076: 
                   4077: /[\x00-\xff\s]+/
                   4078:     \x0a\x0b\x0c\x0d
                   4079: 
                   4080: /^\c/
                   4081:     ?
                   4082: 
                   4083: /(abc)\1/i
                   4084:    abc
                   4085: 
                   4086: /(abc)\1/
                   4087:    abc
                   4088: 
                   4089: /[^a]*/i
                   4090:     12abc
                   4091:     12ABC
                   4092: 
                   4093: /[^a]*+/i
                   4094:     12abc
                   4095:     12ABC
                   4096: 
                   4097: /[^a]*?X/i
                   4098:     ** Failers
                   4099:     12abc
                   4100:     12ABC
                   4101:     
                   4102: /[^a]+?X/i   
                   4103:     ** Failers
                   4104:     12abc
                   4105:     12ABC
                   4106: 
                   4107: /[^a]?X/i
                   4108:     12aXbcX
                   4109:     12AXBCX
                   4110:     BCX 
                   4111: 
                   4112: /[^a]??X/i
                   4113:     12aXbcX
                   4114:     12AXBCX
                   4115:     BCX
                   4116:     
                   4117: /[^a]?+X/i
                   4118:     12aXbcX
                   4119:     12AXBCX
                   4120:     BCX 
                   4121: 
                   4122: /[^a]{2,3}/i
                   4123:     abcdef
                   4124:     ABCDEF  
                   4125: 
                   4126: /[^a]{2,3}?/i
                   4127:     abcdef
                   4128:     ABCDEF  
                   4129: 
                   4130: /[^a]{2,3}+/i
                   4131:     abcdef
                   4132:     ABCDEF  
                   4133: 
                   4134: /((a|)+)+Z/
                   4135:     Z
                   4136: 
                   4137: /(a)b|(a)c/
                   4138:     ac
                   4139: 
                   4140: /(?>(a))b|(a)c/
                   4141:     ac
                   4142: 
                   4143: /(?=(a))ab|(a)c/
                   4144:     ac
                   4145: 
                   4146: /((?>(a))b|(a)c)/
                   4147:     ac
                   4148: 
                   4149: /((?>(a))b|(a)c)++/
                   4150:     ac
                   4151: 
                   4152: /(?:(?>(a))b|(a)c)++/
                   4153:     ac
                   4154: 
                   4155: /(?=(?>(a))b|(a)c)(..)/
                   4156:     ac
                   4157: 
                   4158: /(?>(?>(a))b|(a)c)/
                   4159:     ac
                   4160: 
                   4161: /(?:(?>([ab])))+a=/+
                   4162:     =ba=
                   4163: 
                   4164: /(?>([ab]))+a=/+
                   4165:     =ba=
                   4166: 
                   4167: /((?>(a+)b)+(aabab))/
                   4168:     aaaabaaabaabab
                   4169: 
                   4170: /(?>a+|ab)+?c/
                   4171:     aabc
                   4172: 
                   4173: /(?>a+|ab)+c/
                   4174:     aabc
                   4175: 
                   4176: /(?:a+|ab)+c/
                   4177:     aabc
                   4178: 
                   4179: /(?(?=(a))a)/
                   4180:     a
                   4181: 
                   4182: /(?(?=(a))a)(b)/
                   4183:     ab
                   4184: 
                   4185: /^(?:a|ab)++c/
                   4186:     aaaabc
                   4187: 
                   4188: /^(?>a|ab)++c/
                   4189:     aaaabc
                   4190: 
                   4191: /^(?:a|ab)+c/
                   4192:     aaaabc
                   4193: 
                   4194: /(?=abc){3}abc/+
                   4195:     abcabcabc
                   4196:     ** Failers
                   4197:     xyz  
                   4198:     
                   4199: /(?=abc)+abc/+
                   4200:     abcabcabc
                   4201:     ** Failers
                   4202:     xyz  
                   4203:     
                   4204: /(?=abc)++abc/+
                   4205:     abcabcabc
                   4206:     ** Failers
                   4207:     xyz  
                   4208:     
                   4209: /(?=abc){0}xyz/
                   4210:     xyz 
                   4211: 
                   4212: /(?=abc){1}xyz/
                   4213:     ** Failers
                   4214:     xyz 
                   4215:     
                   4216: /(?=(a))?./
                   4217:     ab
                   4218:     bc
                   4219:       
                   4220: /(?=(a))??./
                   4221:     ab
                   4222:     bc
                   4223: 
                   4224: /^(?=(a)){0}b(?1)/
                   4225:     backgammon
                   4226: 
                   4227: /^(?=(?1))?[az]([abc])d/
                   4228:     abd 
                   4229:     zcdxx 
                   4230: 
                   4231: /^(?!a){0}\w+/
                   4232:     aaaaa
                   4233: 
                   4234: /(?<=(abc))?xyz/
                   4235:     abcxyz
                   4236:     pqrxyz 
                   4237: 
                   4238: /^[\g<a>]+/
                   4239:     ggg<<<aaa>>>
                   4240:     ** Failers
                   4241:     \\ga  
                   4242:     
                   4243: /^[\ga]+/
                   4244:     gggagagaxyz 
                   4245:     
                   4246: /^[:a[:digit:]]+/
                   4247:     aaaa444:::Z 
                   4248: 
                   4249: /^[:a[:digit:]:b]+/
                   4250:     aaaa444:::bbbZ 
                   4251: 
                   4252: /[:a]xxx[b:]/
                   4253:      :xxx:
                   4254:      
                   4255: /(?<=a{2})b/i
                   4256:     xaabc
                   4257:     ** Failers
                   4258:     xabc  
                   4259: 
                   4260: /(?<!a{2})b/i
                   4261:     xabc
                   4262:     ** Failers
                   4263:     xaabc  
                   4264: 
                   4265: /(?<=a\h)c/
                   4266:     xa c
                   4267:     
                   4268: /(?<=[^a]{2})b/
                   4269:     axxbc
                   4270:     aAAbc 
                   4271:     ** Failers
                   4272:     xaabc    
                   4273: 
                   4274: /(?<=[^a]{2})b/i
                   4275:     axxbc  
                   4276:     ** Failers
                   4277:     aAAbc 
                   4278:     xaabc    
                   4279: 
                   4280: /(?<=a\H)c/
                   4281:     abc
                   4282: 
                   4283: /(?<=a\V)c/
                   4284:     abc
                   4285:     
                   4286: /(?<=a\v)c/
                   4287:     a\nc
                   4288: 
                   4289: /(?(?=c)c|d)++Y/
                   4290:     XcccddYX
                   4291: 
                   4292: /(?(?=c)c|d)*+Y/
                   4293:     XcccddYX
                   4294: 
                   4295: /^(a{2,3}){2,}+a/
                   4296:     aaaaaaa
                   4297:     ** Failers
                   4298:     aaaaaa
                   4299:     aaaaaaaaa 
                   4300: 
                   4301: /^(a{2,3})++a/
                   4302:     ** Failers
                   4303:     aaaaaa
                   4304: 
                   4305: /^(a{2,3})*+a/
                   4306:     ** Failers
                   4307:     aaaaaa
                   4308: 
                   4309: /ab\Cde/
                   4310:     abXde
                   4311:     
                   4312: /(?<=ab\Cde)X/
                   4313:     abZdeX
                   4314: 
                   4315: /a[\CD]b/
                   4316:     aCb
                   4317:     aDb 
                   4318: 
                   4319: /a[\C-X]b/
                   4320:     aJb
                   4321: 
1.1.1.2 ! misho    4322: /\H\h\V\v/
        !          4323:     X X\x0a
        !          4324:     X\x09X\x0b
        !          4325:     ** Failers
        !          4326:     \xa0 X\x0a   
        !          4327:     
        !          4328: /\H*\h+\V?\v{3,4}/ 
        !          4329:     \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
        !          4330:     \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
        !          4331:     \x09\x20\xa0\x0a\x0b\x0c
        !          4332:     ** Failers 
        !          4333:     \x09\x20\xa0\x0a\x0b
        !          4334:      
        !          4335: /\H{3,4}/
        !          4336:     XY  ABCDE
        !          4337:     XY  PQR ST 
        !          4338:     
        !          4339: /.\h{3,4}./
        !          4340:     XY  AB    PQRS
        !          4341: 
        !          4342: /\h*X\h?\H+Y\H?Z/
        !          4343:     >XNNNYZ
        !          4344:     >  X NYQZ
        !          4345:     ** Failers
        !          4346:     >XYZ   
        !          4347:     >  X NY Z
        !          4348: 
        !          4349: /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
        !          4350:     >XY\x0aZ\x0aA\x0bNN\x0c
        !          4351:     >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
        !          4352: 
        !          4353: /(foo)\Kbar/
        !          4354:     foobar
        !          4355:    
        !          4356: /(foo)(\Kbar|baz)/
        !          4357:     foobar
        !          4358:     foobaz 
        !          4359: 
        !          4360: /(foo\Kbar)baz/
        !          4361:     foobarbaz
        !          4362: 
        !          4363: /abc\K|def\K/g+
        !          4364:     Xabcdefghi
        !          4365: 
        !          4366: /ab\Kc|de\Kf/g+
        !          4367:     Xabcdefghi
        !          4368:     
        !          4369: /(?=C)/g+
        !          4370:     ABCDECBA
        !          4371:     
        !          4372: /^abc\K/+
        !          4373:     abcdef
        !          4374:     ** Failers
        !          4375:     defabcxyz   
        !          4376: 
        !          4377: /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
        !          4378:     ababababbbabZXXXX
        !          4379: 
        !          4380: /(?<A>tom|bon)-\g{A}/
        !          4381:     tom-tom
        !          4382:     bon-bon 
        !          4383:     
        !          4384: /(^(a|b\g{-1}))/
        !          4385:     bacxxx
        !          4386: 
        !          4387: /(?|(abc)|(xyz))\1/
        !          4388:     abcabc
        !          4389:     xyzxyz 
        !          4390:     ** Failers
        !          4391:     abcxyz
        !          4392:     xyzabc   
        !          4393:     
        !          4394: /(?|(abc)|(xyz))(?1)/
        !          4395:     abcabc
        !          4396:     xyzabc 
        !          4397:     ** Failers 
        !          4398:     xyzxyz 
        !          4399:  
        !          4400: /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
        !          4401:     XYabcdY
        !          4402: 
        !          4403: /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
        !          4404:     XYabcdY
        !          4405: 
        !          4406: /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
        !          4407:     XYabcdY
        !          4408: 
        !          4409: /(?'abc'\w+):\k<abc>{2}/
        !          4410:     a:aaxyz
        !          4411:     ab:ababxyz
        !          4412:     ** Failers
        !          4413:     a:axyz
        !          4414:     ab:abxyz
        !          4415: 
        !          4416: /(?'abc'\w+):\g{abc}{2}/
        !          4417:     a:aaxyz
        !          4418:     ab:ababxyz
        !          4419:     ** Failers
        !          4420:     a:axyz
        !          4421:     ab:abxyz
        !          4422: 
        !          4423: /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
        !          4424:     abd
        !          4425:     ce
        !          4426: 
        !          4427: /^(a.)\g-1Z/
        !          4428:     aXaXZ
        !          4429: 
        !          4430: /^(a.)\g{-1}Z/
        !          4431:     aXaXZ
        !          4432: 
        !          4433: /^(?(DEFINE) (?<A> a) (?<B> b) )  (?&A) (?&B) /x
        !          4434:     abcd
        !          4435: 
        !          4436: /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
        !          4437:   (?(DEFINE)
        !          4438:   (?<NAME_PAT>[a-z]+)
        !          4439:   (?<ADDRESS_PAT>\d+)
        !          4440:   )/x
        !          4441:     metcalfe 33
        !          4442: 
        !          4443: /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
        !          4444:     1.2.3.4
        !          4445:     131.111.10.206
        !          4446:     10.0.0.0
        !          4447:     ** Failers
        !          4448:     10.6
        !          4449:     455.3.4.5
        !          4450: 
        !          4451: /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
        !          4452:     1.2.3.4
        !          4453:     131.111.10.206
        !          4454:     10.0.0.0
        !          4455:     ** Failers
        !          4456:     10.6
        !          4457:     455.3.4.5
        !          4458: 
        !          4459: /^(\w++|\s++)*$/
        !          4460:     now is the time for all good men to come to the aid of the party
        !          4461:     *** Failers
        !          4462:     this is not a line with only words and spaces!
        !          4463: 
        !          4464: /(\d++)(\w)/
        !          4465:     12345a
        !          4466:     *** Failers
        !          4467:     12345+
        !          4468: 
        !          4469: /a++b/
        !          4470:     aaab
        !          4471: 
        !          4472: /(a++b)/
        !          4473:     aaab
        !          4474: 
        !          4475: /(a++)b/
        !          4476:     aaab
        !          4477: 
        !          4478: /([^()]++|\([^()]*\))+/
        !          4479:     ((abc(ade)ufh()()x
        !          4480: 
        !          4481: /\(([^()]++|\([^()]+\))+\)/
        !          4482:     (abc)
        !          4483:     (abc(def)xyz)
        !          4484:     *** Failers
        !          4485:     ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
        !          4486: 
        !          4487: /^([^()]|\((?1)*\))*$/
        !          4488:     abc
        !          4489:     a(b)c
        !          4490:     a(b(c))d
        !          4491:     *** Failers)
        !          4492:     a(b(c)d
        !          4493: 
        !          4494: /^>abc>([^()]|\((?1)*\))*<xyz<$/
        !          4495:    >abc>123<xyz<
        !          4496:    >abc>1(2)3<xyz<
        !          4497:    >abc>(1(2)3)<xyz<
        !          4498: 
        !          4499: /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
        !          4500:     1221
        !          4501:     Satanoscillatemymetallicsonatas
        !          4502:     AmanaplanacanalPanama
        !          4503:     AblewasIereIsawElba
        !          4504:     *** Failers
        !          4505:     Thequickbrownfox
        !          4506: 
        !          4507: /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
        !          4508:     12
        !          4509:     (((2+2)*-3)-7)
        !          4510:     -12
        !          4511:     *** Failers
        !          4512:     ((2+2)*-3)-7)
        !          4513: 
        !          4514: /^(x(y|(?1){2})z)/
        !          4515:     xyz
        !          4516:     xxyzxyzz
        !          4517:     *** Failers
        !          4518:     xxyzz
        !          4519:     xxyzxyzxyzz
        !          4520: 
        !          4521: /((< (?: (?(R) \d++  | [^<>]*+) | (?2)) * >))/x
        !          4522:     <>
        !          4523:     <abcd>
        !          4524:     <abc <123> hij>
        !          4525:     <abc <def> hij>
        !          4526:     <abc<>def>
        !          4527:     <abc<>
        !          4528:     *** Failers
        !          4529:     <abc
        !          4530: 
        !          4531: /^a+(*FAIL)/
        !          4532:     aaaaaa
        !          4533:     
        !          4534: /a+b?c+(*FAIL)/
        !          4535:     aaabccc
        !          4536: 
        !          4537: /a+b?(*PRUNE)c+(*FAIL)/
        !          4538:     aaabccc
        !          4539: 
        !          4540: /a+b?(*COMMIT)c+(*FAIL)/
        !          4541:     aaabccc
        !          4542:     
        !          4543: /a+b?(*SKIP)c+(*FAIL)/
        !          4544:     aaabcccaaabccc
        !          4545: 
        !          4546: /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
        !          4547:     aaaxxxxxx
        !          4548:     aaa++++++ 
        !          4549:     bbbxxxxx
        !          4550:     bbb+++++ 
        !          4551:     cccxxxx
        !          4552:     ccc++++ 
        !          4553:     dddddddd   
        !          4554: 
        !          4555: /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
        !          4556:     aaaxxxxxx
        !          4557:     aaa++++++ 
        !          4558:     bbbxxxxx
        !          4559:     bbb+++++ 
        !          4560:     cccxxxx
        !          4561:     ccc++++ 
        !          4562:     dddddddd   
        !          4563: 
        !          4564: /a+b?(*THEN)c+(*FAIL)/
        !          4565:     aaabccc
        !          4566: 
        !          4567: /(A (A|B(*ACCEPT)|C) D)(E)/x
        !          4568:     AB
        !          4569:     ABX
        !          4570:     AADE
        !          4571:     ACDE
        !          4572:     ** Failers
        !          4573:     AD 
        !          4574:         
        !          4575: /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
        !          4576:     1221
        !          4577:     Satan, oscillate my metallic sonatas!
        !          4578:     A man, a plan, a canal: Panama!
        !          4579:     Able was I ere I saw Elba.
        !          4580:     *** Failers
        !          4581:     The quick brown fox
        !          4582: 
        !          4583: /^((.)(?1)\2|.)$/
        !          4584:     a
        !          4585:     aba
        !          4586:     aabaa  
        !          4587:     abcdcba 
        !          4588:     pqaabaaqp  
        !          4589:     ablewasiereisawelba
        !          4590:     rhubarb
        !          4591:     the quick brown fox  
        !          4592: 
        !          4593: /(a)(?<=b(?1))/
        !          4594:     baz
        !          4595:     ** Failers
        !          4596:     caz  
        !          4597:     
        !          4598: /(?<=b(?1))(a)/
        !          4599:     zbaaz
        !          4600:     ** Failers
        !          4601:     aaa  
        !          4602:     
        !          4603: /(?<X>a)(?<=b(?&X))/
        !          4604:     baz
        !          4605: 
        !          4606: /^(?|(abc)|(def))\1/
        !          4607:     abcabc
        !          4608:     defdef 
        !          4609:     ** Failers
        !          4610:     abcdef
        !          4611:     defabc   
        !          4612:     
        !          4613: /^(?|(abc)|(def))(?1)/
        !          4614:     abcabc
        !          4615:     defabc
        !          4616:     ** Failers
        !          4617:     defdef
        !          4618:     abcdef    
        !          4619: 
        !          4620: /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
        !          4621:     a\"aaaaa
        !          4622:     b\"aaaaa 
        !          4623:     ** Failers 
        !          4624:     b\"11111
        !          4625: 
        !          4626: /(?:(?1)|B)(A(*F)|C)/
        !          4627:     ABCD
        !          4628:     CCD
        !          4629:     ** Failers
        !          4630:     CAD   
        !          4631: 
        !          4632: /^(?:(?1)|B)(A(*F)|C)/
        !          4633:     CCD
        !          4634:     BCD 
        !          4635:     ** Failers
        !          4636:     ABCD
        !          4637:     CAD
        !          4638:     BAD    
        !          4639: 
        !          4640: /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
        !          4641:     AAD
        !          4642:     ACD
        !          4643:     BAD
        !          4644:     BCD
        !          4645:     BAX  
        !          4646:     ** Failers
        !          4647:     ACX
        !          4648:     ABC   
        !          4649: 
        !          4650: /(?(DEFINE)(A))B(?1)C/
        !          4651:     BAC
        !          4652: 
        !          4653: /(?(DEFINE)((A)\2))B(?1)C/
        !          4654:     BAAC
        !          4655: 
        !          4656: /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
        !          4657:     (ab(cd)ef)
        !          4658: 
        !          4659: /^(?!a(*SKIP)b)/
        !          4660:     ac
        !          4661:     
        !          4662: /^(?=a(*SKIP)b|ac)/
        !          4663:     ** Failers
        !          4664:     ac
        !          4665:     
        !          4666: /^(?=a(*THEN)b|ac)/
        !          4667:     ac
        !          4668:     
        !          4669: /^(?=a(*PRUNE)b)/
        !          4670:     ab  
        !          4671:     ** Failers 
        !          4672:     ac
        !          4673: 
        !          4674: /^(?=a(*ACCEPT)b)/
        !          4675:     ac
        !          4676: 
        !          4677: /^(?(?!a(*SKIP)b))/
        !          4678:     ac
        !          4679: 
        !          4680: /(?>a\Kb)/
        !          4681:     ab
        !          4682: 
        !          4683: /((?>a\Kb))/
        !          4684:     ab
        !          4685: 
        !          4686: /(a\Kb)/
        !          4687:     ab
        !          4688:     
        !          4689: /^a\Kcz|ac/
        !          4690:     ac
        !          4691:     
        !          4692: /(?>a\Kbz|ab)/
        !          4693:     ab 
        !          4694: 
        !          4695: /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
        !          4696:     ab
        !          4697: 
        !          4698: /^([^()]|\((?1)*\))*$/
        !          4699:     a(b)c
        !          4700:     a(b(c)d)e 
        !          4701: 
        !          4702: /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
        !          4703:     0
        !          4704:     00
        !          4705:     0000  
        !          4706: 
        !          4707: /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
        !          4708:     0
        !          4709:     00
        !          4710:     0000  
        !          4711: 
        !          4712: /--- This one does fail, as expected, in Perl. It needs the complex item at the
        !          4713:      end of the pattern. A single letter instead of (B|D) makes it not fail,
        !          4714:      which I think is a Perl bug. --- /
        !          4715: 
        !          4716: /A(*COMMIT)(B|D)/
        !          4717:     ACABX
        !          4718: 
        !          4719: /--- Check the use of names for failure ---/
        !          4720: 
        !          4721: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
        !          4722:     ** Failers
        !          4723:     AC
        !          4724:     CB    
        !          4725:     
        !          4726: /--- Force no study, otherwise mark is not seen. The studied version is in
        !          4727:      test 2 because it isn't Perl-compatible. ---/
        !          4728: 
        !          4729: /(*MARK:A)(*SKIP:B)(C|X)/KSS
        !          4730:     C
        !          4731:     D
        !          4732:      
        !          4733: /^(A(*THEN:A)B|C(*THEN:B)D)/K
        !          4734:     ** Failers
        !          4735:     CB    
        !          4736: 
        !          4737: /^(?:A(*THEN:A)B|C(*THEN:B)D)/K
        !          4738:     CB    
        !          4739:     
        !          4740: /^(?>A(*THEN:A)B|C(*THEN:B)D)/K
        !          4741:     CB    
        !          4742:     
        !          4743: /--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
        !          4744: that we have to have something complicated such as (B|Z) at the end because,
        !          4745: for Perl, a simple character somehow causes an unwanted optimization to mess
        !          4746: with the handling of backtracking verbs. ---/
        !          4747: 
        !          4748: /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
        !          4749:     AAAC
        !          4750:     
        !          4751: /--- Test skipping over a non-matching mark. ---/
        !          4752: 
        !          4753: /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
        !          4754:     AAAC
        !          4755:     
        !          4756: /--- Check shorthand for MARK ---/
        !          4757: 
        !          4758: /A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
        !          4759:     AAAC
        !          4760: 
        !          4761: /--- Don't loop! Force no study, otherwise mark is not seen. ---/
        !          4762: 
        !          4763: /(*:A)A+(*SKIP:A)(B|Z)/KSS
        !          4764:     AAAC
        !          4765: 
        !          4766: /--- This should succeed, as a non-existent skip name disables the skip ---/ 
        !          4767: 
        !          4768: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
        !          4769:     AAAC
        !          4770: 
        !          4771: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
        !          4772:     AAAC
        !          4773: 
        !          4774: /--- COMMIT at the start of a pattern should act like an anchor. Again, 
        !          4775: however, we need the complication for Perl. ---/
        !          4776: 
        !          4777: /(*COMMIT)(A|P)(B|P)(C|P)/
        !          4778:     ABCDEFG
        !          4779:     ** Failers
        !          4780:     DEFGABC  
        !          4781: 
        !          4782: /--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
        !          4783: 
        !          4784: /(\w+)(?>b(*COMMIT))\w{2}/
        !          4785:     abbb
        !          4786: 
        !          4787: /(\w+)b(*COMMIT)\w{2}/
        !          4788:     abbb
        !          4789: 
        !          4790: /--- Check opening parens in comment when seeking forward reference. ---/ 
        !          4791: 
        !          4792: /(?&t)(?#()(?(DEFINE)(?<t>a))/
        !          4793:     bac
        !          4794: 
        !          4795: /--- COMMIT should override THEN ---/
        !          4796: 
        !          4797: /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
        !          4798:   yes
        !          4799: 
        !          4800: /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
        !          4801:   yes
        !          4802: 
        !          4803: /b?(*SKIP)c/
        !          4804:     bc
        !          4805:     abc
        !          4806:    
        !          4807: /(*SKIP)bc/
        !          4808:     a
        !          4809: 
        !          4810: /(*SKIP)b/
        !          4811:     a 
        !          4812: 
        !          4813: /(?P<abn>(?P=abn)xxx|)+/
        !          4814:     xxx
        !          4815: 
        !          4816: /(?i:([^b]))(?1)/
        !          4817:     aa
        !          4818:     aA     
        !          4819:     ** Failers
        !          4820:     ab
        !          4821:     aB
        !          4822:     Ba
        !          4823:     ba
        !          4824: 
        !          4825: /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
        !          4826:     aaaaaaX
        !          4827:     ** Failers 
        !          4828:     aaaaaa 
        !          4829: 
        !          4830: /^(?&t)*(?(DEFINE)(?<t>a))\w$/
        !          4831:     aaaaaaX
        !          4832:     aaaaaa 
        !          4833: 
        !          4834: /^(a)*+(\w)/
        !          4835:     aaaaX
        !          4836:     YZ 
        !          4837:     ** Failers 
        !          4838:     aaaa
        !          4839: 
        !          4840: /^(?:a)*+(\w)/
        !          4841:     aaaaX
        !          4842:     YZ 
        !          4843:     ** Failers 
        !          4844:     aaaa
        !          4845: 
        !          4846: /^(a)++(\w)/
        !          4847:     aaaaX
        !          4848:     ** Failers 
        !          4849:     aaaa
        !          4850:     YZ 
        !          4851: 
        !          4852: /^(?:a)++(\w)/
        !          4853:     aaaaX
        !          4854:     ** Failers 
        !          4855:     aaaa
        !          4856:     YZ 
        !          4857: 
        !          4858: /^(a)?+(\w)/
        !          4859:     aaaaX
        !          4860:     YZ 
        !          4861: 
        !          4862: /^(?:a)?+(\w)/
        !          4863:     aaaaX
        !          4864:     YZ 
        !          4865: 
        !          4866: /^(a){2,}+(\w)/
        !          4867:     aaaaX
        !          4868:     ** Failers
        !          4869:     aaa
        !          4870:     YZ 
        !          4871: 
        !          4872: /^(?:a){2,}+(\w)/
        !          4873:     aaaaX
        !          4874:     ** Failers
        !          4875:     aaa
        !          4876:     YZ 
        !          4877: 
        !          4878: /(a|)*(?1)b/
        !          4879:     b
        !          4880:     ab
        !          4881:     aab  
        !          4882: 
        !          4883: /(a)++(?1)b/
        !          4884:     ** Failers
        !          4885:     ab 
        !          4886:     aab
        !          4887: 
        !          4888: /(a)*+(?1)b/
        !          4889:     ** Failers
        !          4890:     ab
        !          4891:     aab  
        !          4892: 
        !          4893: /(?1)(?:(b)){0}/
        !          4894:     b
        !          4895: 
        !          4896: /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
        !          4897:     foo(bar(baz)+baz(bop))
        !          4898: 
        !          4899: /(A (A|B(*ACCEPT)|C) D)(E)/x
        !          4900:     AB
        !          4901: 
        !          4902: /\A.*?(?:a|b(*THEN)c)/
        !          4903:     ba
        !          4904: 
        !          4905: /\A.*?(?:a|bc)/
        !          4906:     ba
        !          4907: 
        !          4908: /\A.*?(a|b(*THEN)c)/
        !          4909:     ba
        !          4910: 
        !          4911: /\A.*?(a|bc)/
        !          4912:     ba
        !          4913: 
        !          4914: /\A.*?(?:a|b(*THEN)c)++/
        !          4915:     ba
        !          4916: 
        !          4917: /\A.*?(?:a|bc)++/
        !          4918:     ba
        !          4919: 
        !          4920: /\A.*?(a|b(*THEN)c)++/
        !          4921:     ba
        !          4922: 
        !          4923: /\A.*?(a|bc)++/
        !          4924:     ba
        !          4925: 
        !          4926: /\A.*?(?:a|b(*THEN)c|d)/
        !          4927:     ba
        !          4928: 
        !          4929: /\A.*?(?:a|bc|d)/
        !          4930:     ba
        !          4931: 
        !          4932: /(?:(b))++/
        !          4933:     beetle
        !          4934: 
        !          4935: /(?(?=(a(*ACCEPT)z))a)/
        !          4936:     a
        !          4937: 
        !          4938: /^(a)(?1)+ab/
        !          4939:     aaaab
        !          4940:     
        !          4941: /^(a)(?1)++ab/
        !          4942:     aaaab
        !          4943: 
        !          4944: /^(?=a(*:M))aZ/K
        !          4945:     aZbc
        !          4946: 
        !          4947: /^(?!(*:M)b)aZ/K
        !          4948:     aZbc
        !          4949: 
        !          4950: /(?(DEFINE)(a))?b(?1)/
        !          4951:     backgammon
        !          4952: 
        !          4953: /^\N+/
        !          4954:     abc\ndef
        !          4955:     
        !          4956: /^\N{1,}/
        !          4957:     abc\ndef 
        !          4958: 
        !          4959: /(?(R)a+|(?R)b)/
        !          4960:     aaaabcde
        !          4961: 
        !          4962: /(?(R)a+|((?R))b)/
        !          4963:     aaaabcde
        !          4964: 
        !          4965: /((?(R)a+|(?1)b))/
        !          4966:     aaaabcde
        !          4967: 
        !          4968: /((?(R1)a+|(?1)b))/
        !          4969:     aaaabcde
        !          4970: 
        !          4971: /a(*:any 
        !          4972: name)/K
        !          4973:     abc
        !          4974:     
        !          4975: /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
        !          4976:     a
        !          4977:     ba
        !          4978:     bba 
        !          4979:     
        !          4980: /--- Checking revised (*THEN) handling ---/ 
        !          4981: 
        !          4982: /--- Capture ---/
        !          4983: 
        !          4984: /^.*? (a(*THEN)b) c/x
        !          4985:     aabc
        !          4986: 
        !          4987: /^.*? (a(*THEN)b|(*F)) c/x
        !          4988:     aabc
        !          4989: 
        !          4990: /^.*? ( (a(*THEN)b) | (*F) ) c/x
        !          4991:     aabc
        !          4992: 
        !          4993: /^.*? ( (a(*THEN)b) ) c/x
        !          4994:     aabc
        !          4995: 
        !          4996: /--- Non-capture ---/
        !          4997: 
        !          4998: /^.*? (?:a(*THEN)b) c/x
        !          4999:     aabc
        !          5000: 
        !          5001: /^.*? (?:a(*THEN)b|(*F)) c/x
        !          5002:     aabc
        !          5003: 
        !          5004: /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
        !          5005:     aabc
        !          5006: 
        !          5007: /^.*? (?: (?:a(*THEN)b) ) c/x
        !          5008:     aabc
        !          5009: 
        !          5010: /--- Atomic ---/
        !          5011: 
        !          5012: /^.*? (?>a(*THEN)b) c/x
        !          5013:     aabc
        !          5014: 
        !          5015: /^.*? (?>a(*THEN)b|(*F)) c/x
        !          5016:     aabc
        !          5017: 
        !          5018: /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
        !          5019:     aabc
        !          5020: 
        !          5021: /^.*? (?> (?>a(*THEN)b) ) c/x
        !          5022:     aabc
        !          5023: 
        !          5024: /--- Possessive capture ---/
        !          5025: 
        !          5026: /^.*? (a(*THEN)b)++ c/x
        !          5027:     aabc
        !          5028: 
        !          5029: /^.*? (a(*THEN)b|(*F))++ c/x
        !          5030:     aabc
        !          5031: 
        !          5032: /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
        !          5033:     aabc
        !          5034: 
        !          5035: /^.*? ( (a(*THEN)b)++ )++ c/x
        !          5036:     aabc
        !          5037: 
        !          5038: /--- Possessive non-capture ---/
        !          5039: 
        !          5040: /^.*? (?:a(*THEN)b)++ c/x
        !          5041:     aabc
        !          5042: 
        !          5043: /^.*? (?:a(*THEN)b|(*F))++ c/x
        !          5044:     aabc
        !          5045: 
        !          5046: /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
        !          5047:     aabc
        !          5048: 
        !          5049: /^.*? (?: (?:a(*THEN)b)++ )++ c/x
        !          5050:     aabc
        !          5051:     
        !          5052: /--- Condition assertion ---/
        !          5053: 
        !          5054: /^(?(?=a(*THEN)b)ab|ac)/
        !          5055:     ac
        !          5056:  
        !          5057: /--- Condition ---/
        !          5058: 
        !          5059: /^.*?(?(?=a)a|b(*THEN)c)/
        !          5060:     ba
        !          5061: 
        !          5062: /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
        !          5063:     ba
        !          5064: 
        !          5065: /^.*?(?(?=a)a(*THEN)b|c)/
        !          5066:     ac
        !          5067: 
        !          5068: /--- Assertion ---/
        !          5069: 
        !          5070: /^.*(?=a(*THEN)b)/ 
        !          5071:     aabc
        !          5072: 
        !          5073: /------------------------------/
        !          5074: 
        !          5075: /(?>a(*:m))/imsxSK 
        !          5076:     a
        !          5077: 
        !          5078: /(?>(a)(*:m))/imsxSK 
        !          5079:     a
        !          5080: 
        !          5081: /(?<=a(*ACCEPT)b)c/
        !          5082:     xacd
        !          5083: 
        !          5084: /(?<=(a(*ACCEPT)b))c/
        !          5085:     xacd
        !          5086: 
        !          5087: /(?<=(a(*COMMIT)b))c/
        !          5088:     xabcd
        !          5089:     ** Failers 
        !          5090:     xacd
        !          5091:     
        !          5092: /(?<!a(*FAIL)b)c/
        !          5093:     xcd
        !          5094:     acd 
        !          5095: 
        !          5096: /(?<=a(*:N)b)c/K
        !          5097:     xabcd
        !          5098:     
        !          5099: /(?<=a(*PRUNE)b)c/
        !          5100:     xabcd 
        !          5101: 
        !          5102: /(?<=a(*SKIP)b)c/
        !          5103:     xabcd 
        !          5104: 
        !          5105: /(?<=a(*THEN)b)c/
        !          5106:     xabcd 
        !          5107: 
        !          5108: /(a)(?2){2}(.)/
        !          5109:     abcd
        !          5110: 
        !          5111: /(*MARK:A)(*PRUNE:B)(C|X)/KS
        !          5112:     C
        !          5113:     D 
        !          5114: 
        !          5115: /(*MARK:A)(*PRUNE:B)(C|X)/KSS
        !          5116:     C
        !          5117:     D 
        !          5118: 
        !          5119: /(*MARK:A)(*THEN:B)(C|X)/KS
        !          5120:     C
        !          5121:     D 
        !          5122: 
        !          5123: /(*MARK:A)(*THEN:B)(C|X)/KSY
        !          5124:     C
        !          5125:     D 
        !          5126: 
        !          5127: /(*MARK:A)(*THEN:B)(C|X)/KSS
        !          5128:     C
        !          5129:     D 
        !          5130: 
        !          5131: /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
        !          5132: 
        !          5133: /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
        !          5134:     AAAC
        !          5135: 
        !          5136: /--- Same --/
        !          5137: 
        !          5138: /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
        !          5139:     AAAC
        !          5140: 
        !          5141: /A(*:A)A+(*SKIP)(B|Z) | AC/xK
        !          5142:     AAAC
        !          5143: 
        !          5144: /--- This should fail, as a null name is the same as no name ---/
        !          5145: 
        !          5146: /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
        !          5147:     AAAC
        !          5148: 
        !          5149: /--- A check on what happens after hitting a mark and them bumping along to
        !          5150: something that does not even start. Perl reports tags after the failures here, 
        !          5151: though it does not when the individual letters are made into something 
        !          5152: more complicated. ---/
        !          5153: 
        !          5154: /A(*:A)B|XX(*:B)Y/K
        !          5155:     AABC
        !          5156:     XXYZ 
        !          5157:     ** Failers
        !          5158:     XAQQ  
        !          5159:     XAQQXZZ  
        !          5160:     AXQQQ 
        !          5161:     AXXQQQ 
        !          5162:     
        !          5163: /^(A(*THEN:A)B|C(*THEN:B)D)/K
        !          5164:     AB
        !          5165:     CD
        !          5166:     ** Failers
        !          5167:     AC
        !          5168:     CB    
        !          5169:     
        !          5170: /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
        !          5171:     AB
        !          5172:     CD
        !          5173:     ** Failers
        !          5174:     AC
        !          5175:     CB    
        !          5176:     
        !          5177: /--- An empty name does not pass back an empty string. It is the same as if no
        !          5178: name were given. ---/ 
        !          5179: 
        !          5180: /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
        !          5181:     AB
        !          5182:     CD 
        !          5183: 
        !          5184: /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
        !          5185:     
        !          5186: /A(*PRUNE:A)B/K
        !          5187:     ACAB
        !          5188: 
        !          5189: /--- Mark names can be duplicated ---/
        !          5190: 
        !          5191: /A(*:A)B|X(*:A)Y/K
        !          5192:     AABC
        !          5193:     XXYZ 
        !          5194:     
        !          5195: /b(*:m)f|a(*:n)w/K
        !          5196:     aw 
        !          5197:     ** Failers 
        !          5198:     abc
        !          5199: 
        !          5200: /b(*:m)f|aw/K
        !          5201:     abaw
        !          5202:     ** Failers 
        !          5203:     abc
        !          5204:     abax 
        !          5205: 
        !          5206: /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
        !          5207:     AAAC
        !          5208: 
        !          5209: /a(*PRUNE:X)bc|qq/KY
        !          5210:     ** Failers
        !          5211:     axy
        !          5212: 
        !          5213: /a(*THEN:X)bc|qq/KY
        !          5214:     ** Failers
        !          5215:     axy
        !          5216: 
        !          5217: /(?=a(*MARK:A)b)..x/K
        !          5218:     abxy
        !          5219:     ** Failers
        !          5220:     abpq  
        !          5221: 
        !          5222: /(?=a(*MARK:A)b)..(*:Y)x/K
        !          5223:     abxy
        !          5224:     ** Failers
        !          5225:     abpq  
        !          5226: 
        !          5227: /(?=a(*PRUNE:A)b)..x/K
        !          5228:     abxy
        !          5229:     ** Failers
        !          5230:     abpq  
        !          5231: 
        !          5232: /(?=a(*PRUNE:A)b)..(*:Y)x/K
        !          5233:     abxy
        !          5234:     ** Failers
        !          5235:     abpq  
        !          5236: 
        !          5237: /(?=a(*THEN:A)b)..x/K
        !          5238:     abxy
        !          5239:     ** Failers
        !          5240:     abpq  
        !          5241: 
        !          5242: /(?=a(*THEN:A)b)..(*:Y)x/K
        !          5243:     abxy
        !          5244:     ** Failers
        !          5245:     abpq  
        !          5246: 
        !          5247: /(another)?(\1?)test/
        !          5248:     hello world test
        !          5249: 
        !          5250: /(another)?(\1+)test/
        !          5251:     hello world test
        !          5252: 
1.1       misho    5253: /-- End of testinput1 --/

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>