File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pcre / testdata / testinput1
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:05:52 2012 UTC (12 years, 5 months ago) by misho
Branches: pcre, MAIN
CVS tags: v8_21, HEAD
pcre

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

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