File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / pcre / testdata / testinput1
Revision 1.1.1.5 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Sun Jun 15 19:46:06 2014 UTC (10 years ago) by misho
Branches: pcre, MAIN
CVS tags: v8_34, HEAD
pcre 8.34

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

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