Annotation of embedaddon/php/ext/ereg/regex/tests, revision 1.1

1.1     ! misho       1: # regular expression test set
        !             2: # Lines are at least three fields, separated by one or more tabs.  "" stands
        !             3: # for an empty field.  First field is an RE.  Second field is flags.  If
        !             4: # C flag given, regcomp() is expected to fail, and the third field is the
        !             5: # error name (minus the leading REG_).
        !             6: #
        !             7: # Otherwise it is expected to succeed, and the third field is the string to
        !             8: # try matching it against.  If there is no fourth field, the match is
        !             9: # expected to fail.  If there is a fourth field, it is the substring that
        !            10: # the RE is expected to match.  If there is a fifth field, it is a comma-
        !            11: # separated list of what the subexpressions should match, with - indicating
        !            12: # no match for that one.  In both the fourth and fifth fields, a (sub)field
        !            13: # starting with @ indicates that the (sub)expression is expected to match
        !            14: # a null string followed by the stuff after the @; this provides a way to
        !            15: # test where null strings match.  The character `N' in REs and strings
        !            16: # is newline, `S' is space, `T' is tab, `Z' is NUL.
        !            17: #
        !            18: # The full list of flags:
        !            19: #      -       placeholder, does nothing
        !            20: #      b       RE is a BRE, not an ERE
        !            21: #      &       try it as both an ERE and a BRE
        !            22: #      C       regcomp() error expected, third field is error name
        !            23: #      i       REG_ICASE
        !            24: #      m       ("mundane") REG_NOSPEC
        !            25: #      s       REG_NOSUB (not really testable)
        !            26: #      n       REG_NEWLINE
        !            27: #      ^       REG_NOTBOL
        !            28: #      $       REG_NOTEOL
        !            29: #      #       REG_STARTEND (see below)
        !            30: #      p       REG_PEND
        !            31: #
        !            32: # For REG_STARTEND, the start/end offsets are those of the substring
        !            33: # enclosed in ().
        !            34: 
        !            35: # basics
        !            36: a              &       a       a
        !            37: abc            &       abc     abc
        !            38: abc|de         -       abc     abc
        !            39: a|b|c          -       abc     a
        !            40: 
        !            41: # parentheses and perversions thereof
        !            42: a(b)c          -       abc     abc
        !            43: a\(b\)c                b       abc     abc
        !            44: a(             C       EPAREN
        !            45: a(             b       a(      a(
        !            46: a\(            -       a(      a(
        !            47: a\(            bC      EPAREN
        !            48: a\(b           bC      EPAREN
        !            49: a(b            C       EPAREN
        !            50: a(b            b       a(b     a(b
        !            51: # gag me with a right parenthesis -- 1003.2 goofed here (my fault, partly)
        !            52: a)             -       a)      a)
        !            53: )              -       )       )
        !            54: # end gagging (in a just world, those *should* give EPAREN)
        !            55: a)             b       a)      a)
        !            56: a\)            bC      EPAREN
        !            57: \)             bC      EPAREN
        !            58: a()b           -       ab      ab
        !            59: a\(\)b         b       ab      ab
        !            60: 
        !            61: # anchoring and REG_NEWLINE
        !            62: ^abc$          &       abc     abc
        !            63: a^b            -       a^b
        !            64: a^b            b       a^b     a^b
        !            65: a$b            -       a$b
        !            66: a$b            b       a$b     a$b
        !            67: ^              &       abc     @abc
        !            68: $              &       abc     @
        !            69: ^$             &       ""      @
        !            70: $^             -       ""      @
        !            71: \($\)\(^\)     b       ""      @
        !            72: # stop retching, those are legitimate (although disgusting)
        !            73: ^^             -       ""      @
        !            74: $$             -       ""      @
        !            75: b$             &       abNc
        !            76: b$             &n      abNc    b
        !            77: ^b$            &       aNbNc
        !            78: ^b$            &n      aNbNc   b
        !            79: ^$             &n      aNNb    @Nb
        !            80: ^$             n       abc
        !            81: ^$             n       abcN    @
        !            82: $^             n       aNNb    @Nb
        !            83: \($\)\(^\)     bn      aNNb    @Nb
        !            84: ^^             n^      aNNb    @Nb
        !            85: $$             n       aNNb    @NN
        !            86: ^a             ^       a
        !            87: a$             $       a
        !            88: ^a             ^n      aNb
        !            89: ^b             ^n      aNb     b
        !            90: a$             $n      bNa
        !            91: b$             $n      bNa     b
        !            92: a*(^b$)c*      -       b       b
        !            93: a*\(^b$\)c*    b       b       b
        !            94: 
        !            95: # certain syntax errors and non-errors
        !            96: |              C       EMPTY
        !            97: |              b       |       |
        !            98: *              C       BADRPT
        !            99: *              b       *       *
        !           100: +              C       BADRPT
        !           101: ?              C       BADRPT
        !           102: ""             &C      EMPTY
        !           103: ()             -       abc     @abc
        !           104: \(\)           b       abc     @abc
        !           105: a||b           C       EMPTY
        !           106: |ab            C       EMPTY
        !           107: ab|            C       EMPTY
        !           108: (|a)b          C       EMPTY
        !           109: (a|)b          C       EMPTY
        !           110: (*a)           C       BADRPT
        !           111: (+a)           C       BADRPT
        !           112: (?a)           C       BADRPT
        !           113: ({1}a)         C       BADRPT
        !           114: \(\{1\}a\)     bC      BADRPT
        !           115: (a|*b)         C       BADRPT
        !           116: (a|+b)         C       BADRPT
        !           117: (a|?b)         C       BADRPT
        !           118: (a|{1}b)       C       BADRPT
        !           119: ^*             C       BADRPT
        !           120: ^*             b       *       *
        !           121: ^+             C       BADRPT
        !           122: ^?             C       BADRPT
        !           123: ^{1}           C       BADRPT
        !           124: ^\{1\}         bC      BADRPT
        !           125: 
        !           126: # metacharacters, backslashes
        !           127: a.c            &       abc     abc
        !           128: a[bc]d         &       abd     abd
        !           129: a\*c           &       a*c     a*c
        !           130: a\\b           &       a\b     a\b
        !           131: a\\\*b         &       a\*b    a\*b
        !           132: a\bc           &       abc     abc
        !           133: a\             &C      EESCAPE
        !           134: a\\bc          &       a\bc    a\bc
        !           135: \{             bC      BADRPT
        !           136: a\[b           &       a[b     a[b
        !           137: a[b            &C      EBRACK
        !           138: # trailing $ is a peculiar special case for the BRE code
        !           139: a$             &       a       a
        !           140: a$             &       a$
        !           141: a\$            &       a
        !           142: a\$            &       a$      a$
        !           143: a\\$           &       a
        !           144: a\\$           &       a$
        !           145: a\\$           &       a\$
        !           146: a\\$           &       a\      a\
        !           147: 
        !           148: # back references, ugh
        !           149: a\(b\)\2c      bC      ESUBREG
        !           150: a\(b\1\)c      bC      ESUBREG
        !           151: a\(b*\)c\1d    b       abbcbbd abbcbbd bb
        !           152: a\(b*\)c\1d    b       abbcbd
        !           153: a\(b*\)c\1d    b       abbcbbbd
        !           154: ^\(.\)\1       b       abc
        !           155: a\([bc]\)\1d   b       abcdabbd        abbd    b
        !           156: a\(\([bc]\)\2\)*d      b       abbccd  abbccd
        !           157: a\(\([bc]\)\2\)*d      b       abbcbd
        !           158: # actually, this next one probably ought to fail, but the spec is unclear
        !           159: a\(\(b\)*\2\)*d                b       abbbd   abbbd
        !           160: # here is a case that no NFA implementation does right
        !           161: \(ab*\)[ab]*\1 b       ababaaa ababaaa a
        !           162: # check out normal matching in the presence of back refs
        !           163: \(a\)\1bcd     b       aabcd   aabcd
        !           164: \(a\)\1bc*d    b       aabcd   aabcd
        !           165: \(a\)\1bc*d    b       aabd    aabd
        !           166: \(a\)\1bc*d    b       aabcccd aabcccd
        !           167: \(a\)\1bc*[ce]d        b       aabcccd aabcccd
        !           168: ^\(a\)\1b\(c\)*cd$     b       aabcccd aabcccd
        !           169: 
        !           170: # ordinary repetitions
        !           171: ab*c           &       abc     abc
        !           172: ab+c           -       abc     abc
        !           173: ab?c           -       abc     abc
        !           174: a\(*\)b                b       a*b     a*b
        !           175: a\(**\)b       b       ab      ab
        !           176: a\(***\)b      bC      BADRPT
        !           177: *a             b       *a      *a
        !           178: **a            b       a       a
        !           179: ***a           bC      BADRPT
        !           180: 
        !           181: # the dreaded bounded repetitions
        !           182: {              &       {       {
        !           183: {abc           &       {abc    {abc
        !           184: {1             C       BADRPT
        !           185: {1}            C       BADRPT
        !           186: a{b            &       a{b     a{b
        !           187: a{1}b          -       ab      ab
        !           188: a\{1\}b                b       ab      ab
        !           189: a{1,}b         -       ab      ab
        !           190: a\{1,\}b       b       ab      ab
        !           191: a{1,2}b                -       aab     aab
        !           192: a\{1,2\}b      b       aab     aab
        !           193: a{1            C       EBRACE
        !           194: a\{1           bC      EBRACE
        !           195: a{1a           C       EBRACE
        !           196: a\{1a          bC      EBRACE
        !           197: a{1a}          C       BADBR
        !           198: a\{1a\}                bC      BADBR
        !           199: a{,2}          -       a{,2}   a{,2}
        !           200: a\{,2\}                bC      BADBR
        !           201: a{,}           -       a{,}    a{,}
        !           202: a\{,\}         bC      BADBR
        !           203: a{1,x}         C       BADBR
        !           204: a\{1,x\}       bC      BADBR
        !           205: a{1,x          C       EBRACE
        !           206: a\{1,x         bC      EBRACE
        !           207: a{300}         C       BADBR
        !           208: a\{300\}       bC      BADBR
        !           209: a{1,0}         C       BADBR
        !           210: a\{1,0\}       bC      BADBR
        !           211: ab{0,0}c       -       abcac   ac
        !           212: ab\{0,0\}c     b       abcac   ac
        !           213: ab{0,1}c       -       abcac   abc
        !           214: ab\{0,1\}c     b       abcac   abc
        !           215: ab{0,3}c       -       abbcac  abbc
        !           216: ab\{0,3\}c     b       abbcac  abbc
        !           217: ab{1,1}c       -       acabc   abc
        !           218: ab\{1,1\}c     b       acabc   abc
        !           219: ab{1,3}c       -       acabc   abc
        !           220: ab\{1,3\}c     b       acabc   abc
        !           221: ab{2,2}c       -       abcabbc abbc
        !           222: ab\{2,2\}c     b       abcabbc abbc
        !           223: ab{2,4}c       -       abcabbc abbc
        !           224: ab\{2,4\}c     b       abcabbc abbc
        !           225: ((a{1,10}){1,10}){1,10}        -       a       a       a,a
        !           226: 
        !           227: # multiple repetitions
        !           228: a**            &C      BADRPT
        !           229: a++            C       BADRPT
        !           230: a??            C       BADRPT
        !           231: a*+            C       BADRPT
        !           232: a*?            C       BADRPT
        !           233: a+*            C       BADRPT
        !           234: a+?            C       BADRPT
        !           235: a?*            C       BADRPT
        !           236: a?+            C       BADRPT
        !           237: a{1}{1}                C       BADRPT
        !           238: a*{1}          C       BADRPT
        !           239: a+{1}          C       BADRPT
        !           240: a?{1}          C       BADRPT
        !           241: a{1}*          C       BADRPT
        !           242: a{1}+          C       BADRPT
        !           243: a{1}?          C       BADRPT
        !           244: a*{b}          -       a{b}    a{b}
        !           245: a\{1\}\{1\}    bC      BADRPT
        !           246: a*\{1\}                bC      BADRPT
        !           247: a\{1\}*                bC      BADRPT
        !           248: 
        !           249: # brackets, and numerous perversions thereof
        !           250: a[b]c          &       abc     abc
        !           251: a[ab]c         &       abc     abc
        !           252: a[^ab]c                &       adc     adc
        !           253: a[]b]c         &       a]c     a]c
        !           254: a[[b]c         &       a[c     a[c
        !           255: a[-b]c         &       a-c     a-c
        !           256: a[^]b]c                &       adc     adc
        !           257: a[^-b]c                &       adc     adc
        !           258: a[b-]c         &       a-c     a-c
        !           259: a[b            &C      EBRACK
        !           260: a[]            &C      EBRACK
        !           261: a[1-3]c                &       a2c     a2c
        !           262: a[3-1]c                &C      ERANGE
        !           263: a[1-3-5]c      &C      ERANGE
        !           264: a[[.-.]--]c    &       a-c     a-c
        !           265: a[1-           &C      ERANGE
        !           266: a[[.           &C      EBRACK
        !           267: a[[.x          &C      EBRACK
        !           268: a[[.x.         &C      EBRACK
        !           269: a[[.x.]                &C      EBRACK
        !           270: a[[.x.]]       &       ax      ax
        !           271: a[[.x,.]]      &C      ECOLLATE
        !           272: a[[.one.]]b    &       a1b     a1b
        !           273: a[[.notdef.]]b &C      ECOLLATE
        !           274: a[[.].]]b      &       a]b     a]b
        !           275: a[[:alpha:]]c  &       abc     abc
        !           276: a[[:notdef:]]c &C      ECTYPE
        !           277: a[[:           &C      EBRACK
        !           278: a[[:alpha      &C      EBRACK
        !           279: a[[:alpha:]    &C      EBRACK
        !           280: a[[:alpha,:]   &C      ECTYPE
        !           281: a[[:]:]]b      &C      ECTYPE
        !           282: a[[:-:]]b      &C      ECTYPE
        !           283: a[[:alph:]]    &C      ECTYPE
        !           284: a[[:alphabet:]]        &C      ECTYPE
        !           285: [[:alnum:]]+   -       -%@a0X- a0X
        !           286: [[:alpha:]]+   -       -%@aX0- aX
        !           287: [[:blank:]]+   -       aSSTb   SST
        !           288: [[:cntrl:]]+   -       aNTb    NT
        !           289: [[:digit:]]+   -       a019b   019
        !           290: [[:graph:]]+   -       Sa%bS   a%b
        !           291: [[:lower:]]+   -       AabC    ab
        !           292: [[:print:]]+   -       NaSbN   aSb
        !           293: [[:punct:]]+   -       S%-&T   %-&
        !           294: [[:space:]]+   -       aSNTb   SNT
        !           295: [[:upper:]]+   -       aBCd    BC
        !           296: [[:xdigit:]]+  -       p0f3Cq  0f3C
        !           297: a[[=b=]]c      &       abc     abc
        !           298: a[[=           &C      EBRACK
        !           299: a[[=b          &C      EBRACK
        !           300: a[[=b=         &C      EBRACK
        !           301: a[[=b=]                &C      EBRACK
        !           302: a[[=b,=]]      &C      ECOLLATE
        !           303: a[[=one=]]b    &       a1b     a1b
        !           304: 
        !           305: # complexities
        !           306: a(((b)))c      -       abc     abc
        !           307: a(b|(c))d      -       abd     abd
        !           308: a(b*|c)d       -       abbd    abbd
        !           309: # just gotta have one DFA-buster, of course
        !           310: a[ab]{20}      -       aaaaabaaaabaaaabaaaab   aaaaabaaaabaaaabaaaab
        !           311: # and an inline expansion in case somebody gets tricky
        !           312: a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]      -       aaaaabaaaabaaaabaaaab   aaaaabaaaabaaaabaaaab
        !           313: # and in case somebody just slips in an NFA...
        !           314: a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night)     -       aaaaabaaaabaaaabaaaabweeknights aaaaabaaaabaaaabaaaabweeknights
        !           315: # fish for anomalies as the number of states passes 32
        !           316: 12345678901234567890123456789  -       a12345678901234567890123456789b 12345678901234567890123456789
        !           317: 123456789012345678901234567890 -       a123456789012345678901234567890b        123456789012345678901234567890
        !           318: 1234567890123456789012345678901        -       a1234567890123456789012345678901b       1234567890123456789012345678901
        !           319: 12345678901234567890123456789012       -       a12345678901234567890123456789012b      12345678901234567890123456789012
        !           320: 123456789012345678901234567890123      -       a123456789012345678901234567890123b     123456789012345678901234567890123
        !           321: # and one really big one, beyond any plausible word width
        !           322: 1234567890123456789012345678901234567890123456789012345678901234567890 -       a1234567890123456789012345678901234567890123456789012345678901234567890b        1234567890123456789012345678901234567890123456789012345678901234567890
        !           323: # fish for problems as brackets go past 8
        !           324: [ab][cd][ef][gh][ij][kl][mn]   -       xacegikmoq      acegikm
        !           325: [ab][cd][ef][gh][ij][kl][mn][op]       -       xacegikmoq      acegikmo
        !           326: [ab][cd][ef][gh][ij][kl][mn][op][qr]   -       xacegikmoqy     acegikmoq
        !           327: [ab][cd][ef][gh][ij][kl][mn][op][q]    -       xacegikmoqy     acegikmoq
        !           328: 
        !           329: # subtleties of matching
        !           330: abc            &       xabcy   abc
        !           331: a\(b\)?c\1d    b       acd
        !           332: aBc            i       Abc     Abc
        !           333: a[Bc]*d                i       abBCcd  abBCcd
        !           334: 0[[:upper:]]1  &i      0a1     0a1
        !           335: 0[[:lower:]]1  &i      0A1     0A1
        !           336: a[^b]c         &i      abc
        !           337: a[^b]c         &i      aBc
        !           338: a[^b]c         &i      adc     adc
        !           339: [a]b[c]                -       abc     abc
        !           340: [a]b[a]                -       aba     aba
        !           341: [abc]b[abc]    -       abc     abc
        !           342: [abc]b[abd]    -       abd     abd
        !           343: a(b?c)+d       -       accd    accd
        !           344: (wee|week)(knights|night)      -       weeknights      weeknights
        !           345: (we|wee|week|frob)(knights|night|day)  -       weeknights      weeknights
        !           346: a[bc]d         -       xyzaaabcaababdacd       abd
        !           347: a[ab]c         -       aaabc   abc
        !           348: abc            s       abc     abc
        !           349: a*             &       b       @b
        !           350: 
        !           351: # Let's have some fun -- try to match a C comment.
        !           352: # first the obvious, which looks okay at first glance...
        !           353: /\*.*\*/       -       /*x*/   /*x*/
        !           354: # but...
        !           355: /\*.*\*/       -       /*x*/y/*z*/     /*x*/y/*z*/
        !           356: # okay, we must not match */ inside; try to do that...
        !           357: /\*([^*]|\*[^/])*\*/   -       /*x*/   /*x*/
        !           358: /\*([^*]|\*[^/])*\*/   -       /*x*/y/*z*/     /*x*/
        !           359: # but...
        !           360: /\*([^*]|\*[^/])*\*/   -       /*x**/y/*z*/    /*x**/y/*z*/
        !           361: # and a still fancier version, which does it right (I think)...
        !           362: /\*([^*]|\*+[^*/])*\*+/        -       /*x*/   /*x*/
        !           363: /\*([^*]|\*+[^*/])*\*+/        -       /*x*/y/*z*/     /*x*/
        !           364: /\*([^*]|\*+[^*/])*\*+/        -       /*x**/y/*z*/    /*x**/
        !           365: /\*([^*]|\*+[^*/])*\*+/        -       /*x****/y/*z*/  /*x****/
        !           366: /\*([^*]|\*+[^*/])*\*+/        -       /*x**x*/y/*z*/  /*x**x*/
        !           367: /\*([^*]|\*+[^*/])*\*+/        -       /*x***x/y/*z*/  /*x***x/y/*z*/
        !           368: 
        !           369: # subexpressions
        !           370: a(b)(c)d       -       abcd    abcd    b,c
        !           371: a(((b)))c      -       abc     abc     b,b,b
        !           372: a(b|(c))d      -       abd     abd     b,-
        !           373: a(b*|c|e)d     -       abbd    abbd    bb
        !           374: a(b*|c|e)d     -       acd     acd     c
        !           375: a(b*|c|e)d     -       ad      ad      @d
        !           376: a(b?)c         -       abc     abc     b
        !           377: a(b?)c         -       ac      ac      @c
        !           378: a(b+)c         -       abc     abc     b
        !           379: a(b+)c         -       abbbc   abbbc   bbb
        !           380: a(b*)c         -       ac      ac      @c
        !           381: (a|ab)(bc([de]+)f|cde) -       abcdef  abcdef  a,bcdef,de
        !           382: # the regression tester only asks for 9 subexpressions
        !           383: a(b)(c)(d)(e)(f)(g)(h)(i)(j)k  -       abcdefghijk     abcdefghijk     b,c,d,e,f,g,h,i,j
        !           384: a(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)l       -       abcdefghijkl    abcdefghijkl    b,c,d,e,f,g,h,i,j,k
        !           385: a([bc]?)c      -       abc     abc     b
        !           386: a([bc]?)c      -       ac      ac      @c
        !           387: a([bc]+)c      -       abc     abc     b
        !           388: a([bc]+)c      -       abcc    abcc    bc
        !           389: a([bc]+)bc     -       abcbc   abcbc   bc
        !           390: a(bb+|b)b      -       abb     abb     b
        !           391: a(bbb+|bb+|b)b -       abb     abb     b
        !           392: a(bbb+|bb+|b)b -       abbb    abbb    bb
        !           393: a(bbb+|bb+|b)bb        -       abbb    abbb    b
        !           394: (.*).*         -       abcdef  abcdef  abcdef
        !           395: (a*)*          -       bc      @b      @b
        !           396: 
        !           397: # do we get the right subexpression when it is used more than once?
        !           398: a(b|c)*d       -       ad      ad      -
        !           399: a(b|c)*d       -       abcd    abcd    c
        !           400: a(b|c)+d       -       abd     abd     b
        !           401: a(b|c)+d       -       abcd    abcd    c
        !           402: a(b|c?)+d      -       ad      ad      @d
        !           403: a(b|c?)+d      -       abcd    abcd    @d
        !           404: a(b|c){0,0}d   -       ad      ad      -
        !           405: a(b|c){0,1}d   -       ad      ad      -
        !           406: a(b|c){0,1}d   -       abd     abd     b
        !           407: a(b|c){0,2}d   -       ad      ad      -
        !           408: a(b|c){0,2}d   -       abcd    abcd    c
        !           409: a(b|c){0,}d    -       ad      ad      -
        !           410: a(b|c){0,}d    -       abcd    abcd    c
        !           411: a(b|c){1,1}d   -       abd     abd     b
        !           412: a(b|c){1,1}d   -       acd     acd     c
        !           413: a(b|c){1,2}d   -       abd     abd     b
        !           414: a(b|c){1,2}d   -       abcd    abcd    c
        !           415: a(b|c){1,}d    -       abd     abd     b
        !           416: a(b|c){1,}d    -       abcd    abcd    c
        !           417: a(b|c){2,2}d   -       acbd    acbd    b
        !           418: a(b|c){2,2}d   -       abcd    abcd    c
        !           419: a(b|c){2,4}d   -       abcd    abcd    c
        !           420: a(b|c){2,4}d   -       abcbd   abcbd   b
        !           421: a(b|c){2,4}d   -       abcbcd  abcbcd  c
        !           422: a(b|c){2,}d    -       abcd    abcd    c
        !           423: a(b|c){2,}d    -       abcbd   abcbd   b
        !           424: a(b+|((c)*))+d -       abd     abd     @d,@d,-
        !           425: a(b+|((c)*))+d -       abcd    abcd    @d,@d,-
        !           426: 
        !           427: # check out the STARTEND option
        !           428: [abc]          &#      a(b)c   b
        !           429: [abc]          &#      a(d)c
        !           430: [abc]          &#      a(bc)d  b
        !           431: [abc]          &#      a(dc)d  c
        !           432: .              &#      a()c
        !           433: b.*c           &#      b(bc)c  bc
        !           434: b.*            &#      b(bc)c  bc
        !           435: .*c            &#      b(bc)c  bc
        !           436: 
        !           437: # plain strings, with the NOSPEC flag
        !           438: abc            m       abc     abc
        !           439: abc            m       xabcy   abc
        !           440: abc            m       xyz
        !           441: a*b            m       aba*b   a*b
        !           442: a*b            m       ab
        !           443: ""             mC      EMPTY
        !           444: 
        !           445: # cases involving NULs
        !           446: aZb            &       a       a
        !           447: aZb            &p      a
        !           448: aZb            &p#     (aZb)   aZb
        !           449: aZ*b           &p#     (ab)    ab
        !           450: a.b            &#      (aZb)   aZb
        !           451: a.*            &#      (aZb)c  aZb
        !           452: 
        !           453: # word boundaries (ick)
        !           454: [[:<:]]a       &       a       a
        !           455: [[:<:]]a       &       ba
        !           456: [[:<:]]a       &       -a      a
        !           457: a[[:>:]]       &       a       a
        !           458: a[[:>:]]       &       ab
        !           459: a[[:>:]]       &       a-      a
        !           460: [[:<:]]a.c[[:>:]]      &       axcd-dayc-dazce-abc     abc
        !           461: [[:<:]]a.c[[:>:]]      &       axcd-dayc-dazce-abc-q   abc
        !           462: [[:<:]]a.c[[:>:]]      &       axc-dayc-dazce-abc      axc
        !           463: [[:<:]]b.c[[:>:]]      &       a_bxc-byc_d-bzc-q       bzc
        !           464: [[:<:]].x..[[:>:]]     &       y_xa_-_xb_y-_xc_-axdc   _xc_
        !           465: [[:<:]]a_b[[:>:]]      &       x_a_b
        !           466: 
        !           467: # past problems, and suspected problems
        !           468: (A[1])|(A[2])|(A[3])|(A[4])|(A[5])|(A[6])|(A[7])|(A[8])|(A[9])|(A[A])  -       A1      A1
        !           469: abcdefghijklmnop       i       abcdefghijklmnop        abcdefghijklmnop
        !           470: abcdefghijklmnopqrstuv i       abcdefghijklmnopqrstuv  abcdefghijklmnopqrstuv
        !           471: (ALAK)|(ALT[AB])|(CC[123]1)|(CM[123]1)|(GAMC)|(LC[23][EO ])|(SEM[1234])|(SL[ES][12])|(SLWW)|(SLF )|(SLDT)|(VWH[12])|(WH[34][EW])|(WP1[ESN])    -       CC11    CC11
        !           472: CC[13]1|a{21}[23][EO][123][Es][12]a{15}aa[34][EW]aaaaaaa[X]a   -       CC11    CC11
        !           473: Char \([a-z0-9_]*\)\[.*        b       Char xyz[k      Char xyz[k      xyz
        !           474: a?b    -       ab      ab
        !           475: -\{0,1\}[0-9]*$        b       -5      -5

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