(linenum→info "unix/slp.c:2238")

glibc/2.7/posix/BOOST.tests

    1: ; 
    2: ; 
    3: ; this file contains a script of tests to run through regress.exe
    4: ;
    5: ; comments start with a semicolon and proceed to the end of the line
    6: ;
    7: ; changes to regular expression compile flags start with a "-" as the first
    8: ; non-whitespace character and consist of a list of the printable names
    9: ; of the flags, for example "match_default"
   10: ;
   11: ; Other lines contain a test to perform using the current flag status
   12: ; the first token contains the expression to compile, the second the string
   13: ; to match it against. If the second string is "!" then the expression should
   14: ; not compile, that is the first string is an invalid regular expression.
   15: ; This is then followed by a list of integers that specify what should match,
   16: ; each pair represents the starting and ending positions of a subexpression
   17: ; starting with the zeroth subexpression (the whole match).
   18: ; A value of -1 indicates that the subexpression should not take part in the
   19: ; match at all, if the first value is -1 then no part of the expression should
   20: ; match the string.
   21: ;
   22: ; Tests taken from BOOST testsuite and adapted to glibc regex.
   23: ;
   24: ; Boost Software License - Version 1.0 - August 17th, 2003
   25: ;
   26: ; Permission is hereby granted, free of charge, to any person or organization
   27: ; obtaining a copy of the software and accompanying documentation covered by
   28: ; this license (the "Software") to use, reproduce, display, distribute,
   29: ; execute, and transmit the Software, and to prepare derivative works of the
   30: ; Software, and to permit third-parties to whom the Software is furnished to
   31: ; do so, all subject to the following:
   32: ;
   33: ; The copyright notices in the Software and this entire statement, including
   34: ; the above license grant, this restriction and the following disclaimer,
   35: ; must be included in all copies of the Software, in whole or in part, and
   36: ; all derivative works of the Software, unless such copies or derivative
   37: ; works are solely in the form of machine-executable object code generated by
   38: ; a source language processor.
   39: ;
   40: ; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   41: ; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   42: ; FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
   43: ; SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
   44: ; FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
   45: ; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
   46: ; DEALINGS IN THE SOFTWARE.
   47: ;
   48: 
   49: - match_default normal REG_EXTENDED
   50: 
   51: ;
   52: ; try some really simple literals:
   53: a a 0 1
   54: Z Z 0 1
   55: Z aaa -1 -1
   56: Z xxxxZZxxx 4 5
   57: 
   58: ; and some simple brackets:
   59: (a) zzzaazz 3 4 3 4
   60: () zzz 0 0 0 0
   61: () "" 0 0 0 0
   62: ( !
   63: ) ) 0 1
   64: (aa !
   65: aa) baa)b 1 4
   66: a b -1 -1
   67: \(\) () 0 2
   68: \(a\) (a) 0 3
   69: \() () 0 2
   70: (\) !
   71: p(a)rameter ABCparameterXYZ 3 12 4 5
   72: [pq](a)rameter ABCparameterXYZ 3 12 4 5
   73: 
   74: ; now try escaped brackets:
   75: - match_default bk_parens REG_BASIC
   76: \(a\) zzzaazz 3 4 3 4
   77: \(\) zzz 0 0 0 0
   78: \(\) "" 0 0 0 0
   79: \( !
   80: \) !
   81: \(aa !
   82: aa\) !
   83: () () 0 2
   84: (a) (a) 0 3
   85: (\) !
   86: \() !
   87: 
   88: ; now move on to "." wildcards
   89: - match_default normal REG_EXTENDED REG_STARTEND
   90: . a 0 1
   91: . \n 0 1
   92: . \r 0 1
   93: . \0 0 1
   94: 
   95: ;
   96: ; now move on to the repetion ops,
   97: ; starting with operator *
   98: - match_default normal REG_EXTENDED
   99: a* b 0 0
  100: ab* a 0 1
  101: ab* ab 0 2
  102: ab* sssabbbbbbsss 3 10
  103: ab*c* a 0 1
  104: ab*c* abbb 0 4
  105: ab*c* accc 0 4
  106: ab*c* abbcc 0 5
  107: *a !
  108: \<* !
  109: \>* !
  110: \n* \n\n 0 2
  111: \** ** 0 2
  112: \* * 0 1
  113: 
  114: ; now try operator +
  115: ab+ a -1 -1
  116: ab+ ab 0 2
  117: ab+ sssabbbbbbsss 3 10
  118: ab+c+ a -1 -1
  119: ab+c+ abbb -1 -1
  120: ab+c+ accc -1 -1
  121: ab+c+ abbcc 0 5
  122: +a !
  123: \<+ !
  124: \>+ !
  125: \n+ \n\n 0 2
  126: \+ + 0 1
  127: \+ ++ 0 1
  128: \++ ++ 0 2
  129: 
  130: ; now try operator ?
  131: - match_default normal REG_EXTENDED
  132: a? b 0 0
  133: ab? a 0 1
  134: ab? ab 0 2
  135: ab? sssabbbbbbsss 3 5
  136: ab?c? a 0 1
  137: ab?c? abbb 0 2
  138: ab?c? accc 0 2
  139: ab?c? abcc 0 3
  140: ?a !
  141: \<? !
  142: \>? !
  143: \n? \n\n 0 1
  144: \? ? 0 1
  145: \? ?? 0 1
  146: \?? ?? 0 1
  147: 
  148: ; now try operator {}
  149: - match_default normal REG_EXTENDED
  150: a{2} a -1 -1
  151: a{2} aa 0 2
  152: a{2} aaa 0 2
  153: a{2,} a -1 -1
  154: a{2,} aa 0 2
  155: a{2,} aaaaa 0 5
  156: a{2,4} a -1 -1
  157: a{2,4} aa 0 2
  158: a{2,4} aaa 0 3
  159: a{2,4} aaaa 0 4
  160: a{2,4} aaaaa 0 4
  161: a{} !
  162: a{2 !
  163: a} a} 0 2
  164: \{\} {} 0 2
  165: 
  166: - match_default normal REG_BASIC
  167: a\{2\} a -1 -1
  168: a\{2\} aa 0 2
  169: a\{2\} aaa 0 2
  170: a\{2,\} a -1 -1
  171: a\{2,\} aa 0 2
  172: a\{2,\} aaaaa 0 5
  173: a\{2,4\} a -1 -1
  174: a\{2,4\} aa 0 2
  175: a\{2,4\} aaa 0 3
  176: a\{2,4\} aaaa 0 4
  177: a\{2,4\} aaaaa 0 4
  178: {} {} 0 2
  179: 
  180: ; now test the alternation operator |
  181: - match_default normal REG_EXTENDED
  182: a|b a 0 1
  183: a|b b 0 1
  184: a(b|c) ab 0 2 1 2
  185: a(b|c) ac 0 2 1 2
  186: a(b|c) ad -1 -1 -1 -1
  187: a\| a| 0 2
  188: 
  189: ; now test the set operator []
  190: - match_default normal REG_EXTENDED
  191: ; try some literals first
  192: [abc] a 0 1
  193: [abc] b 0 1
  194: [abc] c 0 1
  195: [abc] d -1 -1
  196: [^bcd] a 0 1
  197: [^bcd] b -1 -1
  198: [^bcd] d -1 -1
  199: [^bcd] e 0 1
  200: a[b]c abc 0 3
  201: a[ab]c abc 0 3
  202: a[^ab]c adc 0 3
  203: a[]b]c a]c 0 3
  204: a[[b]c a[c 0 3
  205: a[-b]c a-c 0 3
  206: a[^]b]c adc 0 3
  207: a[^-b]c adc 0 3
  208: a[b-]c a-c 0 3
  209: a[b !
  210: a[] !
  211: 
  212: ; then some ranges
  213: [b-e] a -1 -1
  214: [b-e] b 0 1
  215: [b-e] e 0 1
  216: [b-e] f -1 -1
  217: [^b-e] a 0 1
  218: [^b-e] b -1 -1
  219: [^b-e] e -1 -1
  220: [^b-e] f 0 1
  221: a[1-3]c a2c 0 3
  222: a[3-1]c !
  223: a[1-3-5]c !
  224: a[1- !
  225: 
  226: ; and some classes
  227: a[[:alpha:]]c abc 0 3
  228: a[[:unknown:]]c !
  229: a[[: !
  230: a[[:alpha !
  231: a[[:alpha:] !
  232: a[[:alpha,:] !
  233: a[[:]:]]b !
  234: a[[:-:]]b !
  235: a[[:alph:]] !
  236: a[[:alphabet:]] !
  237: [[:alnum:]]+ -%@a0X_- 3 6
  238: [[:alpha:]]+ -%@aX_0- 3 5
  239: [[:blank:]]+ "a  \tb" 1 4
  240: [[:cntrl:]]+ a\n\tb 1 3
  241: [[:digit:]]+ a019b 1 4
  242: [[:graph:]]+ " a%b " 1 4
  243: [[:lower:]]+ AabC 1 3
  244: ; This test fails with STLPort, disable for now as this is a corner case anyway...
  245: ;[[:print:]]+ "\na b\n" 1 4
  246: [[:punct:]]+ " %-&\t" 1 4
  247: [[:space:]]+ "a \n\t\rb" 1 5
  248: [[:upper:]]+ aBCd 1 3
  249: [[:xdigit:]]+ p0f3Cx 1 5
  250: 
  251: ; now test flag settings:
  252: - escape_in_lists REG_NO_POSIX_TEST
  253: [\n] \n 0 1
  254: - REG_NO_POSIX_TEST
  255: 
  256: ; line anchors
  257: - match_default normal REG_EXTENDED
  258: ^ab ab 0 2
  259: ^ab xxabxx -1 -1
  260: ab$ ab 0 2
  261: ab$ abxx -1 -1
  262: - match_default match_not_bol match_not_eol normal REG_EXTENDED REG_NOTBOL REG_NOTEOL
  263: ^ab ab -1 -1
  264: ^ab xxabxx -1 -1
  265: ab$ ab -1 -1
  266: ab$ abxx -1 -1
  267: 
  268: ; back references
  269: - match_default normal REG_PERL
  270: a(b)\2c !
  271: a(b\1)c !
  272: a(b*)c\1d abbcbbd 0 7 1 3
  273: a(b*)c\1d abbcbd -1 -1
  274: a(b*)c\1d abbcbbbd -1 -1
  275: ^(.)\1 abc -1 -1
  276: a([bc])\1d abcdabbd     4 8 5 6
  277: ; strictly speaking this is at best ambiguous, at worst wrong, this is what most
  278: ; re implimentations will match though.
  279: a(([bc])\2)*d abbccd 0 6 3 5 3 4
  280: 
  281: a(([bc])\2)*d abbcbd -1 -1
  282: a((b)*\2)*d abbbd 0 5 1 4 2 3
  283: ; perl only:
  284: (ab*)[ab]*\1 ababaaa 0 7 0 1
  285: (a)\1bcd aabcd 0 5 0 1
  286: (a)\1bc*d aabcd 0 5 0 1
  287: (a)\1bc*d aabd 0 4 0 1
  288: (a)\1bc*d aabcccd 0 7 0 1
  289: (a)\1bc*[ce]d aabcccd 0 7 0 1
  290: ^(a)\1b(c)*cd$ aabcccd 0 7 0 1 4 5
  291: 
  292: ; posix only: 
  293: - match_default extended REG_EXTENDED
  294: (ab*)[ab]*\1 ababaaa 0 7 0 1
  295: 
  296: ;
  297: ; word operators:
  298: \w a 0 1
  299: \w z 0 1
  300: \w A 0 1
  301: \w Z 0 1
  302: \w _ 0 1
  303: \w } -1 -1
  304: \w ` -1 -1
  305: \w [ -1 -1
  306: \w @ -1 -1
  307: ; non-word:
  308: \W a -1 -1
  309: \W z -1 -1
  310: \W A -1 -1
  311: \W Z -1 -1
  312: \W _ -1 -1
  313: \W } 0 1
  314: \W ` 0 1
  315: \W [ 0 1
  316: \W @ 0 1
  317: ; word start:
  318: \<abcd "  abcd" 2 6
  319: \<ab cab -1 -1
  320: \<ab "\nab" 1 3
  321: \<tag ::tag 2 5
  322: ;word end:
  323: abc\> abc 0 3
  324: abc\> abcd -1 -1
  325: abc\> abc\n 0 3
  326: abc\> abc:: 0 3
  327: ; word boundary:
  328: \babcd "  abcd" 2 6
  329: \bab cab -1 -1
  330: \bab "\nab" 1 3
  331: \btag ::tag 2 5
  332: abc\b abc 0 3
  333: abc\b abcd -1 -1
  334: abc\b abc\n 0 3
  335: abc\b abc:: 0 3
  336: ; within word:
  337: \B ab 1 1
  338: a\Bb ab 0 2
  339: a\B ab 0 1
  340: a\B a -1 -1
  341: a\B "a " -1 -1
  342: 
  343: ;
  344: ; buffer operators:
  345: \`abc abc 0 3
  346: \`abc \nabc -1 -1
  347: \`abc " abc" -1 -1
  348: abc\' abc 0 3
  349: abc\' abc\n -1 -1
  350: abc\' "abc " -1 -1
  351: 
  352: ;
  353: ; now follows various complex expressions designed to try and bust the matcher:
  354: a(((b)))c abc 0 3 1 2 1 2 1 2
  355: a(b|(c))d abd 0 3 1 2 -1 -1
  356: a(b|(c))d acd 0 3 1 2 1 2
  357: a(b*|c)d abbd 0 4 1 3
  358: ; just gotta have one DFA-buster, of course
  359: a[ab]{20} aaaaabaaaabaaaabaaaab 0 21
  360: ; and an inline expansion in case somebody gets tricky
  361: a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] aaaaabaaaabaaaabaaaab 0 21
  362: ; and in case somebody just slips in an NFA...
  363: 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 0 31 21 24 24 31
  364: ; one really big one
  365: 1234567890123456789012345678901234567890123456789012345678901234567890 a1234567890123456789012345678901234567890123456789012345678901234567890b 1 71
  366: ; fish for problems as brackets go past 8
  367: [ab][cd][ef][gh][ij][kl][mn] xacegikmoq 1 8
  368: [ab][cd][ef][gh][ij][kl][mn][op] xacegikmoq 1 9
  369: [ab][cd][ef][gh][ij][kl][mn][op][qr] xacegikmoqy 1 10
  370: [ab][cd][ef][gh][ij][kl][mn][op][q] xacegikmoqy 1 10
  371: ; and as parenthesis go past 9:
  372: (a)(b)(c)(d)(e)(f)(g)(h) zabcdefghi 1 9 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9
  373: (a)(b)(c)(d)(e)(f)(g)(h)(i) zabcdefghij 1 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10
  374: (a)(b)(c)(d)(e)(f)(g)(h)(i)(j) zabcdefghijk 1 11 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11
  375: (a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k) zabcdefghijkl 1 12 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12
  376: (a)d|(b)c abc 1 3 -1 -1 1 2
  377: _+((www)|(ftp)|(mailto)):_* "_wwwnocolon _mailto:" 12 20 13 19 -1 -1 -1 -1 13 19
  378: 
  379: ; subtleties of matching
  380: ;a(b)?c\1d acd 0 3 -1 -1
  381: ; POSIX is about the following test:
  382: a(b)?c\1d acd -1 -1 -1 -1
  383: a(b?c)+d accd 0 4 2 3
  384: (wee|week)(knights|night) weeknights 0 10 0 3 3 10
  385: .* abc 0 3
  386: a(b|(c))d abd 0 3 1 2 -1 -1
  387: a(b|(c))d acd 0 3 1 2 1 2
  388: a(b*|c|e)d abbd 0 4 1 3
  389: a(b*|c|e)d acd 0 3 1 2
  390: a(b*|c|e)d ad 0 2 1 1
  391: a(b?)c abc 0 3 1 2
  392: a(b?)c ac 0 2 1 1
  393: a(b+)c abc 0 3 1 2
  394: a(b+)c abbbc 0 5 1 4 
  395: a(b*)c ac 0 2 1 1 
  396: (a|ab)(bc([de]+)f|cde) abcdef 0 6 0 1 1 6 3 5
  397: a([bc]?)c abc 0 3 1 2
  398: a([bc]?)c ac 0 2 1 1 
  399: a([bc]+)c abc 0 3 1 2
  400: a([bc]+)c abcc 0 4 1 3
  401: a([bc]+)bc abcbc 0 5 1 3
  402: a(bb+|b)b abb 0 3 1 2
  403: a(bbb+|bb+|b)b abb 0 3 1 2
  404: a(bbb+|bb+|b)b abbb 0 4 1 3
  405: a(bbb+|bb+|b)bb abbb 0 4 1 2
  406: (.*).* abcdef 0 6 0 6
  407: (a*)* bc 0 0 0 0
  408: xyx*xz xyxxxxyxxxz 5 11
  409: 
  410: ; do we get the right subexpression when it is used more than once?
  411: a(b|c)*d ad 0 2 -1 -1
  412: a(b|c)*d abcd 0 4 2 3
  413: a(b|c)+d abd 0 3 1 2
  414: a(b|c)+d abcd 0 4 2 3
  415: a(b|c?)+d ad 0 2 1 1
  416: a(b|c){0,0}d ad 0 2 -1 -1
  417: a(b|c){0,1}d ad 0 2 -1 -1
  418: a(b|c){0,1}d abd 0 3 1 2
  419: a(b|c){0,2}d ad 0 2 -1 -1
  420: a(b|c){0,2}d abcd 0 4 2 3
  421: a(b|c){0,}d ad 0 2 -1 -1
  422: a(b|c){0,}d abcd 0 4 2 3
  423: a(b|c){1,1}d abd 0 3 1 2
  424: a(b|c){1,2}d abd 0 3 1 2
  425: a(b|c){1,2}d abcd 0 4 2 3
  426: a(b|c){1,}d abd 0 3 1 2
  427: a(b|c){1,}d abcd 0 4 2 3
  428: a(b|c){2,2}d acbd 0 4 2 3
  429: a(b|c){2,2}d abcd 0 4 2 3
  430: a(b|c){2,4}d abcd 0 4 2 3
  431: a(b|c){2,4}d abcbd 0 5 3 4
  432: a(b|c){2,4}d abcbcd 0 6 4 5
  433: a(b|c){2,}d abcd 0 4 2 3
  434: a(b|c){2,}d abcbd 0 5 3 4
  435: ; perl only: these conflict with the POSIX test below
  436: ;a(b|c?)+d abcd 0 4 3 3
  437: ;a(b+|((c)*))+d abd 0 3 2 2 2 2 -1 -1
  438: ;a(b+|((c)*))+d abcd 0 4 3 3 3 3 2 3
  439: 
  440: ; posix only:
  441: - match_default extended REG_EXTENDED REG_STARTEND
  442: 
  443: a(b|c?)+d abcd 0 4 2 3
  444: a(b|((c)*))+d abcd 0 4 2 3 2 3 2 3
  445: a(b+|((c)*))+d abd 0 3 1 2 -1 -1 -1 -1
  446: a(b+|((c)*))+d abcd 0 4 2 3 2 3 2 3
  447: a(b|((c)*))+d ad 0 2 1 1 1 1 -1 -1
  448: a(b|((c)*))*d abcd 0 4 2 3 2 3 2 3
  449: a(b+|((c)*))*d abd 0 3 1 2 -1 -1 -1 -1
  450: a(b+|((c)*))*d abcd 0 4 2 3 2 3 2 3
  451: a(b|((c)*))*d ad 0 2 1 1 1 1 -1 -1
  452: 
  453: - match_default normal REG_PERL
  454: ; try to match C++ syntax elements:
  455: ; line comment:
  456: //[^\n]* "++i //here is a line comment\n" 4 28
  457: ; block comment:
  458: /\*([^*]|\*+[^*/])*\*+/ "/* here is a block comment */" 0 29 26 27
  459: /\*([^*]|\*+[^*/])*\*+/ "/**/" 0 4 -1 -1
  460: /\*([^*]|\*+[^*/])*\*+/ "/***/" 0 5 -1 -1
  461: /\*([^*]|\*+[^*/])*\*+/ "/****/" 0 6 -1 -1
  462: /\*([^*]|\*+[^*/])*\*+/ "/*****/" 0 7 -1 -1
  463: /\*([^*]|\*+[^*/])*\*+/ "/*****/*/" 0 7 -1 -1
  464: ; preprossor directives:
  465: ^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol" 0 19 -1 -1
  466: ^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol(x) #x" 0 25 -1 -1
  467: ; perl only:
  468: ^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol(x) \\  \r\n  foo();\\\r\n   printf(#x);" 0 53 30 42
  469: ; literals:
  470: ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFF                                                         0 4               0 4          0 4     -1 -1      -1 -1       -1 -1        -1 -1
  471: ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 35                                                                   0 2      0 2         -1 -1  0 2     -1 -1      -1 -1       -1 -1
  472: ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFu                                                                0 5            0 4               0 4  -1 -1   -1 -1    -1 -1     -1 -1
  473: ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFL                                                                0 5            0 4               0 4  -1 -1   4 5      -1 -1       -1 -1
  474: ((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFFFFFFFFFFFFFFFuint64                     0 24     0 18        0 18   -1 -1    19 24     19 24      22 24
  475: ; strings:
  476: '([^\\']|\\.)*' '\\x3A' 0 6 4 5
  477: '([^\\']|\\.)*' '\\'' 0 4 1 3
  478: '([^\\']|\\.)*' '\\n' 0 4 1 3
  479: 
  480: ; finally try some case insensitive matches:
  481: - match_default normal REG_EXTENDED REG_ICASE
  482: ; upper and lower have no meaning here so they fail, however these
  483: ; may compile with other libraries...
  484: ;[[:lower:]] !
  485: ;[[:upper:]] !
  486: 0123456789@abcdefghijklmnopqrstuvwxyz\[\\\]\^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ\{\|\} 0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]\^_`abcdefghijklmnopqrstuvwxyz\{\|\} 0 72
  487: 
  488: ; known and suspected bugs:
  489: - match_default normal REG_EXTENDED
  490: \( ( 0 1
  491: \) ) 0 1
  492: \$ $ 0 1
  493: \^ ^ 0 1
  494: \. . 0 1
  495: \* * 0 1
  496: \+ + 0 1
  497: \? ? 0 1
  498: \[ [ 0 1
  499: \] ] 0 1
  500: \| | 0 1
  501: \\ \\ 0 1
  502: # # 0 1
  503: \# # 0 1
  504: a- a- 0 2
  505: \- - 0 1
  506: \{ { 0 1
  507: \} } 0 1
  508: 0 0 0 1
  509: 1 1 0 1
  510: 9 9 0 1
  511: b b 0 1
  512: B B 0 1
  513: < < 0 1
  514: > > 0 1
  515: w w 0 1
  516: W W 0 1
  517: ` ` 0 1
  518: ' ' 0 1
  519: \n \n 0 1
  520: , , 0 1
  521: a a 0 1
  522: f f 0 1
  523: n n 0 1
  524: r r 0 1
  525: t t 0 1
  526: v v 0 1
  527: c c 0 1
  528: x x 0 1
  529: : : 0 1
  530: (\.[[:alnum:]]+){2} "w.a.b " 1 5 3 5
  531: 
  532: - match_default normal REG_EXTENDED REG_ICASE
  533: a A 0 1
  534: A a 0 1
  535: [abc]+ abcABC 0 6
  536: [ABC]+ abcABC 0 6
  537: [a-z]+ abcABC 0 6
  538: [A-Z]+ abzANZ 0 6
  539: [a-Z]+ abzABZ 0 6
  540: [A-z]+ abzABZ 0 6
  541: [[:lower:]]+ abyzABYZ 0 8
  542: [[:upper:]]+ abzABZ 0 6
  543: [[:alpha:]]+ abyzABYZ 0 8
  544: [[:alnum:]]+ 09abyzABYZ 0 10
  545: 
  546: ; word start:
  547: \<abcd "  abcd" 2 6
  548: \<ab cab -1 -1
  549: \<ab "\nab" 1 3
  550: \<tag ::tag 2 5
  551: ;word end:
  552: abc\> abc 0 3
  553: abc\> abcd -1 -1
  554: abc\> abc\n 0 3
  555: abc\> abc:: 0 3
  556: 
  557: ; collating elements and rewritten set code:
  558: - match_default normal REG_EXTENDED REG_STARTEND
  559: ;[[.zero.]] 0 0 1
  560: ;[[.one.]] 1 0 1
  561: ;[[.two.]] 2 0 1
  562: ;[[.three.]] 3 0 1
  563: [[.a.]] baa 1 2
  564: ;[[.right-curly-bracket.]] } 0 1
  565: ;[[.NUL.]] \0 0 1
  566: [[:<:]z] !
  567: [a[:>:]] !
  568: [[=a=]] a 0 1
  569: ;[[=right-curly-bracket=]] } 0 1
  570: - match_default normal REG_EXTENDED REG_STARTEND REG_ICASE
  571: [[.A.]] A 0 1
  572: [[.A.]] a 0 1
  573: [[.A.]-b]+ AaBb 0 4
  574: [A-[.b.]]+ AaBb 0 4
  575: [[.a.]-B]+ AaBb 0 4
  576: [a-[.B.]]+ AaBb 0 4
  577: - match_default normal REG_EXTENDED REG_STARTEND
  578: [[.a.]-c]+ abcd 0 3
  579: [a-[.c.]]+ abcd 0 3
  580: [[:alpha:]-a] !
  581: [a-[:alpha:]] !
  582: 
  583: ; try mutli-character ligatures:
  584: ;[[.ae.]] ae 0 2
  585: ;[[.ae.]] aE -1 -1
  586: ;[[.AE.]] AE 0 2
  587: ;[[.Ae.]] Ae 0 2
  588: ;[[.ae.]-b] a -1 -1
  589: ;[[.ae.]-b] b 0 1
  590: ;[[.ae.]-b] ae 0 2
  591: ;[a-[.ae.]] a 0 1
  592: ;[a-[.ae.]] b -1 -1
  593: ;[a-[.ae.]] ae 0 2
  594: - match_default normal REG_EXTENDED REG_STARTEND REG_ICASE
  595: ;[[.ae.]] AE 0 2
  596: ;[[.ae.]] Ae 0 2
  597: ;[[.AE.]] Ae 0 2
  598: ;[[.Ae.]] aE 0 2
  599: ;[[.AE.]-B] a -1 -1
  600: ;[[.Ae.]-b] b 0 1
  601: ;[[.Ae.]-b] B 0 1
  602: ;[[.ae.]-b] AE 0 2
  603: 
  604: - match_default normal REG_EXTENDED REG_STARTEND REG_NO_POSIX_TEST
  605: \s+ "ab   ab" 2 5
  606: \S+ "  abc  " 2 5
  607: 
  608: - match_default normal REG_EXTENDED REG_STARTEND
  609: \`abc abc 0 3
  610: \`abc aabc -1 -1
  611: abc\' abc 0 3
  612: abc\' abcd -1 -1
  613: abc\' abc\n\n -1 -1
  614: abc\' abc 0 3
  615: 
  616: ; extended repeat checking to exercise new algorithms:
  617: ab.*xy abxy_ 0 4
  618: ab.*xy ab_xy_ 0 5
  619: ab.*xy abxy 0 4
  620: ab.*xy ab_xy 0 5
  621: ab.* ab 0 2
  622: ab.* ab__ 0 4
  623: 
  624: ab.{2,5}xy ab__xy_ 0 6
  625: ab.{2,5}xy ab____xy_ 0 8
  626: ab.{2,5}xy ab_____xy_ 0 9
  627: ab.{2,5}xy ab__xy 0 6
  628: ab.{2,5}xy ab_____xy 0 9
  629: ab.{2,5} ab__ 0 4
  630: ab.{2,5} ab_______ 0 7
  631: ab.{2,5}xy ab______xy -1 -1
  632: ab.{2,5}xy ab_xy -1 -1
  633: 
  634: ab.*?xy abxy_ 0 4
  635: ab.*?xy ab_xy_ 0 5
  636: ab.*?xy abxy 0 4
  637: ab.*?xy ab_xy 0 5
  638: ab.*? ab 0 2
  639: ab.*? ab__ 0 4
  640: 
  641: ab.{2,5}?xy ab__xy_ 0 6
  642: ab.{2,5}?xy ab____xy_ 0 8
  643: ab.{2,5}?xy ab_____xy_ 0 9
  644: ab.{2,5}?xy ab__xy 0 6
  645: ab.{2,5}?xy ab_____xy 0 9
  646: ab.{2,5}? ab__ 0 4
  647: ab.{2,5}? ab_______ 0 7
  648: ab.{2,5}?xy ab______xy -1 -1
  649: ab.{2,5}xy ab_xy -1 -1
  650: 
  651: ; again but with slower algorithm variant:
  652: - match_default REG_EXTENDED
  653: ; now again for single character repeats:
  654: 
  655: ab_*xy abxy_ 0 4
  656: ab_*xy ab_xy_ 0 5
  657: ab_*xy abxy 0 4
  658: ab_*xy ab_xy 0 5
  659: ab_* ab 0 2
  660: ab_* ab__ 0 4
  661: 
  662: ab_{2,5}xy ab__xy_ 0 6
  663: ab_{2,5}xy ab____xy_ 0 8
  664: ab_{2,5}xy ab_____xy_ 0 9
  665: ab_{2,5}xy ab__xy 0 6
  666: ab_{2,5}xy ab_____xy 0 9
  667: ab_{2,5} ab__ 0 4
  668: ab_{2,5} ab_______ 0 7
  669: ab_{2,5}xy ab______xy -1 -1
  670: ab_{2,5}xy ab_xy -1 -1
  671: 
  672: ab_*?xy abxy_ 0 4
  673: ab_*?xy ab_xy_ 0 5
  674: ab_*?xy abxy 0 4
  675: ab_*?xy ab_xy 0 5
  676: ab_*? ab 0 2
  677: ab_*? ab__ 0 4
  678: 
  679: ab_{2,5}?xy ab__xy_ 0 6
  680: ab_{2,5}?xy ab____xy_ 0 8
  681: ab_{2,5}?xy ab_____xy_ 0 9
  682: ab_{2,5}?xy ab__xy 0 6
  683: ab_{2,5}?xy ab_____xy 0 9
  684: ab_{2,5}? ab__ 0 4
  685: ab_{2,5}? ab_______ 0 7
  686: ab_{2,5}?xy ab______xy -1 -1
  687: ab_{2,5}xy ab_xy -1 -1
  688: 
  689: ; and again for sets:
  690: ab[_,;]*xy abxy_ 0 4
  691: ab[_,;]*xy ab_xy_ 0 5
  692: ab[_,;]*xy abxy 0 4
  693: ab[_,;]*xy ab_xy 0 5
  694: ab[_,;]* ab 0 2
  695: ab[_,;]* ab__ 0 4
  696: 
  697: ab[_,;]{2,5}xy ab__xy_ 0 6
  698: ab[_,;]{2,5}xy ab____xy_ 0 8
  699: ab[_,;]{2,5}xy ab_____xy_ 0 9
  700: ab[_,;]{2,5}xy ab__xy 0 6
  701: ab[_,;]{2,5}xy ab_____xy 0 9
  702: ab[_,;]{2,5} ab__ 0 4
  703: ab[_,;]{2,5} ab_______ 0 7
  704: ab[_,;]{2,5}xy ab______xy -1 -1
  705: ab[_,;]{2,5}xy ab_xy -1 -1
  706: 
  707: ab[_,;]*?xy abxy_ 0 4
  708: ab[_,;]*?xy ab_xy_ 0 5
  709: ab[_,;]*?xy abxy 0 4
  710: ab[_,;]*?xy ab_xy 0 5
  711: ab[_,;]*? ab 0 2
  712: ab[_,;]*? ab__ 0 4
  713: 
  714: ab[_,;]{2,5}?xy ab__xy_ 0 6
  715: ab[_,;]{2,5}?xy ab____xy_ 0 8
  716: ab[_,;]{2,5}?xy ab_____xy_ 0 9
  717: ab[_,;]{2,5}?xy ab__xy 0 6
  718: ab[_,;]{2,5}?xy ab_____xy 0 9
  719: ab[_,;]{2,5}? ab__ 0 4
  720: ab[_,;]{2,5}? ab_______ 0 7
  721: ab[_,;]{2,5}?xy ab______xy -1 -1
  722: ab[_,;]{2,5}xy ab_xy -1 -1
  723: 
  724: ; and again for tricky sets with digraphs:
  725: ;ab[_[.ae.]]*xy abxy_ 0 4
  726: ;ab[_[.ae.]]*xy ab_xy_ 0 5
  727: ;ab[_[.ae.]]*xy abxy 0 4
  728: ;ab[_[.ae.]]*xy ab_xy 0 5
  729: ;ab[_[.ae.]]* ab 0 2
  730: ;ab[_[.ae.]]* ab__ 0 4
  731: 
  732: ;ab[_[.ae.]]{2,5}xy ab__xy_ 0 6
  733: ;ab[_[.ae.]]{2,5}xy ab____xy_ 0 8
  734: ;ab[_[.ae.]]{2,5}xy ab_____xy_ 0 9
  735: ;ab[_[.ae.]]{2,5}xy ab__xy 0 6
  736: ;ab[_[.ae.]]{2,5}xy ab_____xy 0 9
  737: ;ab[_[.ae.]]{2,5} ab__ 0 4
  738: ;ab[_[.ae.]]{2,5} ab_______ 0 7
  739: ;ab[_[.ae.]]{2,5}xy ab______xy -1 -1
  740: ;ab[_[.ae.]]{2,5}xy ab_xy -1 -1
  741: 
  742: ;ab[_[.ae.]]*?xy abxy_ 0 4
  743: ;ab[_[.ae.]]*?xy ab_xy_ 0 5
  744: ;ab[_[.ae.]]*?xy abxy 0 4
  745: ;ab[_[.ae.]]*?xy ab_xy 0 5
  746: ;ab[_[.ae.]]*? ab 0 2
  747: ;ab[_[.ae.]]*? ab__ 0 2
  748: 
  749: ;ab[_[.ae.]]{2,5}?xy ab__xy_ 0 6
  750: ;ab[_[.ae.]]{2,5}?xy ab____xy_ 0 8
  751: ;ab[_[.ae.]]{2,5}?xy ab_____xy_ 0 9
  752: ;ab[_[.ae.]]{2,5}?xy ab__xy 0 6
  753: ;ab[_[.ae.]]{2,5}?xy ab_____xy 0 9
  754: ;ab[_[.ae.]]{2,5}? ab__ 0 4
  755: ;ab[_[.ae.]]{2,5}? ab_______ 0 4
  756: ;ab[_[.ae.]]{2,5}?xy ab______xy -1 -1
  757: ;ab[_[.ae.]]{2,5}xy ab_xy -1 -1
  758: 
  759: ; new bugs detected in spring 2003:
  760: - normal match_continuous REG_NO_POSIX_TEST
  761: b abc 1 2
  762: 
  763: () abc 0 0 0 0
  764: ^() abc 0 0 0 0
  765: ^()+ abc 0 0 0 0
  766: ^(){1} abc 0 0 0 0
  767: ^(){2} abc 0 0 0 0
  768: ^((){2}) abc 0 0 0 0 0 0
  769: () "" 0 0 0 0
  770: ()\1 "" 0 0 0 0
  771: ()\1 a 0 0 0 0
  772: a()\1b ab 0 2 1 1
  773: a()b\1 ab 0 2 1 1
  774: 
  775: ; subtleties of matching with no sub-expressions marked
  776: - normal match_nosubs REG_NO_POSIX_TEST
  777: a(b?c)+d accd 0 4 
  778: (wee|week)(knights|night) weeknights 0 10 
  779: .* abc 0 3
  780: a(b|(c))d abd 0 3 
  781: a(b|(c))d acd 0 3
  782: a(b*|c|e)d abbd 0 4
  783: a(b*|c|e)d acd 0 3 
  784: a(b*|c|e)d ad 0 2
  785: a(b?)c abc 0 3
  786: a(b?)c ac 0 2
  787: a(b+)c abc 0 3
  788: a(b+)c abbbc 0 5
  789: a(b*)c ac 0 2
  790: (a|ab)(bc([de]+)f|cde) abcdef 0 6
  791: a([bc]?)c abc 0 3
  792: a([bc]?)c ac 0 2
  793: a([bc]+)c abc 0 3
  794: a([bc]+)c abcc 0 4
  795: a([bc]+)bc abcbc 0 5
  796: a(bb+|b)b abb 0 3
  797: a(bbb+|bb+|b)b abb 0 3
  798: a(bbb+|bb+|b)b abbb 0 4
  799: a(bbb+|bb+|b)bb abbb 0 4
  800: (.*).* abcdef 0 6
  801: (a*)* bc 0 0
  802: 
  803: - normal nosubs REG_NO_POSIX_TEST
  804: a(b?c)+d accd 0 4 
  805: (wee|week)(knights|night) weeknights 0 10 
  806: .* abc 0 3
  807: a(b|(c))d abd 0 3 
  808: a(b|(c))d acd 0 3
  809: a(b*|c|e)d abbd 0 4
  810: a(b*|c|e)d acd 0 3 
  811: a(b*|c|e)d ad 0 2
  812: a(b?)c abc 0 3
  813: a(b?)c ac 0 2
  814: a(b+)c abc 0 3
  815: a(b+)c abbbc 0 5
  816: a(b*)c ac 0 2
  817: (a|ab)(bc([de]+)f|cde) abcdef 0 6
  818: a([bc]?)c abc 0 3
  819: a([bc]?)c ac 0 2
  820: a([bc]+)c abc 0 3
  821: a([bc]+)c abcc 0 4
  822: a([bc]+)bc abcbc 0 5
  823: a(bb+|b)b abb 0 3
  824: a(bbb+|bb+|b)b abb 0 3
  825: a(bbb+|bb+|b)b abbb 0 4
  826: a(bbb+|bb+|b)bb abbb 0 4
  827: (.*).* abcdef 0 6
  828: (a*)* bc 0 0
  829: 
1
Syntax (Markdown)