]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/regex/test/regress/test_tricky_cases.cpp
6 * Use, modification and distribution are subject to the
7 * Boost Software License, Version 1.0. (See accompanying file
8 * LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
15 #pragma warning(disable:4127)
18 void test_tricky_cases2 ();
19 void test_tricky_cases3 ();
21 void test_tricky_cases ()
23 using namespace boost :: regex_constants
;
25 // now follows various complex expressions designed to try and bust the matcher:
27 TEST_REGEX_SEARCH ( "a(((b)))c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , 1 , 2 , 1 , 2 , - 2 , - 2 ));
28 TEST_REGEX_SEARCH ( "a(b|(c))d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 1 , - 1 , - 2 , - 2 ));
29 TEST_REGEX_SEARCH ( "a(b|(c))d" , perl
, "acd" , match_default
, make_array ( 0 , 3 , 1 , 2 , 1 , 2 , - 2 , - 2 ));
30 TEST_REGEX_SEARCH ( "a(b*|c)d" , perl
, "abbd" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
31 // just gotta have one DFA-buster, of course
32 TEST_REGEX_SEARCH ( "a[ab]{20}" , perl
, "aaaaabaaaabaaaabaaaab" , match_default
, make_array ( 0 , 21 , - 2 , - 2 ));
33 // and an inline expansion in case somebody gets tricky
34 TEST_REGEX_SEARCH ( "a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]" , perl
, "aaaaabaaaabaaaabaaaab" , match_default
, make_array ( 0 , 21 , - 2 , - 2 ));
35 // and in case somebody just slips in an NFA...
36 TEST_REGEX_SEARCH ( "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)" , perl
, "aaaaabaaaabaaaabaaaabweeknights" , match_default
, make_array ( 0 , 31 , 21 , 24 , 24 , 31 , - 2 , - 2 ));
38 TEST_REGEX_SEARCH ( "1234567890123456789012345678901234567890123456789012345678901234567890" , perl
, "a1234567890123456789012345678901234567890123456789012345678901234567890b" , match_default
, make_array ( 1 , 71 , - 2 , - 2 ));
39 // fish for problems as brackets go past 8
40 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn]" , perl
, "xacegikmoq" , match_default
, make_array ( 1 , 8 , - 2 , - 2 ));
41 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn][op]" , perl
, "xacegikmoq" , match_default
, make_array ( 1 , 9 , - 2 , - 2 ));
42 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn][op][qr]" , perl
, "xacegikmoqy" , match_default
, make_array ( 1 , 10 , - 2 , - 2 ));
43 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn][op][q]" , perl
, "xacegikmoqy" , match_default
, make_array ( 1 , 10 , - 2 , - 2 ));
44 // and as parenthesis go past 9:
45 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)" , perl
, "zabcdefghi" , match_default
, make_array ( 1 , 9 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , - 2 , - 2 ));
46 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)(i)" , perl
, "zabcdefghij" , match_default
, make_array ( 1 , 10 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , - 2 , - 2 ));
47 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)" , perl
, "zabcdefghijk" , match_default
, make_array ( 1 , 11 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , - 2 , - 2 ));
48 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)" , perl
, "zabcdefghijkl" , match_default
, make_array ( 1 , 12 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , - 2 , - 2 ));
49 TEST_REGEX_SEARCH ( "(a)d|(b)c" , perl
, "abc" , match_default
, make_array ( 1 , 3 , - 1 , - 1 , 1 , 2 , - 2 , - 2 ));
50 TEST_REGEX_SEARCH ( "_+((www)|(ftp)|(mailto)):_*" , perl
, "_wwwnocolon _mailto:" , match_default
, make_array ( 12 , 20 , 13 , 19 , - 1 , - 1 , - 1 , - 1 , 13 , 19 , - 2 , - 2 ));
51 // subtleties of matching
52 TEST_REGEX_SEARCH ( "a(b)?c \\ 1d" , perl
, "acd" , match_default
, make_array (- 2 , - 2 ));
53 TEST_REGEX_SEARCH ( "a(b?c)+d" , perl
, "accd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
54 TEST_REGEX_SEARCH ( "(wee|week)(knights|night)" , perl
, "weeknights" , match_default
, make_array ( 0 , 10 , 0 , 3 , 3 , 10 , - 2 , - 2 ));
55 TEST_REGEX_SEARCH ( ".*" , perl
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , 3 , 3 , - 2 , - 2 ));
56 TEST_REGEX_SEARCH ( "a(b|(c))d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 1 , - 1 , - 2 , - 2 ));
57 TEST_REGEX_SEARCH ( "a(b|(c))d" , perl
, "acd" , match_default
, make_array ( 0 , 3 , 1 , 2 , 1 , 2 , - 2 , - 2 ));
58 TEST_REGEX_SEARCH ( "a(b*|c|e)d" , perl
, "abbd" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
59 TEST_REGEX_SEARCH ( "a(b*|c|e)d" , perl
, "acd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
60 TEST_REGEX_SEARCH ( "a(b*|c|e)d" , perl
, "ad" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
61 TEST_REGEX_SEARCH ( "a(b?)c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
62 TEST_REGEX_SEARCH ( "a(b?)c" , perl
, "ac" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
63 TEST_REGEX_SEARCH ( "a(b+)c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
64 TEST_REGEX_SEARCH ( "a(b+)c" , perl
, "abbbc" , match_default
, make_array ( 0 , 5 , 1 , 4 , - 2 , - 2 ));
65 TEST_REGEX_SEARCH ( "a(b*)c" , perl
, "ac" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
66 TEST_REGEX_SEARCH ( "(a|ab)(bc([de]+)f|cde)" , perl
, "abcdef" , match_default
, make_array ( 0 , 6 , 0 , 1 , 1 , 6 , 3 , 5 , - 2 , - 2 ));
67 TEST_REGEX_SEARCH ( "a([bc]?)c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
68 TEST_REGEX_SEARCH ( "a([bc]?)c" , perl
, "ac" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
69 TEST_REGEX_SEARCH ( "a([bc]+)c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
70 TEST_REGEX_SEARCH ( "a([bc]+)c" , perl
, "abcc" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
71 TEST_REGEX_SEARCH ( "a([bc]+)bc" , perl
, "abcbc" , match_default
, make_array ( 0 , 5 , 1 , 3 , - 2 , - 2 ));
72 TEST_REGEX_SEARCH ( "a(bb+|b)b" , perl
, "abb" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
73 TEST_REGEX_SEARCH ( "a(bbb+|bb+|b)b" , perl
, "abb" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
74 TEST_REGEX_SEARCH ( "a(bbb+|bb+|b)b" , perl
, "abbb" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
75 TEST_REGEX_SEARCH ( "a(bbb+|bb+|b)bb" , perl
, "abbb" , match_default
, make_array ( 0 , 4 , 1 , 2 , - 2 , - 2 ));
76 TEST_REGEX_SEARCH ( "(.*).*" , perl
, "abcdef" , match_default
, make_array ( 0 , 6 , 0 , 6 , - 2 , 6 , 6 , 6 , 6 , - 2 , - 2 ));
77 TEST_REGEX_SEARCH ( "(a*)*" , perl
, "bc" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , 1 , 1 , 1 , 1 , - 2 , 2 , 2 , 2 , 2 , - 2 , - 2 ));
78 TEST_REGEX_SEARCH ( "Z(((((((a+)+)+)+)+)+)+)+|Y(((((((a+)+)+)+)+)+)+)+|X(((((((a+)+)+)+)+)+)+)+|W(((((((a+)+)+)+)+)+)+)+|V(((((((a+)+)+)+)+)+)+)+|CZ(((((((a+)+)+)+)+)+)+)+|CY(((((((a+)+)+)+)+)+)+)+|CX(((((((a+)+)+)+)+)+)+)+|CW(((((((a+)+)+)+)+)+)+)+|CV(((((((a+)+)+)+)+)+)+)+|(a+)+" , perl
, "bc" , match_default
, make_array (- 2 , - 2 ));
79 TEST_REGEX_SEARCH ( "Z(((((((a+)+)+)+)+)+)+)+|Y(((((((a+)+)+)+)+)+)+)+|X(((((((a+)+)+)+)+)+)+)+|W(((((((a+)+)+)+)+)+)+)+|V(((((((a+)+)+)+)+)+)+)+|CZ(((((((a+)+)+)+)+)+)+)+|CY(((((((a+)+)+)+)+)+)+)+|CX(((((((a+)+)+)+)+)+)+)+|CW(((((((a+)+)+)+)+)+)+)+|CV(((((((a+)+)+)+)+)+)+)+|(a+)+" , perl
, "aaa" , match_default
,
81 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
82 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
83 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
84 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
85 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
86 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
87 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
90 TEST_REGEX_SEARCH ( "Z(((((((a+)+)+)+)+)+)+)+|Y(((((((a+)+)+)+)+)+)+)+|X(((((((a+)+)+)+)+)+)+)+|W(((((((a+)+)+)+)+)+)+)+|V(((((((a+)+)+)+)+)+)+)+|CZ(((((((a+)+)+)+)+)+)+)+|CY(((((((a+)+)+)+)+)+)+)+|CX(((((((a+)+)+)+)+)+)+)+|CW(((((((a+)+)+)+)+)+)+)+|CV(((((((a+)+)+)+)+)+)+)+|(a+)+" ,
91 perl
, "Zaaa" , match_default
,
93 1 , 4 , 1 , 4 , 1 , 4 , 1 , 4 , 1 , 4 , 1 , 4 , 1 , 4 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
94 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
95 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
96 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
97 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
98 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
99 - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
102 TEST_REGEX_SEARCH ( "xyx*xz" , perl
, "xyxxxxyxxxz" , match_default
, make_array ( 5 , 11 , - 2 , - 2 ));
103 // do we get the right subexpression when it is used more than once?
104 TEST_REGEX_SEARCH ( "a(b|c)*d" , perl
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
105 TEST_REGEX_SEARCH ( "a(b|c)*d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
106 TEST_REGEX_SEARCH ( "a(b|c)+d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
107 TEST_REGEX_SEARCH ( "a(b|c)+d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
108 TEST_REGEX_SEARCH ( "a(b|c?)+d" , perl
, "ad" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
109 TEST_REGEX_SEARCH ( "a(b|c){0,0}d" , perl
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
110 TEST_REGEX_SEARCH ( "a(b|c){0,1}d" , perl
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
111 TEST_REGEX_SEARCH ( "a(b|c){0,1}d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
112 TEST_REGEX_SEARCH ( "a(b|c){0,2}d" , perl
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
113 TEST_REGEX_SEARCH ( "a(b|c){0,2}d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
114 TEST_REGEX_SEARCH ( "a(b|c){0,}d" , perl
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
115 TEST_REGEX_SEARCH ( "a(b|c){0,}d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
116 TEST_REGEX_SEARCH ( "a(b|c){1,1}d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
117 TEST_REGEX_SEARCH ( "a(b|c){1,2}d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
118 TEST_REGEX_SEARCH ( "a(b|c){1,2}d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
119 TEST_REGEX_SEARCH ( "a(b|c){1,}d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
120 TEST_REGEX_SEARCH ( "a(b|c){1,}d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
121 TEST_REGEX_SEARCH ( "a(b|c){2,2}d" , perl
, "acbd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
122 TEST_REGEX_SEARCH ( "a(b|c){2,2}d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
123 TEST_REGEX_SEARCH ( "a(b|c){2,4}d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
124 TEST_REGEX_SEARCH ( "a(b|c){2,4}d" , perl
, "abcbd" , match_default
, make_array ( 0 , 5 , 3 , 4 , - 2 , - 2 ));
125 TEST_REGEX_SEARCH ( "a(b|c){2,4}d" , perl
, "abcbcd" , match_default
, make_array ( 0 , 6 , 4 , 5 , - 2 , - 2 ));
126 TEST_REGEX_SEARCH ( "a(b|c){2,}d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
127 TEST_REGEX_SEARCH ( "a(b|c){2,}d" , perl
, "abcbd" , match_default
, make_array ( 0 , 5 , 3 , 4 , - 2 , - 2 ));
129 test_tricky_cases2 ();
130 test_tricky_cases3 ();
133 void test_tricky_cases2 ()
135 using namespace boost :: regex_constants
;
137 TEST_REGEX_SEARCH ( "a(((b)))c" , boost :: regex :: extended
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , 1 , 2 , 1 , 2 , - 2 , - 2 ));
138 TEST_REGEX_SEARCH ( "a(b|(c))d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 1 , - 1 , - 2 , - 2 ));
139 TEST_REGEX_SEARCH ( "a(b|(c))d" , boost :: regex :: extended
, "acd" , match_default
, make_array ( 0 , 3 , 1 , 2 , 1 , 2 , - 2 , - 2 ));
140 TEST_REGEX_SEARCH ( "a(b*|c)d" , boost :: regex :: extended
, "abbd" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
141 // just gotta have one DFA-buster, of course
142 TEST_REGEX_SEARCH ( "a[ab]{20}" , boost :: regex :: extended
, "aaaaabaaaabaaaabaaaab" , match_default
, make_array ( 0 , 21 , - 2 , - 2 ));
143 // and an inline expansion in case somebody gets tricky
144 TEST_REGEX_SEARCH ( "a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab]" , boost :: regex :: extended
, "aaaaabaaaabaaaabaaaab" , match_default
, make_array ( 0 , 21 , - 2 , - 2 ));
145 // and in case somebody just slips in an NFA...
146 TEST_REGEX_SEARCH ( "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)" , boost :: regex :: extended
, "aaaaabaaaabaaaabaaaabweeknights" , match_default
, make_array ( 0 , 31 , 21 , 24 , 24 , 31 , - 2 , - 2 ));
147 // one really big one
148 TEST_REGEX_SEARCH ( "1234567890123456789012345678901234567890123456789012345678901234567890" , boost :: regex :: extended
, "a1234567890123456789012345678901234567890123456789012345678901234567890b" , match_default
, make_array ( 1 , 71 , - 2 , - 2 ));
149 // fish for problems as brackets go past 8
150 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn]" , boost :: regex :: extended
, "xacegikmoq" , match_default
, make_array ( 1 , 8 , - 2 , - 2 ));
151 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn][op]" , boost :: regex :: extended
, "xacegikmoq" , match_default
, make_array ( 1 , 9 , - 2 , - 2 ));
152 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn][op][qr]" , boost :: regex :: extended
, "xacegikmoqy" , match_default
, make_array ( 1 , 10 , - 2 , - 2 ));
153 TEST_REGEX_SEARCH ( "[ab][cd][ef][gh][ij][kl][mn][op][q]" , boost :: regex :: extended
, "xacegikmoqy" , match_default
, make_array ( 1 , 10 , - 2 , - 2 ));
154 // and as parenthesis go past 9:
155 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)" , boost :: regex :: extended
, "zabcdefghi" , match_default
, make_array ( 1 , 9 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , - 2 , - 2 ));
156 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)(i)" , boost :: regex :: extended
, "zabcdefghij" , match_default
, make_array ( 1 , 10 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , - 2 , - 2 ));
157 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)" , boost :: regex :: extended
, "zabcdefghijk" , match_default
, make_array ( 1 , 11 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , - 2 , - 2 ));
158 TEST_REGEX_SEARCH ( "(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)" , boost :: regex :: extended
, "zabcdefghijkl" , match_default
, make_array ( 1 , 12 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , - 2 , - 2 ));
159 TEST_REGEX_SEARCH ( "(a)d|(b)c" , boost :: regex :: extended
, "abc" , match_default
, make_array ( 1 , 3 , - 1 , - 1 , 1 , 2 , - 2 , - 2 ));
160 TEST_REGEX_SEARCH ( "_+((www)|(ftp)|(mailto)):_*" , boost :: regex :: extended
, "_wwwnocolon _mailto:" , match_default
, make_array ( 12 , 20 , 13 , 19 , - 1 , - 1 , - 1 , - 1 , 13 , 19 , - 2 , - 2 ));
161 // subtleties of matching
162 TEST_REGEX_SEARCH ( "a \\ (b \\ ) \\ ?c \\ 1d" , basic
| bk_plus_qm
, "acd" , match_default
, make_array ( 0 , 3 , - 1 , - 1 , - 2 , - 2 ));
163 TEST_REGEX_SEARCH ( "a(b?c)+d" , boost :: regex :: extended
, "accd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
164 TEST_REGEX_SEARCH ( "(wee|week)(knights|night)" , boost :: regex :: extended
, "weeknights" , match_default
, make_array ( 0 , 10 , 0 , 3 , 3 , 10 , - 2 , - 2 ));
165 TEST_REGEX_SEARCH ( ".*" , boost :: regex :: extended
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , 3 , 3 , - 2 , - 2 ));
166 TEST_REGEX_SEARCH ( "a(b|(c))d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 1 , - 1 , - 2 , - 2 ));
167 TEST_REGEX_SEARCH ( "a(b|(c))d" , boost :: regex :: extended
, "acd" , match_default
, make_array ( 0 , 3 , 1 , 2 , 1 , 2 , - 2 , - 2 ));
168 TEST_REGEX_SEARCH ( "a(b*|c|e)d" , boost :: regex :: extended
, "abbd" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
169 TEST_REGEX_SEARCH ( "a(b*|c|e)d" , boost :: regex :: extended
, "acd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
170 TEST_REGEX_SEARCH ( "a(b*|c|e)d" , boost :: regex :: extended
, "ad" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
171 TEST_REGEX_SEARCH ( "a(b?)c" , boost :: regex :: extended
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
172 TEST_REGEX_SEARCH ( "a(b?)c" , boost :: regex :: extended
, "ac" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
173 TEST_REGEX_SEARCH ( "a(b+)c" , boost :: regex :: extended
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
174 TEST_REGEX_SEARCH ( "a(b+)c" , boost :: regex :: extended
, "abbbc" , match_default
, make_array ( 0 , 5 , 1 , 4 , - 2 , - 2 ));
175 TEST_REGEX_SEARCH ( "a(b*)c" , boost :: regex :: extended
, "ac" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
176 TEST_REGEX_SEARCH ( "(a|ab)(bc([de]+)f|cde)" , boost :: regex :: extended
, "abcdef" , match_default
, make_array ( 0 , 6 , 0 , 1 , 1 , 6 , 3 , 5 , - 2 , - 2 ));
177 TEST_REGEX_SEARCH ( "a([bc]?)c" , boost :: regex :: extended
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
178 TEST_REGEX_SEARCH ( "a([bc]?)c" , boost :: regex :: extended
, "ac" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
179 TEST_REGEX_SEARCH ( "a([bc]+)c" , boost :: regex :: extended
, "abc" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
180 TEST_REGEX_SEARCH ( "a([bc]+)c" , boost :: regex :: extended
, "abcc" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
181 TEST_REGEX_SEARCH ( "a([bc]+)bc" , boost :: regex :: extended
, "abcbc" , match_default
, make_array ( 0 , 5 , 1 , 3 , - 2 , - 2 ));
182 TEST_REGEX_SEARCH ( "a(bb+|b)b" , boost :: regex :: extended
, "abb" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
183 TEST_REGEX_SEARCH ( "a(bbb+|bb+|b)b" , boost :: regex :: extended
, "abb" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
184 TEST_REGEX_SEARCH ( "a(bbb+|bb+|b)b" , boost :: regex :: extended
, "abbb" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
185 TEST_REGEX_SEARCH ( "a(bbb+|bb+|b)bb" , boost :: regex :: extended
, "abbb" , match_default
, make_array ( 0 , 4 , 1 , 2 , - 2 , - 2 ));
186 TEST_REGEX_SEARCH ( "(.*).*" , boost :: regex :: extended
, "abcdef" , match_default
, make_array ( 0 , 6 , 0 , 6 , - 2 , 6 , 6 , 6 , 6 , - 2 , - 2 ));
187 TEST_REGEX_SEARCH ( "(a*)*" , boost :: regex :: extended
, "bc" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , 1 , 1 , 1 , 1 , - 2 , 2 , 2 , 2 , 2 , - 2 , - 2 ));
188 TEST_REGEX_SEARCH ( "xyx*xz" , boost :: regex :: extended
, "xyxxxxyxxxz" , match_default
, make_array ( 5 , 11 , - 2 , - 2 ));
189 // do we get the right subexpression when it is used more than once?
190 TEST_REGEX_SEARCH ( "a(b|c)*d" , boost :: regex :: extended
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
191 TEST_REGEX_SEARCH ( "a(b|c)*d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
192 TEST_REGEX_SEARCH ( "a(b|c)+d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
193 TEST_REGEX_SEARCH ( "a(b|c)+d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
194 TEST_REGEX_SEARCH ( "a(b|c?)+d" , boost :: regex :: extended
, "ad" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
195 TEST_REGEX_SEARCH ( "a(b|c){0,0}d" , boost :: regex :: extended
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
196 TEST_REGEX_SEARCH ( "a(b|c){0,1}d" , boost :: regex :: extended
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
197 TEST_REGEX_SEARCH ( "a(b|c){0,1}d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
198 TEST_REGEX_SEARCH ( "a(b|c){0,2}d" , boost :: regex :: extended
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
199 TEST_REGEX_SEARCH ( "a(b|c){0,2}d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
200 TEST_REGEX_SEARCH ( "a(b|c){0,}d" , boost :: regex :: extended
, "ad" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
201 TEST_REGEX_SEARCH ( "a(b|c){0,}d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
202 TEST_REGEX_SEARCH ( "a(b|c){1,1}d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
203 TEST_REGEX_SEARCH ( "a(b|c){1,2}d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
204 TEST_REGEX_SEARCH ( "a(b|c){1,2}d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
205 TEST_REGEX_SEARCH ( "a(b|c){1,}d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
206 TEST_REGEX_SEARCH ( "a(b|c){1,}d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
207 TEST_REGEX_SEARCH ( "a(b|c){2,2}d" , boost :: regex :: extended
, "acbd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
208 TEST_REGEX_SEARCH ( "a(b|c){2,2}d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
209 TEST_REGEX_SEARCH ( "a(b|c){2,4}d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
210 TEST_REGEX_SEARCH ( "a(b|c){2,4}d" , boost :: regex :: extended
, "abcbd" , match_default
, make_array ( 0 , 5 , 3 , 4 , - 2 , - 2 ));
211 TEST_REGEX_SEARCH ( "a(b|c){2,4}d" , boost :: regex :: extended
, "abcbcd" , match_default
, make_array ( 0 , 6 , 4 , 5 , - 2 , - 2 ));
212 TEST_REGEX_SEARCH ( "a(b|c){2,}d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
213 TEST_REGEX_SEARCH ( "a(b|c){2,}d" , boost :: regex :: extended
, "abcbd" , match_default
, make_array ( 0 , 5 , 3 , 4 , - 2 , - 2 ));
215 TEST_REGEX_SEARCH ( "a(b|c?)+d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 3 , 3 , - 2 , - 2 ));
216 TEST_REGEX_SEARCH ( "a(b+|((c)*))+d" , perl
, "abd" , match_default
, make_array ( 0 , 3 , 2 , 2 , 2 , 2 , - 1 , - 1 , - 2 , - 2 ));
217 TEST_REGEX_SEARCH ( "a(b+|((c)*))+d" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , 3 , 3 , 3 , 3 , 2 , 3 , - 2 , - 2 ));
219 TEST_REGEX_SEARCH ( "a(b|c?)+d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , - 2 , - 2 ));
220 TEST_REGEX_SEARCH ( "a(b|((c)*))+d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , 2 , 3 , 2 , 3 , - 2 , - 2 ));
221 TEST_REGEX_SEARCH ( "a(b+|((c)*))+d" , boost :: regex :: extended
, "abd" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
222 TEST_REGEX_SEARCH ( "a(b+|((c)*))+d" , boost :: regex :: extended
, "abcd" , match_default
, make_array ( 0 , 4 , 2 , 3 , 2 , 3 , 2 , 3 , - 2 , - 2 ));
224 TEST_REGEX_SEARCH ( " \\ **?/{}" , literal
, " \\ **?/{}" , match_default
, make_array ( 0 , 7 , - 2 , - 2 ));
225 TEST_REGEX_SEARCH ( " \\ **?/{}" , literal
, " \\ **?/{" , match_default
, make_array (- 2 , - 2 ));
226 // try to match C++ syntax elements:
228 TEST_REGEX_SEARCH ( "//[^ \\ n]*" , perl
, "++i //here is a line comment \n " , match_default
, make_array ( 4 , 28 , - 2 , - 2 ));
230 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , perl
, "/* here is a block comment */" , match_default
, make_array ( 0 , 29 , 26 , 27 , - 2 , - 2 ));
231 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , perl
, "/**/" , match_default
, make_array ( 0 , 4 , - 1 , - 1 , - 2 , - 2 ));
232 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , perl
, "/***/" , match_default
, make_array ( 0 , 5 , - 1 , - 1 , - 2 , - 2 ));
233 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , perl
, "/****/" , match_default
, make_array ( 0 , 6 , - 1 , - 1 , - 2 , - 2 ));
234 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , perl
, "/*****/" , match_default
, make_array ( 0 , 7 , - 1 , - 1 , - 2 , - 2 ));
235 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , perl
, "/*****/*/" , match_default
, make_array ( 0 , 7 , - 1 , - 1 , - 2 , - 2 ));
236 // preprossor directives:
237 TEST_REGEX_SEARCH ( "^[[:blank:]]*#([^ \\ n]* \\\\ [[:space:]]+)*[^ \\ n]*" , perl
, "#define some_symbol" , match_default
, make_array ( 0 , 19 , - 1 , - 1 , - 2 , - 2 ));
238 TEST_REGEX_SEARCH ( "^[[:blank:]]*#([^ \\ n]* \\\\ [[:space:]]+)*[^ \\ n]*" , perl
, "#define some_symbol(x) #x" , match_default
, make_array ( 0 , 25 , - 1 , - 1 , - 2 , - 2 ));
239 // try to match C++ syntax elements:
241 TEST_REGEX_SEARCH ( "//[^ \\ n]*" , boost :: regex :: extended
&~ no_escape_in_lists
, "++i //here is a line comment \n " , match_default
, make_array ( 4 , 28 , - 2 , - 2 ));
243 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , boost :: regex :: extended
&~ no_escape_in_lists
, "/* here is a block comment */" , match_default
, make_array ( 0 , 29 , 26 , 27 , - 2 , - 2 ));
244 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , boost :: regex :: extended
&~ no_escape_in_lists
, "/**/" , match_default
, make_array ( 0 , 4 , - 1 , - 1 , - 2 , - 2 ));
245 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , boost :: regex :: extended
&~ no_escape_in_lists
, "/***/" , match_default
, make_array ( 0 , 5 , - 1 , - 1 , - 2 , - 2 ));
246 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , boost :: regex :: extended
&~ no_escape_in_lists
, "/****/" , match_default
, make_array ( 0 , 6 , - 1 , - 1 , - 2 , - 2 ));
247 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , boost :: regex :: extended
&~ no_escape_in_lists
, "/*****/" , match_default
, make_array ( 0 , 7 , - 1 , - 1 , - 2 , - 2 ));
248 TEST_REGEX_SEARCH ( "/ \\ *([^*]| \\ *+[^*/])* \\ *+/" , boost :: regex :: extended
&~ no_escape_in_lists
, "/*****/*/" , match_default
, make_array ( 0 , 7 , - 1 , - 1 , - 2 , - 2 ));
249 // preprossor directives:
250 TEST_REGEX_SEARCH ( "^[[:blank:]]*#([^ \\ n]* \\\\ [[:space:]]+)*[^ \\ n]*" , boost :: regex :: extended
&~ no_escape_in_lists
, "#define some_symbol" , match_default
, make_array ( 0 , 19 , - 1 , - 1 , - 2 , - 2 ));
251 TEST_REGEX_SEARCH ( "^[[:blank:]]*#([^ \\ n]* \\\\ [[:space:]]+)*[^ \\ n]*" , boost :: regex :: extended
&~ no_escape_in_lists
, "#define some_symbol(x) #x" , match_default
, make_array ( 0 , 25 , - 1 , - 1 , - 2 , - 2 ));
253 TEST_REGEX_SEARCH ( "^[[:blank:]]*#([^ \\ n]* \\\\ [[:space:]]+)*[^ \\ n]*" , perl
, "#define some_symbol(x) \\ \r\n foo(); \\\r\n printf(#x);" , match_default
, make_array ( 0 , 53 , 30 , 42 , - 2 , - 2 ));
254 // POSIX leftmost longest checks:
255 TEST_REGEX_SEARCH ( "(aaa)|( \\ w+)" , boost :: regex :: extended
&~ no_escape_in_lists
, "a" , match_default
, make_array ( 0 , 1 , - 1 , - 1 , 0 , 1 , - 2 , - 2 ));
256 TEST_REGEX_SEARCH ( "(aaa)|( \\ w+)" , boost :: regex :: extended
&~ no_escape_in_lists
, "aa" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , 0 , 2 , - 2 , - 2 ));
257 TEST_REGEX_SEARCH ( "(aaa)|( \\ w+)" , boost :: regex :: extended
&~ no_escape_in_lists
, "aaa" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 1 , - 1 , - 2 , - 2 ));
258 TEST_REGEX_SEARCH ( "(aaa)|( \\ w+)" , boost :: regex :: extended
&~ no_escape_in_lists
, "aaaa" , match_default
, make_array ( 0 , 4 , - 1 , - 1 , 0 , 4 , - 2 , - 2 ));
259 TEST_REGEX_SEARCH ( "($)|( \\ >)" , boost :: regex :: extended
&~ no_escape_in_lists
, "aaaa" , match_default
, make_array ( 4 , 4 , 4 , 4 , - 1 , - 1 , - 2 , - 2 ));
260 TEST_REGEX_SEARCH ( "($)|( \\ >)" , boost :: regex :: extended
&~ no_escape_in_lists
, "aaaa" , match_default
| match_not_eol
, make_array ( 4 , 4 , - 1 , - 1 , 4 , 4 , - 2 , - 2 ));
261 TEST_REGEX_SEARCH ( "(aaa)(ab)*" , boost :: regex :: extended
, "aaaabab" , match_default
, make_array ( 0 , 7 , 0 , 3 , 5 , 7 , - 2 , - 2 ));
264 void test_tricky_cases3 ()
266 using namespace boost :: regex_constants
;
267 TEST_REGEX_SEARCH ( "((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?" , perl
, "0xFF" , match_default
, make_array ( 0 , 4 , 0 , 4 , 0 , 4 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
268 TEST_REGEX_SEARCH ( "((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?" , perl
, "35" , match_default
, make_array ( 0 , 2 , 0 , 2 , - 1 , - 1 , 0 , 2 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
269 TEST_REGEX_SEARCH ( "((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?" , perl
, "0xFFu" , match_default
, make_array ( 0 , 5 , 0 , 4 , 0 , 4 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
270 TEST_REGEX_SEARCH ( "((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?" , perl
, "0xFFL" , match_default
, make_array ( 0 , 5 , 0 , 4 , 0 , 4 , - 1 , - 1 , 4 , 5 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
271 TEST_REGEX_SEARCH ( "((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)?" , perl
, "0xFFFFFFFFFFFFFFFFuint64" , match_default
, make_array ( 0 , 24 , 0 , 18 , 0 , 18 , - 1 , - 1 , 19 , 24 , 19 , 24 , 22 , 24 , - 2 , - 2 ));
273 TEST_REGEX_SEARCH ( "'([^ \\\\ ']| \\\\ .)*'" , perl
, "' \\ x3A'" , match_default
, make_array ( 0 , 6 , 4 , 5 , - 2 , - 2 ));
274 TEST_REGEX_SEARCH ( "'([^ \\\\ ']| \\\\ .)*'" , perl
, "' \\ ''" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
275 TEST_REGEX_SEARCH ( "'([^ \\\\ ']| \\\\ .)*'" , perl
, "' \\ n'" , match_default
, make_array ( 0 , 4 , 1 , 3 , - 2 , - 2 ));
277 TEST_REGEX_SEARCH ( "^[[:blank:]]*#([^ \\ n]* \\\\ [[:space:]]+)*[^ \\ n]*" , awk
, "#define some_symbol(x) \\ \r\n foo(); \\\r\n printf(#x);" , match_default
, make_array ( 0 , 53 , 28 , 42 , - 2 , - 2 ));
278 // now try and test some unicode specific characters:
279 #if !BOOST_WORKAROUND(__BORLANDC__, < 0x560)
280 TEST_REGEX_SEARCH_W ( L
"[[:unicode:]]+" , perl
, L
"a \x03 00 \x04 00z" , match_default
, make_array ( 1 , 3 , - 2 , - 2 ));
281 TEST_REGEX_SEARCH_W ( L
"[ \x10 - \xff ]" , perl
, L
" \x03 00 \x04 00" , match_default
, make_array (- 2 , - 2 ));
282 TEST_REGEX_SEARCH_W ( L
"[\01-\05]{5}" , perl
, L
" \x03 00 \x04 00 \x03 00 \x04 00 \x03 00 \x04 00" , match_default
, make_array (- 2 , - 2 ));
283 #if !BOOST_WORKAROUND(__DECCXX_VER, BOOST_TESTED_AT(60590042))
284 TEST_REGEX_SEARCH_W ( L
"[ \x30 0- \x40 0]+" , perl
, L
" \x03 00 \x04 00 \x03 00 \x04 00 \x03 00 \x04 00" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
285 TEST_REGEX_SEARCH_W ( L
"[ \\ x{300}- \\ x{400}]+" , perl
, L
" \x03 00 \x04 00 \x03 00 \x04 00 \x03 00 \x04 00" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
286 TEST_REGEX_SEARCH_W ( L
" \\ x{300} \\ x{400}+" , perl
, L
" \x03 00 \x04 00 \x04 00 \x04 00 \x04 00 \x04 00" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
289 // finally try some case insensitive matches:
290 TEST_REGEX_SEARCH ( "0123456789@abcdefghijklmnopqrstuvwxyz \\ [ \\\\\\ ] \\ ^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ \\ { \\ | \\ }" , perl
| icase
, "0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ \\ ]^_`abcdefghijklmnopqrstuvwxyz{|}" , match_default
, make_array ( 0 , 72 , - 2 , - 2 ));
291 TEST_REGEX_SEARCH ( "a" , perl
| icase
, "A" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
292 TEST_REGEX_SEARCH ( "A" , perl
| icase
, "a" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
293 TEST_REGEX_SEARCH ( "[abc]+" , perl
| icase
, "abcABC" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
294 TEST_REGEX_SEARCH ( "[ABC]+" , perl
| icase
, "abcABC" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
295 TEST_REGEX_SEARCH ( "[a-z]+" , perl
| icase
, "abcABC" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
296 TEST_REGEX_SEARCH ( "[A-Z]+" , perl
| icase
, "abzANZ" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
297 TEST_REGEX_SEARCH ( "[a-Z]+" , perl
| icase
, "abzABZ" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
298 TEST_REGEX_SEARCH ( "[A-z]+" , perl
| icase
, "abzABZ" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
299 TEST_REGEX_SEARCH ( "[[:lower:]]+" , perl
| icase
, "abyzABYZ" , match_default
, make_array ( 0 , 8 , - 2 , - 2 ));
300 TEST_REGEX_SEARCH ( "[[:upper:]]+" , perl
| icase
, "abzABZ" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
301 TEST_REGEX_SEARCH ( "[[:word:]]+" , perl
| icase
, "abcZZZ" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
302 TEST_REGEX_SEARCH ( "[[:alpha:]]+" , perl
| icase
, "abyzABYZ" , match_default
, make_array ( 0 , 8 , - 2 , - 2 ));
303 TEST_REGEX_SEARCH ( "[[:alnum:]]+" , perl
| icase
, "09abyzABYZ" , match_default
, make_array ( 0 , 10 , - 2 , - 2 ));
305 // known and suspected bugs:
306 TEST_REGEX_SEARCH ( " \\ (" , perl
, "(" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
307 TEST_REGEX_SEARCH ( " \\ )" , perl
, ")" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
308 TEST_REGEX_SEARCH ( " \\ $" , perl
, "$" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
309 TEST_REGEX_SEARCH ( " \\ ^" , perl
, "^" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
310 TEST_REGEX_SEARCH ( " \\ ." , perl
, "." , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
311 TEST_REGEX_SEARCH ( " \\ *" , perl
, "*" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
312 TEST_REGEX_SEARCH ( " \\ +" , perl
, "+" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
313 TEST_REGEX_SEARCH ( " \\ ?" , perl
, "?" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
314 TEST_REGEX_SEARCH ( " \\ [" , perl
, "[" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
315 TEST_REGEX_SEARCH ( " \\ ]" , perl
, "]" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
316 TEST_REGEX_SEARCH ( " \\ |" , perl
, "|" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
317 TEST_REGEX_SEARCH ( " \\\\ " , perl
, " \\ " , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
318 TEST_REGEX_SEARCH ( "#" , perl
, "#" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
319 TEST_REGEX_SEARCH ( " \\ #" , perl
, "#" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
320 TEST_REGEX_SEARCH ( "a-" , perl
, "a-" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
321 TEST_REGEX_SEARCH ( " \\ -" , perl
, "-" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
322 TEST_REGEX_SEARCH ( " \\ {" , perl
, "{" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
323 TEST_REGEX_SEARCH ( " \\ }" , perl
, "}" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
324 TEST_REGEX_SEARCH ( "0" , perl
, "0" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
325 TEST_REGEX_SEARCH ( "1" , perl
, "1" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
326 TEST_REGEX_SEARCH ( "9" , perl
, "9" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
327 TEST_REGEX_SEARCH ( "b" , perl
, "b" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
328 TEST_REGEX_SEARCH ( "B" , perl
, "B" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
329 TEST_REGEX_SEARCH ( "<" , perl
, "<" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
330 TEST_REGEX_SEARCH ( ">" , perl
, ">" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
331 TEST_REGEX_SEARCH ( "w" , perl
, "w" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
332 TEST_REGEX_SEARCH ( "W" , perl
, "W" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
333 TEST_REGEX_SEARCH ( "`" , perl
, "`" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
334 TEST_REGEX_SEARCH ( " " , perl
, " " , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
335 TEST_REGEX_SEARCH ( " \\ n" , perl
, " \n " , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
336 TEST_REGEX_SEARCH ( "," , perl
, "," , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
337 TEST_REGEX_SEARCH ( "a" , perl
, "a" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
338 TEST_REGEX_SEARCH ( "f" , perl
, "f" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
339 TEST_REGEX_SEARCH ( "n" , perl
, "n" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
340 TEST_REGEX_SEARCH ( "r" , perl
, "r" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
341 TEST_REGEX_SEARCH ( "t" , perl
, "t" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
342 TEST_REGEX_SEARCH ( "v" , perl
, "v" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
343 TEST_REGEX_SEARCH ( "c" , perl
, "c" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
344 TEST_REGEX_SEARCH ( "x" , perl
, "x" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
345 TEST_REGEX_SEARCH ( ":" , perl
, ":" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
346 TEST_REGEX_SEARCH ( "( \\ .[[:alnum:]]+){2}" , perl
, "w.a.b " , match_default
, make_array ( 1 , 5 , 3 , 5 , - 2 , - 2 ));
348 // new bugs detected in spring 2003:
349 TEST_REGEX_SEARCH ( "b" , perl
, "abc" , match_default
| match_continuous
, make_array (- 2 , - 2 ));
350 TEST_REGEX_SEARCH ( "(?!foo)bar" , perl
, "foobar" , match_default
, make_array ( 3 , 6 , - 2 , - 2 ));
351 TEST_REGEX_SEARCH ( "(?!foo)bar" , perl
, "??bar" , match_default
, make_array ( 2 , 5 , - 2 , - 2 ));
352 TEST_REGEX_SEARCH ( "(?!foo)bar" , perl
, "barfoo" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
353 TEST_REGEX_SEARCH ( "(?!foo)bar" , perl
, "bar??" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
354 TEST_REGEX_SEARCH ( "(?!foo)bar" , perl
, "bar" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
355 TEST_REGEX_SEARCH ( "a \\ Z" , perl
, "a \n b" , match_default
, make_array (- 2 , - 2 ));
356 TEST_REGEX_SEARCH ( "()" , perl
, "abc" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , 1 , 1 , 1 , 1 , - 2 , 2 , 2 , 2 , 2 , - 2 , 3 , 3 , 3 , 3 , - 2 , - 2 ));
357 TEST_REGEX_SEARCH ( "^()" , perl
, "abc" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , - 2 ));
358 TEST_REGEX_SEARCH ( "^()+" , perl
, "abc" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , - 2 ));
359 TEST_REGEX_SEARCH ( "^(){1}" , perl
, "abc" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , - 2 ));
360 TEST_REGEX_SEARCH ( "^(){2}" , perl
, "abc" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , - 2 ));
361 TEST_REGEX_SEARCH ( "^((){2})" , perl
, "abc" , match_default
, make_array ( 0 , 0 , 0 , 0 , 0 , 0 , - 2 , - 2 ));
362 TEST_REGEX_SEARCH ( "()" , perl
, "" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , - 2 ));
363 TEST_REGEX_SEARCH ( "() \\ 1" , perl
, "" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , - 2 ));
364 TEST_REGEX_SEARCH ( "() \\ 1" , perl
, "a" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , 1 , 1 , 1 , 1 , - 2 , - 2 ));
365 TEST_REGEX_SEARCH ( "a() \\ 1b" , perl
, "ab" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
366 TEST_REGEX_SEARCH ( "a()b \\ 1" , perl
, "ab" , match_default
, make_array ( 0 , 2 , 1 , 1 , - 2 , - 2 ));
367 TEST_REGEX_SEARCH ( "([a-c]+) \\ 1" , perl
, "abcbc" , match_default
, make_array ( 1 , 5 , 1 , 3 , - 2 , - 2 ));
368 TEST_REGEX_SEARCH ( ".+abc" , perl
, "xxxxxxxxyyyyyyyyab" , match_default
, make_array (- 2 , - 2 ));
369 TEST_REGEX_SEARCH ( "(.+) \\ 1" , perl
, "abcdxxxyyyxxxyyy" , match_default
, make_array ( 4 , 16 , 4 , 10 , - 2 , - 2 ));
370 // this should not throw:
371 TEST_REGEX_SEARCH ( "[_]+$" , perl
, "___________________________________________x" , match_default
, make_array (- 2 , - 2 ));
372 // bug in V4 code detected 2004/05/12:
373 TEST_REGEX_SEARCH ( " \\ l+" , perl
| icase
, "abcXYZ" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
374 TEST_REGEX_SEARCH ( " \\ u+" , perl
| icase
, "abcXYZ" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
375 TEST_REGEX_SEARCH ( "(a)(?:b)" , perl
| nosubs
, "ab" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
376 // bug reported 2006-09-20:
377 TEST_REGEX_SEARCH ( "(?: \\ d{9}.*){2}" , perl
, "123456789dfsdfsdfsfsdfds123456789b" , match_default
, make_array ( 0 , 34 , - 2 , - 2 ));
378 TEST_REGEX_SEARCH ( "(?: \\ d{9}.*){2}" , perl
, "123456789dfsdfsdfsfsdfds12345678" , match_default
, make_array (- 2 , - 2 ));
379 TEST_REGEX_SEARCH ( "(?: \\ d{9}.*){2}" , perl
, "123456789dfsdfsdfsfsdfds" , match_default
, make_array (- 2 , - 2 ));
380 TEST_REGEX_SEARCH ( "^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])( \\ .(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3}$" , perl
, "1.2.03" , match_default
, make_array (- 2 , - 2 ));
381 TEST_REGEX_SEARCH ( "^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])( \\ .(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3,4}$" , perl
, "1.2.03" , match_default
, make_array (- 2 , - 2 ));
382 TEST_REGEX_SEARCH ( "^(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])( \\ .(25[0-5]|2[0-4][0-9]|[0-1]?[0-9]?[0-9])){3,4}?$" , perl
, "1.2.03" , match_default
, make_array (- 2 , - 2 ));
386 // the strings in the next test case are too long for most compilers to cope with,
387 // we have to break them up and call the testing procs directly rather than rely on the macros:
389 static const char * big_text
= "00001 01 \r\n 00002 02 1 2 3 4 5 6"
390 "7 8 9 0 \r\n 00003 03 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 \r\n "
391 "00004 04 \r\n 00005 05 \r\n 00006 06 "
392 "Seite: 0001 \r\n 00007 07 "
393 "StartSeitEEnde: 0001 \r\n 00008 08 "
394 "StartSeiTe Ende: 0001 \r\n 00009 09 "
395 "Start seiteEnde: 0001 \r\n 00010 10 "
396 "28.2.03 \r\n 00011 11 "
397 "Page: 0001 \r\n 00012 12 "
398 "Juhu die Erste: 0001 \r\n 00013 13 "
399 "Es war einmal! 0001 \r\n 00014 14 ABCDEFGHIJKLMNOPQRSTUVWXYZ0001 \r\n "
400 "00015 15 abcdefghijklmnopqrstuvwxyz0001 \r\n "
401 "00016 16 lars.schmeiser@gft.com \r\n 00017 17 \r\n "
402 "00018 18 \r\n 00019 19 \r\n 00020 20 \r\n 00021 21 1 2 3 4 5 "
404 "00022 22 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 \r\n "
405 "00023 01 \r\n 00024 02 1 2 3 4 5 6 7 8 9 0 \r\n "
406 "00025 03 0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 \r\n "
407 "00026 04 \r\n 00027 05 \r\n 00028 06 "
408 "Seite: 0002 \r\n 00029 07 StartSeitEEnde: 0002 \r\n "
410 "StartSeiTe Ende: 0002 \r\n 00031 09 "
411 "Start seiteEnde: 0002 \r\n 00032 10 "
412 "28.02.2003 \r\n 00033 11 "
413 "Page: 0002 \r\n 00034 12 "
414 "Juhu die Erste: 0002 \r\n 00035 13 "
415 "Es war einmal! 0002 \r\n 00036 14 ABCDEFGHIJKLMNOPQRSTUVWXYZ0002 \r\n 00037 "
416 "15 abcdefghijklmnopqrstuvwxyz0002 \r\n 00038 16 "
417 "lars.schmeiser@194.1.12.111 \r\n 00039 17 \r\n 00040 18 \r\n 00041 19 \r\n "
418 "00042 20 \r\n 00043 21 1 2 3 4 5 6 7 8 9 0 \r\n " ;
421 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
422 "(.* \\ r \\ n){3}.* abcdefghijklmnopqrstuvwxyz.* \\ r \\ n" ,
423 perl
, big_text
, match_default
| match_not_dot_newline
,
424 make_array ( 753 , 1076 , 934 , 1005 , - 2 , 2143 , 2466 , 2324 , 2395 , - 2 , - 2 ));
425 test ( char ( 0 ), test_regex_search_tag ());
427 #if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
429 std :: string
st ( big_text
);
430 test_info
< wchar_t >:: set_info ( __FILE__
, __LINE__
,
431 L
"(.* \\ r \\ n){3}.* abcdefghijklmnopqrstuvwxyz.* \\ r \\ n" ,
432 perl
, std :: wstring ( st
. begin (), st
. end ()), match_default
| match_not_dot_newline
,
433 make_array ( 753 , 1076 , 934 , 1005 , - 2 , 2143 , 2466 , 2324 , 2395 , - 2 , - 2 ));
434 test ( char ( 0 ), test_regex_search_tag ());
439 const unsigned char bytes
[] = { 0x15 , 0x0 , 0x28 , 0x28 , 0x85 , 0x7c , 0xb5 , 0x7c , 0x7c , 0x7c , 0x7c , 0x0 , 0x7c , 0x7c , 0x16 , 0x7c , 0x7c , 0x7c , 0x67 , 0x85 , 0x0 , 0xb5 , 0x7c , 0x7c , 0x7c , 0x7c , 0x7c , 0x7c , 0x7c , 0x7c , 0x7c , 0x7c , 0x7c , 0x3d , 0x0 , 0x7c , 0x7c , 0x29 , 0x3f , 0x28 , 0x3f , 0x31 , 0x29 , 0xb5 , 0x2a , 0xb5 , 0xff , 0xb5 , 0xb5 , 0x85 , 0xb5 , 0x67 , 0xa , 0x2a , 0xf7 , 0x2a , 0x7c , 0x7c , 0x32 , 0x29 , 0x5c , 0x5a , 0x3a , 0x6b };
440 std :: string
str (( char *) bytes
, sizeof ( bytes
));
441 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
443 perl
, str
. c_str (), match_default
| match_not_dot_newline
,
444 make_array ( 0 , 1 , - 2 , - 2 ));
445 test ( char ( 0 ), test_regex_search_tag ());