]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/regex/test/regress/test_perl_ex.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)
20 void test_independent_subs ()
22 using namespace boost :: regex_constants
;
23 TEST_REGEX_SEARCH ( "(?>^abc)" , perl
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
24 TEST_REGEX_SEARCH ( "(?>^abc)" , perl
, "def \n abc" , match_default
, make_array ( 4 , 7 , - 2 , - 2 ));
25 TEST_REGEX_SEARCH ( "(?>^abc)" , perl
, "defabc" , match_default
, make_array (- 2 , - 2 ));
26 TEST_REGEX_SEARCH ( "(?>.*/)foo" , perl
, "/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/" , match_default
, make_array (- 2 , - 2 ));
27 TEST_REGEX_SEARCH ( "(?>.*/)foo" , perl
, "/this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo" , match_default
, make_array ( 0 , 67 , - 2 , - 2 ));
28 TEST_REGEX_SEARCH ( "(?>( \\ . \\ d \\ d[1-9]?)) \\ d+" , perl
, "1.230003938" , match_default
, make_array ( 1 , 11 , 1 , 4 , - 2 , - 2 ));
29 TEST_REGEX_SEARCH ( "(?>( \\ . \\ d \\ d[1-9]?)) \\ d+" , perl
, "1.875000282" , match_default
, make_array ( 1 , 11 , 1 , 5 , - 2 , - 2 ));
30 TEST_REGEX_SEARCH ( "(?>( \\ . \\ d \\ d[1-9]?)) \\ d+" , perl
, "1.235" , match_default
, make_array (- 2 , - 2 ));
31 TEST_REGEX_SEARCH ( "^((?> \\ w+)|(?> \\ s+))*$" , perl
, "now is the time for all good men to come to the aid of the party" , match_default
, make_array ( 0 , 64 , 59 , 64 , - 2 , - 2 ));
32 TEST_REGEX_SEARCH ( "^((?> \\ w+)|(?> \\ s+))*$" , perl
, "this is not a line with only words and spaces!" , match_default
, make_array (- 2 , - 2 ));
33 TEST_REGEX_SEARCH ( "((?> \\ d+))( \\ w)" , perl
, "12345a" , match_default
, make_array ( 0 , 6 , 0 , 5 , 5 , 6 , - 2 , - 2 ));
34 TEST_REGEX_SEARCH ( "((?> \\ d+))( \\ w)" , perl
, "12345+" , match_default
, make_array (- 2 , - 2 ));
35 TEST_REGEX_SEARCH ( "((?> \\ d+))( \\ d)" , perl
, "12345" , match_default
, make_array (- 2 , - 2 ));
36 TEST_REGEX_SEARCH ( "(?>a+)b" , perl
, "aaab" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
37 TEST_REGEX_SEARCH ( "((?>a+)b)" , perl
, "aaab" , match_default
, make_array ( 0 , 4 , 0 , 4 , - 2 , - 2 ));
38 TEST_REGEX_SEARCH ( "(?>(a+))b" , perl
, "aaab" , match_default
, make_array ( 0 , 4 , 0 , 3 , - 2 , - 2 ));
39 TEST_REGEX_SEARCH ( "(?>b)+" , perl
, "aaabbbccc" , match_default
, make_array ( 3 , 6 , - 2 , - 2 ));
40 TEST_REGEX_SEARCH ( "(?>a+|b+|c+)*c" , perl
, "aaabbbbccccd" , match_default
, make_array ( 0 , 8 , - 2 , 8 , 9 , - 2 , 9 , 10 , - 2 , 10 , 11 , - 2 , - 2 ));
41 TEST_REGEX_SEARCH ( "((?>[^()]+)| \\ ([^()]* \\ ))+" , perl
, "((abc(ade)ufh()()x" , match_default
, make_array ( 2 , 18 , 17 , 18 , - 2 , - 2 ));
42 TEST_REGEX_SEARCH ( " \\ (((?>[^()]+)| \\ ([^()]+ \\ ))+ \\ )" , perl
, "(abc)" , match_default
, make_array ( 0 , 5 , 1 , 4 , - 2 , - 2 ));
43 TEST_REGEX_SEARCH ( " \\ (((?>[^()]+)| \\ ([^()]+ \\ ))+ \\ )" , perl
, "(abc(def)xyz)" , match_default
, make_array ( 0 , 13 , 9 , 12 , - 2 , - 2 ));
44 TEST_REGEX_SEARCH ( " \\ (((?>[^()]+)| \\ ([^()]+ \\ ))+ \\ )" , perl
, "((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" , match_default
, make_array (- 2 , - 2 ));
46 TEST_REGEX_SEARCH ( "(?>a*)*" , perl
, "a" , match_default
, make_array ( 0 , 1 , - 2 , 1 , 1 , - 2 , - 2 ));
47 TEST_REGEX_SEARCH ( "(?>a*)*" , perl
, "aa" , match_default
, make_array ( 0 , 2 , - 2 , 2 , 2 , - 2 , - 2 ));
48 TEST_REGEX_SEARCH ( "(?>a*)*" , perl
, "aaaa" , match_default
, make_array ( 0 , 4 , - 2 , 4 , 4 , - 2 , - 2 ));
49 TEST_REGEX_SEARCH ( "(?>a*)*" , perl
, "a" , match_default
, make_array ( 0 , 1 , - 2 , 1 , 1 , - 2 , - 2 ));
50 TEST_REGEX_SEARCH ( "(?>a*)*" , perl
, "aaabcde" , match_default
, make_array ( 0 , 3 , - 2 , 3 , 3 , - 2 , 4 , 4 , - 2 , 5 , 5 , - 2 , 6 , 6 , - 2 , 7 , 7 , - 2 , - 2 ));
51 TEST_REGEX_SEARCH ( "((?>a*))*" , perl
, "aaaaa" , match_default
, make_array ( 0 , 5 , 5 , 5 , - 2 , 5 , 5 , 5 , 5 , - 2 , - 2 ));
52 TEST_REGEX_SEARCH ( "((?>a*))*" , perl
, "aabbaa" , match_default
, make_array ( 0 , 2 , 2 , 2 , - 2 , 2 , 2 , 2 , 2 , - 2 , 3 , 3 , 3 , 3 , - 2 , 4 , 6 , 6 , 6 , - 2 , 6 , 6 , 6 , 6 , - 2 , - 2 ));
53 TEST_REGEX_SEARCH ( "((?>a*?))*" , perl
, "aaaaa" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , 1 , 1 , 1 , 1 , - 2 , 2 , 2 , 2 , 2 , - 2 , 3 , 3 , 3 , 3 , - 2 , 4 , 4 , 4 , 4 , - 2 , 5 , 5 , 5 , 5 , - 2 , - 2 ));
54 TEST_REGEX_SEARCH ( "((?>a*?))*" , perl
, "aabbaa" , match_default
, make_array ( 0 , 0 , 0 , 0 , - 2 , 1 , 1 , 1 , 1 , - 2 , 2 , 2 , 2 , 2 , - 2 , 3 , 3 , 3 , 3 , - 2 , 4 , 4 , 4 , 4 , - 2 , 5 , 5 , 5 , 5 , - 2 , 6 , 6 , 6 , 6 , - 2 , - 2 ));
55 TEST_REGEX_SEARCH ( "word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" , perl
, "word cat dog elephant mussel cow horse canary baboon snake shark otherword" , match_default
, make_array ( 0 , 74 , - 2 , - 2 ));
56 TEST_REGEX_SEARCH ( "word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword" , perl
, "word cat dog elephant mussel cow horse canary baboon snake shark" , match_default
, make_array (- 2 , - 2 ));
57 TEST_REGEX_SEARCH ( "word (?>[a-zA-Z0-9]+ ){0,30}otherword" , perl
, "word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope" , match_default
, make_array (- 2 , - 2 ));
58 TEST_REGEX_SEARCH ( "word (?>[a-zA-Z0-9]+ ){0,30}otherword" , perl
, "word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I really really hope otherword" , match_default
, make_array (- 2 , - 2 ));
59 TEST_REGEX_SEARCH ( "((?>Z)+|A)+" , perl
, "ZABCDEFG" , match_default
, make_array ( 0 , 2 , 1 , 2 , - 2 , - 2 ));
60 TEST_INVALID_REGEX ( "((?>)+|A)+" , perl
);
63 void test_conditionals ()
65 using namespace boost :: regex_constants
;
66 TEST_REGEX_SEARCH ( "(?:(a)|b)(?(1)A|B)" , perl
, "aA" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
67 TEST_REGEX_SEARCH ( "(?:(a)|b)(?(1)A|B)" , perl
, "bB" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
68 TEST_REGEX_SEARCH ( "(?:(a)|b)(?(1)A|B)" , perl
, "aB" , match_default
, make_array (- 2 , - 2 ));
69 TEST_REGEX_SEARCH ( "(?:(a)|b)(?(1)A|B)" , perl
, "bA" , match_default
, make_array (- 2 , - 2 ));
71 TEST_REGEX_SEARCH ( "(a)?(?(1)A)B" , perl
, "aAB" , match_default
, make_array ( 0 , 3 , 0 , 1 , - 2 , - 2 ));
72 TEST_REGEX_SEARCH ( "(a)?(?(1)A)B" , perl
, "B" , match_default
, make_array ( 0 , 1 , - 1 , - 1 , - 2 , - 2 ));
73 TEST_REGEX_SEARCH ( "(a)?(?(1)|A)B" , perl
, "aB" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
74 TEST_REGEX_SEARCH ( "(a)?(?(1)|A)B" , perl
, "AB" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
76 TEST_REGEX_SEARCH ( "^(a)?(?(1)a|b)+$" , perl
, "aa" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
77 TEST_REGEX_SEARCH ( "^(a)?(?(1)a|b)+$" , perl
, "b" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
78 TEST_REGEX_SEARCH ( "^(a)?(?(1)a|b)+$" , perl
, "bb" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
79 TEST_REGEX_SEARCH ( "^(a)?(?(1)a|b)+$" , perl
, "ab" , match_default
, make_array (- 2 , - 2 ));
81 TEST_REGEX_SEARCH ( "^(?(?=abc) \\ w{3}:| \\ d \\ d)$" , perl
, "abc:" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
82 TEST_REGEX_SEARCH ( "^(?(?=abc) \\ w{3}:| \\ d \\ d)$" , perl
, "12" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
83 TEST_REGEX_SEARCH ( "^(?(?=abc) \\ w{3}:| \\ d \\ d)$" , perl
, "123" , match_default
, make_array (- 2 , - 2 ));
84 TEST_REGEX_SEARCH ( "^(?(?=abc) \\ w{3}:| \\ d \\ d)$" , perl
, "xyz" , match_default
, make_array (- 2 , - 2 ));
86 TEST_REGEX_SEARCH ( "^(?(?!abc) \\ d \\ d| \\ w{3}:)$" , perl
, "abc:" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
87 TEST_REGEX_SEARCH ( "^(?(?!abc) \\ d \\ d| \\ w{3}:)$" , perl
, "12" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
88 TEST_REGEX_SEARCH ( "^(?(?!abc) \\ d \\ d| \\ w{3}:)$" , perl
, "123" , match_default
, make_array (- 2 , - 2 ));
89 TEST_REGEX_SEARCH ( "^(?(?!abc) \\ d \\ d| \\ w{3}:)$" , perl
, "xyz" , match_default
, make_array (- 2 , - 2 ));
91 TEST_REGEX_SEARCH ( "(?(?<=foo)bar|cat)" , perl
, "foobar" , match_default
, make_array ( 3 , 6 , - 2 , - 2 ));
92 TEST_REGEX_SEARCH ( "(?(?<=foo)bar|cat)" , perl
, "cat" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
93 TEST_REGEX_SEARCH ( "(?(?<=foo)bar|cat)" , perl
, "fcat" , match_default
, make_array ( 1 , 4 , - 2 , - 2 ));
94 TEST_REGEX_SEARCH ( "(?(?<=foo)bar|cat)" , perl
, "focat" , match_default
, make_array ( 2 , 5 , - 2 , - 2 ));
95 TEST_REGEX_SEARCH ( "(?(?<=foo)bar|cat)" , perl
, "foocat" , match_default
, make_array (- 2 , - 2 ));
97 TEST_REGEX_SEARCH ( "(?(?<!foo)cat|bar)" , perl
, "foobar" , match_default
, make_array ( 3 , 6 , - 2 , - 2 ));
98 TEST_REGEX_SEARCH ( "(?(?<!foo)cat|bar)" , perl
, "cat" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
99 TEST_REGEX_SEARCH ( "(?(?<!foo)cat|bar)" , perl
, "fcat" , match_default
, make_array ( 1 , 4 , - 2 , - 2 ));
100 TEST_REGEX_SEARCH ( "(?(?<!foo)cat|bar)" , perl
, "focat" , match_default
, make_array ( 2 , 5 , - 2 , - 2 ));
101 TEST_REGEX_SEARCH ( "(?(?<!foo)cat|bar)" , perl
, "foocat" , match_default
, make_array (- 2 , - 2 ));
103 TEST_REGEX_SEARCH ( "( \\ ()?[^()]+(?(1) \\ ))" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , - 1 , - 1 , - 2 , - 2 ));
104 TEST_REGEX_SEARCH ( "( \\ ()?[^()]+(?(1) \\ ))" , perl
, "(abcd)" , match_default
, make_array ( 0 , 6 , 0 , 1 , - 2 , - 2 ));
105 TEST_REGEX_SEARCH ( "( \\ ()?[^()]+(?(1) \\ ))" , perl
, "the quick (abcd) fox" , match_default
, make_array ( 0 , 10 , - 1 , - 1 , - 2 , 10 , 16 , 10 , 11 , - 2 , 16 , 20 , - 1 , - 1 , - 2 , - 2 ));
106 TEST_REGEX_SEARCH ( "( \\ ()?[^()]+(?(1) \\ ))" , perl
, "(abcd" , match_default
, make_array ( 1 , 5 , - 1 , - 1 , - 2 , - 2 ));
108 TEST_REGEX_SEARCH ( "^(?(2)a|(1)(2))+$" , perl
, "12" , match_default
, make_array ( 0 , 2 , 0 , 1 , 1 , 2 , - 2 , - 2 ));
109 TEST_REGEX_SEARCH ( "^(?(2)a|(1)(2))+$" , perl
, "12a" , match_default
, make_array ( 0 , 3 , 0 , 1 , 1 , 2 , - 2 , - 2 ));
110 TEST_REGEX_SEARCH ( "^(?(2)a|(1)(2))+$" , perl
, "12aa" , match_default
, make_array ( 0 , 4 , 0 , 1 , 1 , 2 , - 2 , - 2 ));
111 TEST_REGEX_SEARCH ( "^(?(2)a|(1)(2))+$" , perl
, "1234" , match_default
, make_array (- 2 , - 2 ));
113 TEST_INVALID_REGEX ( "(a)(?(1)a|b|c)" , perl
);
114 TEST_INVALID_REGEX ( "(?(?=a)a|b|c)" , perl
);
115 TEST_INVALID_REGEX ( "(?(1a)" , perl
);
116 TEST_INVALID_REGEX ( "(?:(a)|b)(?(" , perl
);
117 TEST_INVALID_REGEX ( "(?:(a)|b)(?(1" , perl
);
118 TEST_INVALID_REGEX ( "(?:(a)|b)(?(1)" , perl
);
119 TEST_INVALID_REGEX ( "(?:(a)|b)(?(a" , perl
);
120 TEST_INVALID_REGEX ( "(?:(a)|b)(?(?" , perl
);
121 TEST_INVALID_REGEX ( "(?:(a)|b)(?(?:" , perl
);
122 TEST_INVALID_REGEX ( "(?:(a)|b)(?(?<" , perl
);
123 TEST_INVALID_REGEX ( "(?:(a)|b)(?(?<a" , perl
);
125 TEST_INVALID_REGEX ( "(?(?!#?)+)" , perl
);
126 TEST_INVALID_REGEX ( "(?(?=:-){0})" , perl
);
127 TEST_INVALID_REGEX ( "(?(123){1})" , perl
);
128 TEST_INVALID_REGEX ( "(?(?<=A)*)" , perl
);
129 TEST_INVALID_REGEX ( "(?(?<=A)+)" , perl
);
131 TEST_INVALID_REGEX ( "(?<!*|^)" , perl
);
132 TEST_INVALID_REGEX ( "(?<!*|A)" , perl
);
133 TEST_INVALID_REGEX ( "(?<=?|A)" , perl
);
134 TEST_INVALID_REGEX ( "(?<=*| \\ B)" , perl
);
135 TEST_INVALID_REGEX ( "(?<!a|bc)de" , perl
);
136 TEST_INVALID_REGEX ( "(?<=a|bc)de" , perl
);
139 TEST_REGEX_SEARCH ( " \\ b(?:(?:(one)|(two)|(three))(?:,| \\ b)){3,}(?(1)|(?!))(?(2)|(?!))(?(3)|(?!))" , perl
, "one,two,two, one" , match_default
, make_array (- 2 , - 2 ));
140 TEST_REGEX_SEARCH ( " \\ b(?:(?:(one)|(two)|(three))(?:,| \\ b)){3,}(?(1)|(?!))(?(2)|(?!))(?(3)|(?!))" , perl
, "one,three,two" , match_default
, make_array ( 0 , 13 , 0 , 3 , 10 , 13 , 4 , 9 , - 2 , - 2 ));
141 TEST_REGEX_SEARCH ( " \\ b(?:(?:(one)|(two)|(three))(?:,| \\ b)){3,}(?(1)|(?!))(?(2)|(?!))(?(3)|(?!))" , perl
, "one,two,two,one,three,four" , match_default
, make_array ( 0 , 22 , 12 , 15 , 8 , 11 , 16 , 21 , - 2 , - 2 ));
146 // test the (?imsx) construct:
147 using namespace boost :: regex_constants
;
148 TEST_INVALID_REGEX ( "(?imsx" , perl
);
149 TEST_INVALID_REGEX ( "(?g" , perl
);
150 TEST_INVALID_REGEX ( "(?im-sx" , perl
);
151 TEST_INVALID_REGEX ( "(?im-sx:" , perl
);
152 TEST_INVALID_REGEX ( "(?-g)" , perl
);
153 TEST_REGEX_SEARCH ( "(?-m)^abc" , perl
, "abc \n abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
154 TEST_REGEX_SEARCH ( "(?m)^abc" , perl
| no_mod_m
, "abc \n abc" , match_default
, make_array ( 0 , 3 , - 2 , 4 , 7 , - 2 , - 2 ));
155 TEST_REGEX_SEARCH ( "(?-m)^abc" , perl
, "abc \n abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
156 TEST_REGEX_SEARCH ( "(?m)^abc" , perl
| no_mod_m
, "abc \n abc" , match_default
, make_array ( 0 , 3 , - 2 , 4 , 7 , - 2 , - 2 ));
158 TEST_REGEX_SEARCH ( " ^ a (?# begins with a) b \\ sc (?# then b c) $ (?# then end)" , perl
| mod_x
, "ab c" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
159 TEST_REGEX_SEARCH ( " ^ a (?# begins with a) b \\ sc (?# then b c) $ (?# then end)" , perl
| mod_x
, "abc" , match_default
, make_array (- 2 , - 2 ));
160 TEST_REGEX_SEARCH ( " ^ a (?# begins with a) b \\ sc (?# then b c) $ (?# then end)" , perl
| mod_x
, "ab cde" , match_default
, make_array (- 2 , - 2 ));
161 TEST_REGEX_SEARCH ( "(?x) ^ a (?# begins with a) b \\ sc (?# then b c) $ (?# then end)" , perl
, "ab c" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
162 TEST_REGEX_SEARCH ( "(?x) ^ a (?# begins with a) b \\ sc (?# then b c) $ (?# then end)" , perl
, "abc" , match_default
, make_array (- 2 , - 2 ));
163 TEST_REGEX_SEARCH ( "(?x) ^ a (?# begins with a) b \\ sc (?# then b c) $ (?# then end)" , perl
, "ab cde" , match_default
, make_array (- 2 , - 2 ));
164 TEST_REGEX_SEARCH ( "^ a \\ b[c ]d $" , perl
| mod_x
, "a bcd" , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
165 TEST_REGEX_SEARCH ( "^ a \\ b[c ]d $" , perl
| mod_x
, "a b d" , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
166 TEST_REGEX_SEARCH ( "^ a \\ b[c ]d $" , perl
| mod_x
, "abcd" , match_default
, make_array (- 2 , - 2 ));
167 TEST_REGEX_SEARCH ( "^ a \\ b[c ]d $" , perl
| mod_x
, "ab d" , match_default
, make_array (- 2 , - 2 ));
169 TEST_REGEX_SEARCH ( "^1234(?# test newlines \n inside)" , perl
| mod_x
, "1234" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
170 TEST_REGEX_SEARCH ( "^1234 #comment in boost::regex::extended re \n " , perl
| mod_x
, "1234" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
171 TEST_REGEX_SEARCH ( "#rhubarb \n abcd" , perl
| mod_x
, "abcd" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
172 TEST_REGEX_SEARCH ( "^1234 #comment in boost::regex::extended re \r\n " , perl
| mod_x
, "1234" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
173 TEST_REGEX_SEARCH ( "#rhubarb \r\n abcd" , perl
| mod_x
, "abcd" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
174 TEST_REGEX_SEARCH ( "^abcd#rhubarb" , perl
| mod_x
, "abcd" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
175 TEST_REGEX_SEARCH ( "^abcd#rhubarb" , perl
, "abcd#rhubarb" , match_default
, make_array ( 0 , 12 , - 2 , - 2 ));
176 TEST_REGEX_SEARCH ( "^a b \n\n \f c", perl
| mod_x
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
178 TEST_REGEX_SEARCH ( "(?(?=[^a-z]+[a-z]) \\ d{2}-[a-z]{3}- \\ d{2} | \\ d{2}- \\ d{2}- \\ d{2} ) " , perl
| mod_x
, "12-sep-98" , match_default
, make_array ( 0 , 9 , - 2 , - 2 ));
179 TEST_REGEX_SEARCH ( "(?(?=[^a-z]+[a-z]) \\ d{2}-[a-z]{3}- \\ d{2} | \\ d{2}- \\ d{2}- \\ d{2} ) " , perl
| mod_x
, "12-09-98" , match_default
, make_array ( 0 , 8 , - 2 , - 2 ));
180 TEST_REGEX_SEARCH ( "(?(?=[^a-z]+[a-z]) \\ d{2}-[a-z]{3}- \\ d{2} | \\ d{2}- \\ d{2}- \\ d{2} ) " , perl
| mod_x
, "sep-12-98" , match_default
, make_array (- 2 , - 2 ));
181 TEST_REGEX_SEARCH ( "^a (?#xxx) (?#yyy) {3}c" , perl
| mod_x
, "aaac" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
182 TEST_REGEX_SEARCH ( "a\v b" , perl
| mod_x
, "ab" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
183 TEST_REGEX_SEARCH ( " abc \\ Q abc \\ Eabc" , perl
| mod_x
, "abc abcabc" , match_default
, make_array ( 0 , 10 , - 2 , - 2 ));
184 TEST_REGEX_SEARCH ( " abc \\ Q abc \\ Eabc" , perl
| mod_x
, "abcabcabc" , match_default
, make_array (- 2 , - 2 ));
185 TEST_REGEX_SEARCH ( "abc#comment \n \\ Q#not comment \n literal \\ E" , perl
| mod_x
, "abc#not comment \n literal" , match_default
, make_array ( 0 , 27 , - 2 , - 2 ));
186 TEST_REGEX_SEARCH ( "abc#comment \n \\ Q#not comment \n literal" , perl
| mod_x
, "abc#not comment \n literal" , match_default
, make_array ( 0 , 27 , - 2 , - 2 ));
187 TEST_REGEX_SEARCH ( "abc#comment \n \\ Q#not comment \n literal \\ E #more comment \n " , perl
| mod_x
, "abc#not comment \n literal" , match_default
, make_array ( 0 , 27 , - 2 , - 2 ));
188 TEST_REGEX_SEARCH ( "abc#comment \n \\ Q#not comment \n literal \\ E #more comment" , perl
| mod_x
, "abc#not comment \n literal" , match_default
, make_array ( 0 , 27 , - 2 , - 2 ));
190 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "a bcd e" , match_default
, make_array ( 0 , 7 , 0 , 4 , - 2 , - 2 ));
191 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "a b cd e" , match_default
, make_array (- 2 , - 2 ));
192 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "abcd e" , match_default
, make_array (- 2 , - 2 ));
193 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "a bcde" , match_default
, make_array (- 2 , - 2 ));
194 TEST_REGEX_SEARCH ( "(a b(?x)c d (?-x)e f)" , perl
, "a bcde f" , match_default
, make_array ( 0 , 8 , 0 , 8 , - 2 , - 2 ));
195 TEST_REGEX_SEARCH ( "(a b(?x)c d (?-x)e f)" , perl
, "abcdef" , match_default
, make_array (- 2 , - 2 ));
197 TEST_REGEX_SEARCH ( "a(?x: b c )d" , perl
, "XabcdY" , match_default
, make_array ( 1 , 5 , - 2 , - 2 ));
198 TEST_REGEX_SEARCH ( "a(?x: b c )d" , perl
, "Xa b c d Y" , match_default
, make_array (- 2 , - 2 ));
199 TEST_REGEX_SEARCH ( "((?x)x y z | a b c)" , perl
, "XabcY" , match_default
, make_array ( 1 , 4 , 1 , 4 , - 2 , - 2 ));
200 TEST_REGEX_SEARCH ( "((?x)x y z | a b c)" , perl
, "AxyzB" , match_default
, make_array ( 1 , 4 , 1 , 4 , - 2 , - 2 ));
202 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "a bcd e" , match_default
, make_array ( 0 , 7 , 0 , 4 , - 2 , - 2 ));
203 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "a b cd e" , match_default
, make_array (- 2 , - 2 ));
204 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "abcd e" , match_default
, make_array (- 2 , - 2 ));
205 TEST_REGEX_SEARCH ( "(a (?x)b c)d e" , perl
, "a bcde" , match_default
, make_array (- 2 , - 2 ));
206 TEST_REGEX_SEARCH ( "(a b(?x)c d (?-x)e f)" , perl
, "a bcde f" , match_default
, make_array ( 0 , 8 , 0 , 8 , - 2 , - 2 ));
207 TEST_REGEX_SEARCH ( "(a b(?x)c d (?-x)e f)" , perl
, "abcdef" , match_default
, make_array (- 2 , - 2 ));
209 TEST_INVALID_REGEX ( "a++(?#abc)+" , perl
);
210 TEST_INVALID_REGEX ( "a++(?#abc)?" , perl
);
211 TEST_INVALID_REGEX ( "a++(?#abc)*" , perl
);
212 TEST_INVALID_REGEX ( "a++(?#abc){2}" , perl
);
213 TEST_INVALID_REGEX ( "a++(?#abc)(?#more)+" , perl
);
214 TEST_REGEX_SEARCH ( "(?x) ab (?#first comment) (?#more) +" , perl
, "abbbb" , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
215 TEST_REGEX_SEARCH ( "ab(?#first comment)(?#more)+" , perl
, "abbbb" , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
216 TEST_REGEX_SEARCH ( "(?x) ab (?#first comment) (?#more) (c)" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 2 , 3 , - 2 , - 2 ));
217 TEST_REGEX_SEARCH ( "ab(?#first comment)(?#more)(c)" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 2 , 3 , - 2 , - 2 ));
218 TEST_REGEX_SEARCH ( "(?x) ab (?#first comment) (?#more) (?:c)" , perl
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
219 TEST_REGEX_SEARCH ( "ab(?#first comment)(?#more)(?:c)" , perl
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
224 using namespace boost :: regex_constants
;
225 TEST_INVALID_REGEX ( "(?i-" , perl
);
226 TEST_INVALID_REGEX ( "(?i-s" , perl
);
227 TEST_INVALID_REGEX ( "(?i-sd)" , perl
);
228 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 0 , 2 , - 2 , - 2 ));
229 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "aBc" , match_default
, make_array ( 0 , 3 , 0 , 2 , - 2 , - 2 ));
230 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "abC" , match_default
, make_array (- 2 , - 2 ));
231 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "aBC" , match_default
, make_array (- 2 , - 2 ));
232 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "Abc" , match_default
, make_array (- 2 , - 2 ));
233 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "ABc" , match_default
, make_array (- 2 , - 2 ));
234 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "ABC" , match_default
, make_array (- 2 , - 2 ));
235 TEST_REGEX_SEARCH ( "(a(?i)b)c" , perl
, "AbC" , match_default
, make_array (- 2 , - 2 ));
236 TEST_REGEX_SEARCH ( "(?i)[dh]og" , perl
, "hog" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
237 TEST_REGEX_SEARCH ( "(?i)[dh]og" , perl
, "dog" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
238 TEST_REGEX_SEARCH ( "(?i)[dh]og" , perl
, "Hog" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
239 TEST_REGEX_SEARCH ( "(?i)[dh]og" , perl
, "Dog" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
241 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 0 , 2 , - 2 , - 2 ));
242 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "aBc" , match_default
, make_array ( 0 , 3 , 0 , 2 , - 2 , - 2 ));
243 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "abC" , match_default
, make_array (- 2 , - 2 ));
244 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "aBC" , match_default
, make_array (- 2 , - 2 ));
245 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "Abc" , match_default
, make_array (- 2 , - 2 ));
246 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "ABc" , match_default
, make_array (- 2 , - 2 ));
247 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "ABC" , match_default
, make_array (- 2 , - 2 ));
248 TEST_REGEX_SEARCH ( "(a(?i)B)c" , perl
, "AbC" , match_default
, make_array (- 2 , - 2 ));
250 TEST_REGEX_SEARCH ( "a(?i:b)c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
251 TEST_REGEX_SEARCH ( "a(?i:b)c" , perl
, "aBc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
252 TEST_REGEX_SEARCH ( "a(?i:b)c" , perl
, "ABC" , match_default
, make_array (- 2 , - 2 ));
253 TEST_REGEX_SEARCH ( "a(?i:b)c" , perl
, "abC" , match_default
, make_array (- 2 , - 2 ));
254 TEST_REGEX_SEARCH ( "a(?i:b)c" , perl
, "aBC" , match_default
, make_array (- 2 , - 2 ));
256 TEST_REGEX_SEARCH ( "a(?i:b)*c" , perl
, "aBc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
257 TEST_REGEX_SEARCH ( "a(?i:b)*c" , perl
, "aBBc" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
258 TEST_REGEX_SEARCH ( "a(?i:b)*c" , perl
, "aBC" , match_default
, make_array (- 2 , - 2 ));
259 TEST_REGEX_SEARCH ( "a(?i:b)*c" , perl
, "aBBC" , match_default
, make_array (- 2 , - 2 ));
260 TEST_REGEX_SEARCH ( "(?i:j)|h" , perl
, "J" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
261 TEST_REGEX_SEARCH ( "(?i:j)|h" , perl
, "j" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
262 TEST_REGEX_SEARCH ( "(?i:j)|h" , perl
, "h" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
263 TEST_REGEX_SEARCH ( "(?i:j)|h" , perl
, "H" , match_default
, make_array (- 2 , - 2 ));
265 TEST_REGEX_SEARCH ( "a(?=b(?i)c) \\ w \\ wd" , perl
, "abcd" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
266 TEST_REGEX_SEARCH ( "a(?=b(?i)c) \\ w \\ wd" , perl
, "abCd" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
267 TEST_REGEX_SEARCH ( "a(?=b(?i)c) \\ w \\ wd" , perl
, "aBCd" , match_default
, make_array (- 2 , - 2 ));
268 TEST_REGEX_SEARCH ( "a(?=b(?i)c) \\ w \\ wd" , perl
, "abcD" , match_default
, make_array (- 2 , - 2 ));
270 TEST_REGEX_SEARCH ( "(?s-i:more.*than).*million" , perl
| icase
, "more than million" , match_default
, make_array ( 0 , 17 , - 2 , - 2 ));
271 TEST_REGEX_SEARCH ( "(?s-i:more.*than).*million" , perl
| icase
, "more than MILLION" , match_default
, make_array ( 0 , 17 , - 2 , - 2 ));
272 TEST_REGEX_SEARCH ( "(?s-i:more.*than).*million" , perl
| icase
, "more \n than Million" , match_default
, make_array ( 0 , 19 , - 2 , - 2 ));
273 TEST_REGEX_SEARCH ( "(?s-i:more.*than).*million" , perl
| icase
, "MORE THAN MILLION" , match_default
, make_array (- 2 , - 2 ));
274 TEST_REGEX_SEARCH ( "(?s-i:more.*than).*million" , perl
| icase
| no_mod_s
| no_mod_m
, "more \n than \n million" , match_default
, make_array (- 2 , - 2 ));
276 TEST_REGEX_SEARCH ( "(?:(?s-i)more.*than).*million" , perl
| icase
, "more than million" , match_default
, make_array ( 0 , 17 , - 2 , - 2 ));
277 TEST_REGEX_SEARCH ( "(?:(?s-i)more.*than).*million" , perl
| icase
, "more than MILLION" , match_default
, make_array ( 0 , 17 , - 2 , - 2 ));
278 TEST_REGEX_SEARCH ( "(?:(?s-i)more.*than).*million" , perl
| icase
, "more \n than Million" , match_default
, make_array ( 0 , 19 , - 2 , - 2 ));
279 TEST_REGEX_SEARCH ( "(?:(?s-i)more.*than).*million" , perl
| icase
, "MORE THAN MILLION" , match_default
, make_array (- 2 , - 2 ));
280 TEST_REGEX_SEARCH ( "(?:(?s-i)more.*than).*million" , perl
| icase
| no_mod_s
| no_mod_m
, "more \n than \n million" , match_default
, make_array (- 2 , - 2 ));
282 TEST_REGEX_SEARCH ( "(?>a(?i)b+)+c" , perl
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
283 TEST_REGEX_SEARCH ( "(?>a(?i)b+)+c" , perl
, "aBbc" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
284 TEST_REGEX_SEARCH ( "(?>a(?i)b+)+c" , perl
, "aBBc" , match_default
, make_array ( 0 , 4 , - 2 , - 2 ));
285 TEST_REGEX_SEARCH ( "(?>a(?i)b+)+c" , perl
, "Abc" , match_default
, make_array (- 2 , - 2 ));
286 TEST_REGEX_SEARCH ( "(?>a(?i)b+)+c" , perl
, "abAb" , match_default
, make_array (- 2 , - 2 ));
287 TEST_REGEX_SEARCH ( "(?>a(?i)b+)+c" , perl
, "abbC" , match_default
, make_array (- 2 , - 2 ));
289 TEST_REGEX_SEARCH ( "(?=a(?i)b) \\ w \\ wc" , perl
, "abc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
290 TEST_REGEX_SEARCH ( "(?=a(?i)b) \\ w \\ wc" , perl
, "aBc" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
291 TEST_REGEX_SEARCH ( "(?=a(?i)b) \\ w \\ wc" , perl
, "Ab" , match_default
, make_array (- 2 , - 2 ));
292 TEST_REGEX_SEARCH ( "(?=a(?i)b) \\ w \\ wc" , perl
, "abC" , match_default
, make_array (- 2 , - 2 ));
293 TEST_REGEX_SEARCH ( "(?=a(?i)b) \\ w \\ wc" , perl
, "aBC" , match_default
, make_array (- 2 , - 2 ));
295 TEST_REGEX_SEARCH ( "(?<=a(?i)b)( \\ w \\ w)c" , perl
, "abxxc" , match_default
, make_array ( 2 , 5 , 2 , 4 , - 2 , - 2 ));
296 TEST_REGEX_SEARCH ( "(?<=a(?i)b)( \\ w \\ w)c" , perl
, "aBxxc" , match_default
, make_array ( 2 , 5 , 2 , 4 , - 2 , - 2 ));
297 TEST_REGEX_SEARCH ( "(?<=a(?i)b)( \\ w \\ w)c" , perl
, "Abxxc" , match_default
, make_array (- 2 , - 2 ));
298 TEST_REGEX_SEARCH ( "(?<=a(?i)b)( \\ w \\ w)c" , perl
, "ABxxc" , match_default
, make_array (- 2 , - 2 ));
299 TEST_REGEX_SEARCH ( "(?<=a(?i)b)( \\ w \\ w)c" , perl
, "abxxC" , match_default
, make_array (- 2 , - 2 ));
301 TEST_REGEX_SEARCH ( "(?<=^.{4})(?:bar|cat)" , perl
, "fooocat" , match_default
, make_array ( 4 , 7 , - 2 , - 2 ));
302 TEST_REGEX_SEARCH ( "(?<=^.{4})(?:bar|cat)" , perl
, "foocat" , match_default
, make_array (- 2 , - 2 ));
303 TEST_REGEX_SEARCH ( "(?<=^a{4})(?:bar|cat)" , perl
, "aaaacat" , match_default
, make_array ( 4 , 7 , - 2 , - 2 ));
304 TEST_REGEX_SEARCH ( "(?<=^a{4})(?:bar|cat)" , perl
, "aaacat" , match_default
, make_array (- 2 , - 2 ));
305 TEST_REGEX_SEARCH ( "(?<=^[[:alpha:]]{4})(?:bar|cat)" , perl
, "aaaacat" , match_default
, make_array ( 4 , 7 , - 2 , - 2 ));
306 TEST_REGEX_SEARCH ( "(?<=^[[:alpha:]]{4})(?:bar|cat)" , perl
, "aaacat" , match_default
, make_array (- 2 , - 2 ));
308 //TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abxyZZ", match_default, make_array(4, 6, -2, -2));
309 //TEST_REGEX_SEARCH("(?<=ab(?i)x(?-i)y|(?i)z|b)ZZ", perl, "abXyZZ", match_default, make_array(4, 6, -2, -2));
310 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "ZZZ" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
311 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "zZZ" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
312 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "bZZ" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
313 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "BZZ" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
314 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "ZZ" , match_default
, make_array (- 2 , - 2 ));
315 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "abXYZZ" , match_default
, make_array (- 2 , - 2 ));
316 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "zzz" , match_default
, make_array (- 2 , - 2 ));
317 TEST_REGEX_SEARCH ( "(?:ab(?i)x(?-i)y|(?i)z|b)ZZ" , perl
, "bzz" , match_default
, make_array (- 2 , - 2 ));
319 TEST_REGEX_SEARCH ( "((?-i)[[:lower:]])[[:lower:]]" , perl
| icase
, "ab" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
320 TEST_REGEX_SEARCH ( "((?-i)[[:lower:]])[[:lower:]]" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
321 TEST_REGEX_SEARCH ( "((?-i)[[:lower:]])[[:lower:]]" , perl
| icase
, "Ab" , match_default
, make_array (- 2 , - 2 ));
322 TEST_REGEX_SEARCH ( "((?-i)[[:lower:]])[[:lower:]]" , perl
| icase
, "AB" , match_default
, make_array (- 2 , - 2 ));
324 TEST_REGEX_SEARCH ( "a(?-i)b" , perl
| icase
, "ab" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
325 TEST_REGEX_SEARCH ( "a(?-i)b" , perl
| icase
, "Ab" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
326 TEST_REGEX_SEARCH ( "a(?-i)b" , perl
| icase
, "aB" , match_default
, make_array (- 2 , - 2 ));
327 TEST_REGEX_SEARCH ( "a(?-i)b" , perl
| icase
, "AB" , match_default
, make_array (- 2 , - 2 ));
329 TEST_REGEX_SEARCH ( "(?:(?-i)a)b" , perl
| icase
, "ab" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
330 TEST_REGEX_SEARCH ( "((?-i)a)b" , perl
| icase
, "ab" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
331 TEST_REGEX_SEARCH ( "(?:(?-i)a)b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
332 TEST_REGEX_SEARCH ( "((?-i)a)b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
334 TEST_REGEX_SEARCH ( "(?:(?-i)a)b" , perl
| icase
, "Ab" , match_default
, make_array (- 2 , - 2 ));
335 TEST_REGEX_SEARCH ( "(?:(?-i)a)b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
336 TEST_REGEX_SEARCH ( "((?-i)a)b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
338 TEST_REGEX_SEARCH ( "(?:(?-i)a)b" , perl
| icase
, "Ab" , match_default
, make_array (- 2 , - 2 ));
339 TEST_REGEX_SEARCH ( "(?:(?-i)a)b" , perl
| icase
, "AB" , match_default
, make_array (- 2 , - 2 ));
340 TEST_REGEX_SEARCH ( "(?-i:a)b" , perl
| icase
, "ab" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
341 TEST_REGEX_SEARCH ( "((?-i:a))b" , perl
| icase
, "ab" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
342 TEST_REGEX_SEARCH ( "(?-i:a)b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
344 TEST_REGEX_SEARCH ( "((?-i:a))b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
345 TEST_REGEX_SEARCH ( "(?-i:a)b" , perl
| icase
, "AB" , match_default
, make_array (- 2 , - 2 ));
346 TEST_REGEX_SEARCH ( "(?-i:a)b" , perl
| icase
, "Ab" , match_default
, make_array (- 2 , - 2 ));
347 TEST_REGEX_SEARCH ( "(?-i:a)b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
348 TEST_REGEX_SEARCH ( "((?-i:a))b" , perl
| icase
, "aB" , match_default
, make_array ( 0 , 2 , 0 , 1 , - 2 , - 2 ));
349 TEST_REGEX_SEARCH ( "(?-i:a)b" , perl
| icase
, "Ab" , match_default
, make_array (- 2 , - 2 ));
350 TEST_REGEX_SEARCH ( "(?-i:a)b" , perl
| icase
, "AB" , match_default
, make_array (- 2 , - 2 ));
351 TEST_REGEX_SEARCH ( "((?-i:a.))b" , perl
| icase
, "AB" , match_default
, make_array (- 2 , - 2 ));
352 TEST_REGEX_SEARCH ( "((?-i:a.))b" , perl
| icase
, "A \n B" , match_default
, make_array (- 2 , - 2 ));
353 TEST_REGEX_SEARCH ( "((?s-i:a.))b" , perl
| icase
, "a \n B" , match_default
, make_array ( 0 , 3 , 0 , 2 , - 2 , - 2 ));
355 TEST_REGEX_SEARCH ( "." , perl
, " \n " , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
356 TEST_REGEX_SEARCH ( "." , perl
, " \n " , match_default
| match_not_dot_newline
, make_array (- 2 , - 2 ));
357 TEST_REGEX_SEARCH ( "." , perl
| mod_s
, " \n " , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
358 TEST_REGEX_SEARCH ( "." , perl
| mod_s
, " \n " , match_default
| match_not_dot_newline
, make_array ( 0 , 1 , - 2 , - 2 ));
359 TEST_REGEX_SEARCH ( "." , perl
| no_mod_s
, " \n " , match_default
, make_array (- 2 , - 2 ));
360 TEST_REGEX_SEARCH ( "." , perl
| no_mod_s
, " \n " , match_default
| match_not_dot_newline
, make_array (- 2 , - 2 ));
361 TEST_REGEX_SEARCH ( "(?s)." , perl
, " \n " , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
362 TEST_REGEX_SEARCH ( "(?s)." , perl
, " \n " , match_default
| match_not_dot_newline
, make_array ( 0 , 1 , - 2 , - 2 ));
363 TEST_REGEX_SEARCH ( "(?-s)." , perl
, " \n " , match_default
, make_array (- 2 , - 2 ));
364 TEST_REGEX_SEARCH ( "(?-s)." , perl
, " \n " , match_default
| match_not_dot_newline
, make_array (- 2 , - 2 ));
365 TEST_REGEX_SEARCH ( "(?-xism)d" , perl
, "d" , match_default
, make_array ( 0 , 1 , - 2 , - 2 ));
371 using namespace boost :: regex_constants
;
373 TEST_REGEX_SEARCH ( ".+" , perl
, " \n " , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
374 TEST_REGEX_SEARCH ( ".+" , perl
, " \n " , match_default
| match_not_dot_newline
, make_array ( 0 , 2 , - 2 , 3 , 5 , - 2 , - 2 ));
375 TEST_REGEX_SEARCH ( ".+" , perl
| mod_s
, " \n " , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
376 TEST_REGEX_SEARCH ( ".+" , perl
| mod_s
, " \n " , match_default
| match_not_dot_newline
, make_array ( 0 , 5 , - 2 , - 2 ));
377 TEST_REGEX_SEARCH ( ".+" , perl
| no_mod_s
, " \n " , match_default
, make_array ( 0 , 2 , - 2 , 3 , 5 , - 2 , - 2 ));
378 TEST_REGEX_SEARCH ( ".+" , perl
| no_mod_s
, " \n " , match_default
| match_not_dot_newline
, make_array ( 0 , 2 , - 2 , 3 , 5 , - 2 , - 2 ));
379 TEST_REGEX_SEARCH ( "(?s).+" , perl
, " \n " , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
380 TEST_REGEX_SEARCH ( "(?s).+" , perl
, " \n " , match_default
| match_not_dot_newline
, make_array ( 0 , 5 , - 2 , - 2 ));
381 TEST_REGEX_SEARCH ( "(?-s).+" , perl
, " \n " , match_default
, make_array ( 0 , 2 , - 2 , 3 , 5 , - 2 , - 2 ));
382 TEST_REGEX_SEARCH ( "(?-s).+" , perl
, " \n " , match_default
| match_not_dot_newline
, make_array ( 0 , 2 , - 2 , 3 , 5 , - 2 , - 2 ));
384 const char * big_expression
=
385 " (?: [ \\ 040 \\ t] | \\ ( \n "
386 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
387 " \\ ) )* # optional leading comment \n "
389 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
390 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
392 " \" (?: # opening quote... \n "
393 "[^ \\\\\\ x80- \\ xff \\ n \\ 015 \" ] # Anything except backslash and quote \n "
395 " \\\\ [^ \\ x80- \\ xff] # Escaped something (something != CR) \n "
396 ")* \" # closing quote \n "
398 "(?: (?: [ \\ 040 \\ t] | \\ ( \n "
399 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
400 " \\ ) )* \\ . (?: [ \\ 040 \\ t] | \\ ( \n "
401 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
403 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
404 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
406 " \" (?: # opening quote... \n "
407 "[^ \\\\\\ x80- \\ xff \\ n \\ 015 \" ] # Anything except backslash and quote \n "
409 " \\\\ [^ \\ x80- \\ xff] # Escaped something (something != CR) \n "
410 ")* \" # closing quote \n "
411 ") )* # further okay, if led by a period \n "
412 "(?: [ \\ 040 \\ t] | \\ ( \n "
413 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
414 " \\ ) )* @ (?: [ \\ 040 \\ t] | \\ ( \n "
415 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
417 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
418 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
420 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
422 ") # initial subdomain \n "
424 "(?: [ \\ 040 \\ t] | \\ ( \n "
425 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
426 " \\ ) )* \\ . # if led by a period... \n "
427 "(?: [ \\ 040 \\ t] | \\ ( \n "
428 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
430 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
431 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
433 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
435 ") # ...further okay \n "
440 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
441 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
443 " \" (?: # opening quote... \n "
444 "[^ \\\\\\ x80- \\ xff \\ n \\ 015 \" ] # Anything except backslash and quote \n "
446 " \\\\ [^ \\ x80- \\ xff] # Escaped something (something != CR) \n "
447 ")* \" # closing quote \n "
448 ") # one word, optionally followed by.... \n "
450 "[^()<>@,;: \" . \\\\\\ [ \\ ] \\ x80- \\ xff \\ 000- \\ 010 \\ 012- \\ 037] | # atom and space parts, or... \n "
452 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
453 " \\ ) | # comments, or... \n "
454 " \" (?: # opening quote... \n "
455 "[^ \\\\\\ x80- \\ xff \\ n \\ 015 \" ] # Anything except backslash and quote \n "
457 " \\\\ [^ \\ x80- \\ xff] # Escaped something (something != CR) \n "
458 ")* \" # closing quote \n "
461 "< (?: [ \\ 040 \\ t] | \\ ( \n "
462 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
463 " \\ ) )* # leading < \n "
464 "(?: @ (?: [ \\ 040 \\ t] | \\ ( \n "
465 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
467 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
468 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
470 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
472 ") # initial subdomain \n "
474 "(?: [ \\ 040 \\ t] | \\ ( \n "
475 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
476 " \\ ) )* \\ . # if led by a period... \n "
477 "(?: [ \\ 040 \\ t] | \\ ( \n "
478 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
480 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
481 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
483 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
485 ") # ...further okay \n "
487 "(?: (?: [ \\ 040 \\ t] | \\ ( \n "
488 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
489 " \\ ) )* , (?: [ \\ 040 \\ t] | \\ ( \n "
490 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
491 " \\ ) )* @ (?: [ \\ 040 \\ t] | \\ ( \n "
492 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
494 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
495 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
497 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
499 ") # initial subdomain \n "
501 "(?: [ \\ 040 \\ t] | \\ ( \n "
502 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
503 " \\ ) )* \\ . # if led by a period... \n "
504 "(?: [ \\ 040 \\ t] | \\ ( \n "
505 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
507 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
508 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
510 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
512 ") # ...further okay \n "
514 ")* # further okay, if led by comma \n "
515 ": # closing colon \n "
516 "(?: [ \\ 040 \\ t] | \\ ( \n "
517 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
518 " \\ ) )* )? # optional route \n "
520 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
521 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
523 " \" (?: # opening quote... \n "
524 "[^ \\\\\\ x80- \\ xff \\ n \\ 015 \" ] # Anything except backslash and quote \n "
526 " \\\\ [^ \\ x80- \\ xff] # Escaped something (something != CR) \n "
527 ")* \" # closing quote \n "
529 "(?: (?: [ \\ 040 \\ t] | \\ ( \n "
530 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
531 " \\ ) )* \\ . (?: [ \\ 040 \\ t] | \\ ( \n "
532 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
534 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
535 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
537 " \" (?: # opening quote... \n "
538 "[^ \\\\\\ x80- \\ xff \\ n \\ 015 \" ] # Anything except backslash and quote \n "
540 " \\\\ [^ \\ x80- \\ xff] # Escaped something (something != CR) \n "
541 ")* \" # closing quote \n "
542 ") )* # further okay, if led by a period \n "
543 "(?: [ \\ 040 \\ t] | \\ ( \n "
544 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
545 " \\ ) )* @ (?: [ \\ 040 \\ t] | \\ ( \n "
546 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
548 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
549 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
551 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
553 ") # initial subdomain \n "
555 "(?: [ \\ 040 \\ t] | \\ ( \n "
556 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
557 " \\ ) )* \\ . # if led by a period... \n "
558 "(?: [ \\ 040 \\ t] | \\ ( \n "
559 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
561 "[^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]+ # some number of atom characters... \n "
562 "(?![^( \\ 040)<>@,;: \" . \\\\\\ [ \\ ] \\ 000- \\ 037 \\ x80- \\ xff]) # ..not followed by something that could be part of an atom \n "
564 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015 \\ [ \\ ]] | \\\\ [^ \\ x80- \\ xff] )* # stuff \n "
566 ") # ...further okay \n "
569 "(?: [ \\ 040 \\ t] | \\ ( \n "
570 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
571 " \\ ) )* > # trailing > \n "
572 "# name and address \n "
573 ") (?: [ \\ 040 \\ t] | \\ ( \n "
574 "(?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] | \\ ( (?: [^ \\\\\\ x80- \\ xff \\ n \\ 015()] | \\\\ [^ \\ x80- \\ xff] )* \\ ) )* \n "
575 " \\ ) )* # optional trailing comment \n "
579 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
581 perl
| mod_x
, "Alan Other <user@dom.ain>" , match_default
,
582 make_array ( 0 , 25 , - 2 , - 2 ));
583 test ( char ( 0 ), test_regex_search_tag ());
585 #if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
587 std :: string
st ( big_expression
);
588 test_info
< wchar_t >:: set_info ( __FILE__
, __LINE__
,
589 std :: wstring ( st
. begin (), st
. end ()),
590 perl
| mod_x
, L
"Alan Other <user@dom.ain>" , match_default
,
591 make_array ( 0 , 25 , - 2 , - 2 ));
592 test ( char ( 0 ), test_regex_search_tag ());
596 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
598 perl
| mod_x
, "<user@dom.ain>" , match_default
,
599 make_array ( 1 , 13 , - 2 , - 2 ));
600 test ( char ( 0 ), test_regex_search_tag ());
602 #if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
604 std :: string
st ( big_expression
);
605 test_info
< wchar_t >:: set_info ( __FILE__
, __LINE__
,
606 std :: wstring ( st
. begin (), st
. end ()),
607 perl
| mod_x
, L
"<user@dom.ain>" , match_default
,
608 make_array ( 1 , 13 , - 2 , - 2 ));
609 test ( char ( 0 ), test_regex_search_tag ());
613 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
615 perl
| mod_x
, " \" A. Other \" <user.1234@dom.ain> (a comment)" , match_default
,
616 make_array ( 0 , 42 , - 2 , - 2 ));
617 test ( char ( 0 ), test_regex_search_tag ());
619 #if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
621 std :: string
st ( big_expression
);
622 test_info
< wchar_t >:: set_info ( __FILE__
, __LINE__
,
623 std :: wstring ( st
. begin (), st
. end ()),
624 perl
| mod_x
, L
" \" A. Other \" <user.1234@dom.ain> (a comment)" , match_default
,
625 make_array ( 0 , 42 , - 2 , - 2 ));
626 test ( char ( 0 ), test_regex_search_tag ());
630 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
632 perl
| mod_x
, "A. Other <user.1234@dom.ain> (a comment)" , match_default
,
633 make_array ( 2 , 40 , - 2 , - 2 ));
634 test ( char ( 0 ), test_regex_search_tag ());
636 #if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
638 std :: string
st ( big_expression
);
639 test_info
< wchar_t >:: set_info ( __FILE__
, __LINE__
,
640 std :: wstring ( st
. begin (), st
. end ()),
641 perl
| mod_x
, L
"A. Other <user.1234@dom.ain> (a comment)" , match_default
,
642 make_array ( 2 , 40 , - 2 , - 2 ));
643 test ( char ( 0 ), test_regex_search_tag ());
647 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
649 perl
| mod_x
, " \" /s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/ \" @x400-re.lay" , match_default
,
650 make_array ( 0 , 61 , - 2 , - 2 ));
651 test ( char ( 0 ), test_regex_search_tag ());
653 #if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
655 std :: string
st ( big_expression
);
656 test_info
< wchar_t >:: set_info ( __FILE__
, __LINE__
,
657 std :: wstring ( st
. begin (), st
. end ()),
658 perl
| mod_x
, L
" \" /s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/ \" @x400-re.lay" , match_default
,
659 make_array ( 0 , 61 , - 2 , - 2 ));
660 test ( char ( 0 ), test_regex_search_tag ());
664 test_info
< char >:: set_info ( __FILE__
, __LINE__
,
666 perl
| mod_x
, "A missing angle <user@some.where" , match_default
,
667 make_array ( 17 , 32 , - 2 , - 2 ));
668 test ( char ( 0 ), test_regex_search_tag ());
670 #if !defined(BOOST_NO_WREGEX) && !defined(BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS) && !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
672 std :: string
st ( big_expression
);
673 test_info
< wchar_t >:: set_info ( __FILE__
, __LINE__
,
674 std :: wstring ( st
. begin (), st
. end ()),
675 perl
| mod_x
, L
"A missing angle <user@some.where" , match_default
,
676 make_array ( 17 , 32 , - 2 , - 2 ));
677 test ( char ( 0 ), test_regex_search_tag ());
682 void test_mark_resets ()
684 using namespace boost :: regex_constants
;
686 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 2 , - 2 ));
687 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))" , perl
, "xyz" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 2 , - 2 ));
688 TEST_REGEX_SEARCH ( "(x)(?|(abc)|(xyz))(x)" , perl
, "xabcx" , match_default
, make_array ( 0 , 5 , 0 , 1 , 1 , 4 , 4 , 5 , - 2 , - 2 ));
689 TEST_REGEX_SEARCH ( "(x)(?|(abc)|(xyz))(x)" , perl
, "xxyzx" , match_default
, make_array ( 0 , 5 , 0 , 1 , 1 , 4 , 4 , 5 , - 2 , - 2 ));
690 TEST_REGEX_SEARCH ( "(x)(?|(abc)(pqr)|(xyz))(x)" , perl
, "xabcpqrx" , match_default
, make_array ( 0 , 8 , 0 , 1 , 1 , 4 , 4 , 7 , 7 , 8 , - 2 , - 2 ));
691 TEST_REGEX_SEARCH ( "(x)(?|(abc)(pqr)|(xyz))(x)" , perl
, "xxyzx" , match_default
, make_array ( 0 , 5 , 0 , 1 , 1 , 4 , - 1 , - 1 , 4 , 5 , - 2 , - 2 ));
692 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz)) \\ 1" , perl
, "abcabc" , match_default
, make_array ( 0 , 6 , 0 , 3 , - 2 , - 2 ));
693 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz)) \\ 1" , perl
, "xyzxyz" , match_default
, make_array ( 0 , 6 , 0 , 3 , - 2 , - 2 ));
694 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz)) \\ 1" , perl
, "abcxyz" , match_default
, make_array (- 2 , - 2 ));
695 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz)) \\ 1" , perl
, "xyzabc" , match_default
, make_array (- 2 , - 2 ));
696 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))(?1)" , perl
, "abcabc" , match_default
, make_array ( 0 , 6 , 0 , 3 , - 2 , - 2 ));
697 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))(?1)" , perl
, "xyzabc" , match_default
, make_array ( 0 , 6 , 0 , 3 , - 2 , - 2 ));
698 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))(?1)" , perl
, "xyzxyz" , match_default
, make_array (- 2 , - 2 ));
699 TEST_REGEX_SEARCH ( "^X(?5)(a)(?|(b)|(q))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
700 TEST_INVALID_REGEX ( "^X(?5)(a)(?|(b)|(q))(c)(d)Y" , perl
);
701 TEST_REGEX_SEARCH ( "^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
702 TEST_REGEX_SEARCH ( "^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , - 1 , - 1 , - 1 , - 1 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
703 TEST_REGEX_SEARCH ( "^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , - 1 , - 1 , - 1 , - 1 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
704 TEST_REGEX_SEARCH ( "^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , - 1 , - 1 , - 1 , - 1 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
705 TEST_REGEX_SEARCH ( "(?|(abc)|(?:((?:xyz)))|(123))" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 2 , - 2 ));
706 TEST_REGEX_SEARCH ( "(?|(abc)|(?:)((?:)xyz)|(123))" , perl
, "xyz" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 2 , - 2 ));
707 TEST_REGEX_SEARCH ( "(?|(abc)|((?:(x)|(y)|(z)))|(123))" , perl
, "y" , match_default
, make_array ( 0 , 1 , 0 , 1 , - 1 , - 1 , 0 , 1 , - 1 , - 1 , - 2 , - 2 ));
708 TEST_REGEX_SEARCH ( "(?|(abc)|((?|(x)|(y)|(z)))|(123))" , perl
, "y" , match_default
, make_array ( 0 , 1 , 0 , 1 , 0 , 1 , - 2 , - 2 ));
709 TEST_REGEX_SEARCH ( "(?|(abc)|((?|(x)|(y)|(z)))|(123))" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 1 , - 1 , - 2 , - 2 ));
710 TEST_REGEX_SEARCH ( "(?|(abc)|((?|(x)|(y)|(z)))|(123))" , perl
, "123" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 1 , - 1 , - 2 , - 2 ));
711 TEST_REGEX_SEARCH ( "(?|(abc)|((x)|(y)|(z))|(123))" , perl
, "z" , match_default
, make_array ( 0 , 1 , 0 , 1 , - 1 , - 1 , - 1 , - 1 , 0 , 1 , - 2 , - 2 ));
712 TEST_REGEX_SEARCH ( "(?|(abc)|((x)|(y)|(z))|(123))" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
713 TEST_REGEX_SEARCH ( "(?|(abc)|((x)|(y)|(z))|(123))" , perl
, "123" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
716 void test_recursion ()
718 using namespace boost :: regex_constants
;
720 TEST_INVALID_REGEX ( "(a(?2)b)" , perl
);
721 TEST_INVALID_REGEX ( "(a(?1b))" , perl
);
722 TEST_REGEX_SEARCH ( "(a(?1)b)" , perl
, "abc" , match_default
, make_array (- 2 , - 2 ));
723 TEST_REGEX_SEARCH ( "(a(?1)+b)" , perl
, "abc" , match_default
, make_array (- 2 , - 2 ));
724 TEST_REGEX_SEARCH ( "^([^()]| \\ ((?1)* \\ ))*$" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 2 , 3 , - 2 , - 2 ));
725 TEST_REGEX_SEARCH ( "^([^()]| \\ ((?1)* \\ ))*$" , perl
, "a(b)c" , match_default
, make_array ( 0 , 5 , 4 , 5 , - 2 , - 2 ));
726 TEST_REGEX_SEARCH ( "^([^()]| \\ ((?1)* \\ ))*$" , perl
, "a(b(c))d" , match_default
, make_array ( 0 , 8 , 7 , 8 , - 2 , - 2 ));
727 TEST_REGEX_SEARCH ( "^([^()]| \\ ((?1)* \\ ))*$" , perl
, "a(b(c)d" , match_default
, make_array (- 2 , - 2 ));
728 TEST_REGEX_SEARCH ( "^>abc>([^()]| \\ ((?1)* \\ ))*<xyz<$" , perl
, ">abc>123<xyz<" , match_default
, make_array ( 0 , 13 , 7 , 8 , - 2 , - 2 ));
729 TEST_REGEX_SEARCH ( "^>abc>([^()]| \\ ((?1)* \\ ))*<xyz<$" , perl
, ">abc>1(2)3<xyz<" , match_default
, make_array ( 0 , 15 , 9 , 10 , - 2 , - 2 ));
730 TEST_REGEX_SEARCH ( "^>abc>([^()]| \\ ((?1)* \\ ))*<xyz<$" , perl
, ">abc>(1(2)3)<xyz<" , match_default
, make_array ( 0 , 17 , 5 , 12 , - 2 , - 2 ));
731 //TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "1221", match_default, make_array(0, 4, 0, 4, 0, 1, -1, -1, -1, -1, -2, -2));
732 TEST_REGEX_SEARCH ( "^ \\ W*(?:((.) \\ W*(?1) \\ W* \\ 2|)|((.) \\ W*(?3) \\ W* \\ 4| \\ W*. \\ W*)) \\ W*$" , perl
| icase
, "Satan, oscillate my metallic sonatas!" , match_default
, make_array ( 0 , 37 , - 1 , - 1 , - 1 , - 1 , 0 , 36 , 0 , 1 , - 2 , - 2 ));
733 //TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "A man, a plan, a canal: Panama!", match_default, make_array(0, 31, -1, -1, -1, -1, 0, 30, 0, 1, -2, -2));
734 //TEST_REGEX_SEARCH("^\\W*(?:((.)\\W*(?1)\\W*\\2|)|((.)\\W*(?3)\\W*\\4|\\W*.\\W*))\\W*$", perl|icase, "Able was I ere I saw Elba.", match_default, make_array(0, 26, -1, -1, -1, -1, 0, 25, 0, 1, -2, -2));
735 TEST_REGEX_SEARCH ( "^ \\ W*(?:((.) \\ W*(?1) \\ W* \\ 2|)|((.) \\ W*(?3) \\ W* \\ 4| \\ W*. \\ W*)) \\ W*$" , perl
| icase
, "The quick brown fox" , match_default
, make_array (- 2 , - 2 ));
736 TEST_REGEX_SEARCH ( "^( \\ d+| \\ ((?1)([+*-])(?1) \\ )|-(?1))$" , perl
| icase
, "12" , match_default
, make_array ( 0 , 2 , 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
737 //TEST_REGEX_SEARCH("^(\\d+|\\((?1)([+*-])(?1)\\)|-(?1))$", perl|icase, "(((2+2)*-3)-7)", match_default, make_array(0, 14, 0, 14, 11, 12, -2, -2));
738 TEST_REGEX_SEARCH ( "^( \\ d+| \\ ((?1)([+*-])(?1) \\ )|-(?1))$" , perl
| icase
, "-12" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 1 , - 1 , - 2 , - 2 ));
739 TEST_REGEX_SEARCH ( "^( \\ d+| \\ ((?1)([+*-])(?1) \\ )|-(?1))$" , perl
| icase
, "((2+2)*-3)-7)" , match_default
, make_array (- 2 , - 2 ));
740 TEST_REGEX_SEARCH ( "^(x(y|(?1){2})z)" , perl
| icase
, "xyz" , match_default
, make_array ( 0 , 3 , 0 , 3 , 1 , 2 , - 2 , - 2 ));
741 TEST_REGEX_SEARCH ( "^(x(y|(?1){2})z)" , perl
| icase
, "xxyzxyzz" , match_default
, make_array ( 0 , 8 , 0 , 8 , 1 , 7 , - 2 , - 2 ));
742 TEST_REGEX_SEARCH ( "^(x(y|(?1){2})z)" , perl
| icase
, "xxyzz" , match_default
, make_array (- 2 , - 2 ));
743 TEST_REGEX_SEARCH ( "^(x(y|(?1){2})z)" , perl
| icase
, "xxyzxyzxyzz" , match_default
, make_array (- 2 , - 2 ));
744 TEST_INVALID_REGEX ( "(?1)" , perl
);
745 TEST_INVALID_REGEX ( "((?2)(abc)" , perl
);
746 TEST_REGEX_SEARCH ( "^(a|b|c)=(?1)+" , perl
| icase
, "a=a" , match_default
, make_array ( 0 , 3 , 0 , 1 , - 2 , - 2 ));
747 TEST_REGEX_SEARCH ( "^(a|b|c)=(?1)+" , perl
| icase
, "a=b" , match_default
, make_array ( 0 , 3 , 0 , 1 , - 2 , - 2 ));
748 TEST_REGEX_SEARCH ( "^(a|b|c)=(?1)+" , perl
| icase
, "a=bc" , match_default
, make_array ( 0 , 4 , 0 , 1 , - 2 , - 2 ));
749 TEST_REGEX_SEARCH ( "^(a|b|c)=((?1))+" , perl
| icase
, "a=a" , match_default
, make_array ( 0 , 3 , 0 , 1 , 2 , 3 , - 2 , - 2 ));
750 TEST_REGEX_SEARCH ( "^(a|b|c)=((?1))+" , perl
| icase
, "a=b" , match_default
, make_array ( 0 , 3 , 0 , 1 , 2 , 3 , - 2 , - 2 ));
751 TEST_REGEX_SEARCH ( "^(a|b|c)=((?1))+" , perl
| icase
, "a=bc" , match_default
, make_array ( 0 , 4 , 0 , 1 , 3 , 4 , - 2 , - 2 ));
752 TEST_REGEX_SEARCH ( "^(?1)(abc)" , perl
| icase
, "abcabc" , match_default
, make_array ( 0 , 6 , 3 , 6 , - 2 , - 2 ));
753 TEST_REGEX_SEARCH ( "(?1)X(?<abc>P)" , perl
| icase
, "abcPXP123" , match_default
, make_array ( 3 , 6 , 5 , 6 , - 2 , - 2 ));
754 TEST_REGEX_SEARCH ( "(abc)(?i:(?1))" , perl
| icase
, "defabcabcxyz" , match_default
, make_array ( 3 , 9 , 3 , 6 , - 2 , - 2 ));
755 TEST_REGEX_SEARCH ( "(abc)(?i:(?1))" , perl
, "DEFabcABCXYZ" , match_default
, make_array (- 2 , - 2 ));
756 TEST_REGEX_SEARCH ( "(abc)(?i:(?1)abc)" , perl
, "DEFabcABCABCXYZ" , match_default
, make_array (- 2 , - 2 ));
757 TEST_REGEX_SEARCH ( "(abc)(?:(?i)(?1))" , perl
, "defabcabcxyz" , match_default
, make_array ( 3 , 9 , 3 , 6 , - 2 , - 2 ));
758 TEST_REGEX_SEARCH ( "(abc)(?:(?i)(?1))" , perl
, "DEFabcABCXYZ" , match_default
, make_array (- 2 , - 2 ));
759 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))(?1)" , perl
, "abcabc" , match_default
, make_array ( 0 , 6 , 0 , 3 , - 2 , - 2 ));
760 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))(?1)" , perl
, "xyzabc" , match_default
, make_array ( 0 , 6 , 0 , 3 , - 2 , - 2 ));
761 TEST_REGEX_SEARCH ( "(?|(abc)|(xyz))(?1)" , perl
, "xyzxyz" , match_default
, make_array (- 2 , - 2 ));
762 TEST_REGEX_SEARCH ( "(?1)[]a()b](abc)" , perl
, "abcbabc" , match_default
, make_array ( 0 , 7 , 4 , 7 , - 2 , - 2 ));
763 TEST_REGEX_SEARCH ( "(?1)[]a()b](abc)" , perl
, "abcXabc" , match_default
, make_array (- 2 , - 2 ));
764 TEST_REGEX_SEARCH ( "(?1)[^]a()b](abc)" , perl
, "abcXabc" , match_default
, make_array ( 0 , 7 , 4 , 7 , - 2 , - 2 ));
765 TEST_REGEX_SEARCH ( "(?1)[^]a()b](abc)" , perl
, "abcbabc" , match_default
, make_array (- 2 , - 2 ));
766 TEST_REGEX_SEARCH ( "(?2)[]a()b](abc)(xyz)" , perl
, "xyzbabcxyz" , match_default
, make_array ( 0 , 10 , 4 , 7 , 7 , 10 , - 2 , - 2 ));
767 TEST_REGEX_SEARCH ( "^X(?5)(a)(?|(b)|(q))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
768 TEST_INVALID_REGEX ( "^X(?5)(a)(?|(b)|(q))(c)(d)Y" , perl
);
769 TEST_REGEX_SEARCH ( "^X(?7)(a)(?|(b)|(q)(r)(s))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , - 1 , - 1 , - 1 , - 1 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
770 TEST_REGEX_SEARCH ( "^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , - 1 , - 1 , - 1 , - 1 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
771 TEST_REGEX_SEARCH ( "^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)" , perl
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , - 1 , - 1 , - 1 , - 1 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
772 TEST_REGEX_SEARCH_W ( L
" \\ x{100}*( \\ d+| \" (?1) \" )" , perl
, L
"1234" , match_default
, make_array ( 0 , 4 , 0 , 4 , - 2 , - 2 ));
773 TEST_REGEX_SEARCH_W ( L
" \\ x{100}*( \\ d+| \" (?1) \" )" , perl
, L
" \" 1234 \" " , match_default
, make_array ( 0 , 6 , 0 , 6 , - 2 , - 2 ));
774 TEST_REGEX_SEARCH_W ( L
" \\ x{100}*( \\ d+| \" (?1) \" )" , perl
, L
" \x10 0" L
"1234" , match_default
, make_array ( 0 , 5 , 1 , 5 , - 2 , - 2 ));
775 TEST_REGEX_SEARCH_W ( L
" \\ x{100}*( \\ d+| \" (?1) \" )" , perl
, L
" \"\x10 0" L
"1234 \" " , match_default
, make_array ( 1 , 6 , 2 , 6 , - 2 , - 2 ));
776 TEST_REGEX_SEARCH_W ( L
" \\ x{100}*( \\ d+| \" (?1) \" )" , perl
, L
" \x10 0 \x10 0" L
"12ab" , match_default
, make_array ( 0 , 4 , 2 , 4 , - 2 , - 2 ));
777 TEST_REGEX_SEARCH_W ( L
" \\ x{100}*( \\ d+| \" (?1) \" )" , perl
, L
" \x10 0 \x10 0" L
" \" 12 \" " , match_default
, make_array ( 0 , 6 , 2 , 6 , - 2 , - 2 ));
778 TEST_REGEX_SEARCH_W ( L
" \\ x{100}*( \\ d+| \" (?1) \" )" , perl
, L
" \x10 0 \x10 0" L
"abcd" , match_default
, make_array (- 2 , - 2 ));
780 TEST_REGEX_SEARCH ( "(ab|c)(?-1)" , perl
, "abc" , match_default
, make_array ( 0 , 3 , 0 , 2 , - 2 , - 2 ));
781 TEST_REGEX_SEARCH ( "xy(?+1)(abc)" , perl
, "xyabcabc" , match_default
, make_array ( 0 , 8 , 5 , 8 , - 2 , - 2 ));
782 TEST_REGEX_SEARCH ( "xy(?+1)(abc)" , perl
, "xyabc" , match_default
, make_array (- 2 , - 2 ));
783 TEST_INVALID_REGEX ( "x(?-0)y" , perl
);
784 TEST_INVALID_REGEX ( "x(?-1)y" , perl
);
785 TEST_INVALID_REGEX ( "x(?+0)y" , perl
);
786 TEST_INVALID_REGEX ( "x(?+1)y" , perl
);
787 TEST_REGEX_SEARCH ( "^(?+1)(?<a>x|y){0}z" , perl
, "xzxx" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
788 TEST_REGEX_SEARCH ( "^(?+1)(?<a>x|y){0}z" , perl
, "yzyy" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
789 TEST_REGEX_SEARCH ( "^(?+1)(?<a>x|y){0}z" , perl
, "xxz" , match_default
, make_array (- 2 , - 2 ));
791 // Now recurse to sub-expression zero:
792 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "(abcd)" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
793 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "(abcd)xyz" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
794 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "xyz(abcd)" , match_default
, make_array ( 3 , 9 , - 2 , - 2 ));
795 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "(ab(xy)cd)pqr" , match_default
, make_array ( 0 , 10 , - 2 , - 2 ));
796 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "(ab(xycd)pqr" , match_default
, make_array ( 3 , 9 , - 2 , - 2 ));
797 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "() abc ()" , match_default
, make_array ( 0 , 2 , - 2 , 7 , 9 , - 2 , - 2 ));
798 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "12(abcde(fsh)xyz(foo(bar))lmno)89" , match_default
, make_array ( 2 , 31 , - 2 , - 2 ));
799 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "abcd" , match_default
, make_array (- 2 , - 2 ));
800 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "abcd)" , match_default
, make_array (- 2 , - 2 ));
801 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?0))* \\ )" , perl
, "(abcd" , match_default
, make_array (- 2 , - 2 ));
803 TEST_REGEX_SEARCH ( " \\ ( ( (?>[^()]+) | (?0) )* \\ ) " , perl
| mod_x
, "(ab(xy)cd)pqr" , match_default
, make_array ( 0 , 10 , 7 , 9 , - 2 , - 2 ));
804 TEST_REGEX_SEARCH ( " \\ ( ( (?>[^()]+) | (?0) )* \\ ) " , perl
| mod_x
, "1(abcd)(x(y)z)pqr" , match_default
, make_array ( 1 , 7 , 2 , 6 , - 2 , 7 , 14 , 12 , 13 , - 2 , - 2 ));
805 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?0) ) \\ ) " , perl
| mod_x
, "(abcd)" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
806 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?0) ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 3 , 7 , - 2 , - 2 ));
807 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?0) ) \\ ) " , perl
| mod_x
, "(a(b(c)d)e)" , match_default
, make_array ( 4 , 7 , - 2 , - 2 ));
808 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?0) ) \\ ) " , perl
| mod_x
, "((ab))" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
809 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?0) ) \\ ) " , perl
| mod_x
, "()" , match_default
, make_array (- 2 , - 2 ));
810 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?0) )? \\ ) " , perl
| mod_x
, "()" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
811 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?0) )? \\ ) " , perl
| mod_x
, "12(abcde(fsh)xyz(foo(bar))lmno)89" , match_default
, make_array ( 8 , 13 , - 2 , 20 , 25 , - 2 , - 2 ));
812 TEST_REGEX_SEARCH ( " \\ ( ( (?>[^()]+) | (?0) )* \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 7 , 9 , - 2 , - 2 ));
813 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()]+) | (?0) )* ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 1 , 9 , 7 , 9 , - 2 , - 2 ));
814 TEST_REGEX_SEARCH ( " \\ ( (123)? ( ( (?>[^()]+) | (?0) )* ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , - 1 , - 1 , 1 , 9 , 7 , 9 , - 2 , - 2 ));
815 TEST_REGEX_SEARCH ( " \\ ( (123)? ( ( (?>[^()]+) | (?0) )* ) \\ ) " , perl
| mod_x
, "(123ab(xy)cd)" , match_default
, make_array ( 0 , 13 , 1 , 4 , 4 , 12 , 10 , 12 , - 2 , - 2 ));
816 TEST_REGEX_SEARCH ( " \\ ( ( (123)? ( (?>[^()]+) | (?0) )* ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 1 , 9 , - 1 , - 1 , 7 , 9 , - 2 , - 2 ));
817 TEST_REGEX_SEARCH ( " \\ ( ( (123)? ( (?>[^()]+) | (?0) )* ) \\ ) " , perl
| mod_x
, "(123ab(xy)cd)" , match_default
, make_array ( 0 , 13 , 1 , 12 , 1 , 4 , 10 , 12 , - 2 , - 2 ));
818 TEST_REGEX_SEARCH ( " \\ ( (((((((((( ( (?>[^()]+) | (?0) )* )))))))))) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 7 , 9 , - 2 , - 2 ));
819 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?0) )* ) \\ ) " , perl
| mod_x
, "(abcd(xyz<p>qrs)123)" , match_default
, make_array ( 0 , 20 , 1 , 19 , 16 , 19 , - 1 , - 1 , - 2 , - 2 ));
820 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()]+) | ((?0)) )* ) \\ ) " , perl
| mod_x
, "(ab(cd)ef)" , match_default
, make_array ( 0 , 10 , 1 , 9 , 7 , 9 , 3 , 7 , - 2 , - 2 ));
821 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()]+) | ((?0)) )* ) \\ ) " , perl
| mod_x
, "(ab(cd(ef)gh)ij)" , match_default
, make_array ( 0 , 16 , 1 , 15 , 13 , 15 , 3 , 13 , - 2 , - 2 ));
823 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "(abcd)" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
824 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "(abcd)xyz" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
825 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "xyz(abcd)" , match_default
, make_array ( 3 , 9 , - 2 , - 2 ));
826 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "(ab(xy)cd)pqr" , match_default
, make_array ( 0 , 10 , - 2 , - 2 ));
827 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "(ab(xycd)pqr" , match_default
, make_array ( 3 , 9 , - 2 , - 2 ));
828 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "() abc ()" , match_default
, make_array ( 0 , 2 , - 2 , 7 , 9 , - 2 , - 2 ));
829 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "12(abcde(fsh)xyz(foo(bar))lmno)89" , match_default
, make_array ( 2 , 31 , - 2 , - 2 ));
830 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "abcd" , match_default
, make_array (- 2 , - 2 ));
831 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "abcd)" , match_default
, make_array (- 2 , - 2 ));
832 TEST_REGEX_SEARCH ( " \\ ((?:(?>[^()]+)|(?R))* \\ )" , perl
, "(abcd" , match_default
, make_array (- 2 , - 2 ));
834 TEST_REGEX_SEARCH ( " \\ ( ( (?>[^()]+) | (?R) )* \\ ) " , perl
| mod_x
, "(ab(xy)cd)pqr" , match_default
, make_array ( 0 , 10 , 7 , 9 , - 2 , - 2 ));
835 TEST_REGEX_SEARCH ( " \\ ( ( (?>[^()]+) | (?R) )* \\ ) " , perl
| mod_x
, "1(abcd)(x(y)z)pqr" , match_default
, make_array ( 1 , 7 , 2 , 6 , - 2 , 7 , 14 , 12 , 13 , - 2 , - 2 ));
836 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?R) ) \\ ) " , perl
| mod_x
, "(abcd)" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
837 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?R) ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 3 , 7 , - 2 , - 2 ));
838 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?R) ) \\ ) " , perl
| mod_x
, "(a(b(c)d)e)" , match_default
, make_array ( 4 , 7 , - 2 , - 2 ));
839 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?R) ) \\ ) " , perl
| mod_x
, "((ab))" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
840 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?R) ) \\ ) " , perl
| mod_x
, "()" , match_default
, make_array (- 2 , - 2 ));
841 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?R) )? \\ ) " , perl
| mod_x
, "()" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
842 TEST_REGEX_SEARCH ( " \\ ( (?: (?>[^()]+) | (?R) )? \\ ) " , perl
| mod_x
, "12(abcde(fsh)xyz(foo(bar))lmno)89" , match_default
, make_array ( 8 , 13 , - 2 , 20 , 25 , - 2 , - 2 ));
843 TEST_REGEX_SEARCH ( " \\ ( ( (?>[^()]+) | (?R) )* \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 7 , 9 , - 2 , - 2 ));
844 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()]+) | (?R) )* ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 1 , 9 , 7 , 9 , - 2 , - 2 ));
845 TEST_REGEX_SEARCH ( " \\ ( (123)? ( ( (?>[^()]+) | (?R) )* ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , - 1 , - 1 , 1 , 9 , 7 , 9 , - 2 , - 2 ));
846 TEST_REGEX_SEARCH ( " \\ ( (123)? ( ( (?>[^()]+) | (?R) )* ) \\ ) " , perl
| mod_x
, "(123ab(xy)cd)" , match_default
, make_array ( 0 , 13 , 1 , 4 , 4 , 12 , 10 , 12 , - 2 , - 2 ));
847 TEST_REGEX_SEARCH ( " \\ ( ( (123)? ( (?>[^()]+) | (?R) )* ) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 1 , 9 , - 1 , - 1 , 7 , 9 , - 2 , - 2 ));
848 TEST_REGEX_SEARCH ( " \\ ( ( (123)? ( (?>[^()]+) | (?R) )* ) \\ ) " , perl
| mod_x
, "(123ab(xy)cd)" , match_default
, make_array ( 0 , 13 , 1 , 12 , 1 , 4 , 10 , 12 , - 2 , - 2 ));
849 TEST_REGEX_SEARCH ( " \\ ( (((((((((( ( (?>[^()]+) | (?R) )* )))))))))) \\ ) " , perl
| mod_x
, "(ab(xy)cd)" , match_default
, make_array ( 0 , 10 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 1 , 9 , 7 , 9 , - 2 , - 2 ));
850 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()<>]+) | ((?>[^()]+)) | (?R) )* ) \\ ) " , perl
| mod_x
, "(abcd(xyz<p>qrs)123)" , match_default
, make_array ( 0 , 20 , 1 , 19 , 16 , 19 , - 1 , - 1 , - 2 , - 2 ));
851 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()]+) | ((?R)) )* ) \\ ) " , perl
| mod_x
, "(ab(cd)ef)" , match_default
, make_array ( 0 , 10 , 1 , 9 , 7 , 9 , 3 , 7 , - 2 , - 2 ));
852 TEST_REGEX_SEARCH ( " \\ ( ( ( (?>[^()]+) | ((?R)) )* ) \\ ) " , perl
| mod_x
, "(ab(cd(ef)gh)ij)" , match_default
, make_array ( 0 , 16 , 1 , 15 , 13 , 15 , 3 , 13 , - 2 , - 2 ));
853 // And some extra cases:
854 TEST_REGEX_SEARCH ( "x(ab|(bc|(de|(?R))))" , perl
| mod_x
, "xab" , match_default
, make_array ( 0 , 3 , 1 , 3 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
855 TEST_REGEX_SEARCH ( "x(ab|(bc|(de|(?R))))" , perl
| mod_x
, "xbc" , match_default
, make_array ( 0 , 3 , 1 , 3 , 1 , 3 , - 1 , - 1 , - 2 , - 2 ));
856 TEST_REGEX_SEARCH ( "x(ab|(bc|(de|(?R))))" , perl
| mod_x
, "xde" , match_default
, make_array ( 0 , 3 , 1 , 3 , 1 , 3 , 1 , 3 , - 2 , - 2 ));
857 TEST_REGEX_SEARCH ( "x(ab|(bc|(de|(?R))))" , perl
| mod_x
, "xxab" , match_default
, make_array ( 0 , 4 , 1 , 4 , 1 , 4 , 1 , 4 , - 2 , - 2 ));
858 TEST_REGEX_SEARCH ( "x(ab|(bc|(de|(?R))))" , perl
| mod_x
, "xxxab" , match_default
, make_array ( 0 , 5 , 1 , 5 , 1 , 5 , 1 , 5 , - 2 , - 2 ));
859 TEST_REGEX_SEARCH ( "x(ab|(bc|(de|(?R))))" , perl
| mod_x
, "xyab" , match_default
, make_array (- 2 , - 2 ));
860 TEST_REGEX_SEARCH ( "[^()]*(?: \\ ((?R) \\ )[^()]*)*" , perl
| mod_x
, "(this(and)that)" , match_default
, make_array ( 0 , 15 , - 2 , 15 , 15 , - 2 , - 2 ));
861 TEST_REGEX_SEARCH ( "[^()]*(?: \\ ((?R) \\ )[^()]*)*" , perl
| mod_x
, "(this(and)that)stuff" , match_default
, make_array ( 0 , 20 , - 2 , 20 , 20 , - 2 , - 2 ));
862 TEST_REGEX_SEARCH ( "[^()]*(?: \\ ((?>(?R)) \\ )[^()]*)*" , perl
| mod_x
, "(this(and)that)" , match_default
, make_array ( 0 , 15 , - 2 , 15 , 15 , - 2 , - 2 ));
864 // More complex cases involving (?(R):
865 TEST_REGEX_SEARCH ( "< (?: (?(R) \\ d++ | [^<>]*+) | (?R)) * >" , perl
| mod_x
, "<>" , match_default
, make_array ( 0 , 2 , - 2 , - 2 ));
866 TEST_REGEX_SEARCH ( "< (?: (?(R) \\ d++ | [^<>]*+) | (?R)) * >" , perl
| mod_x
, "<abcd>" , match_default
, make_array ( 0 , 6 , - 2 , - 2 ));
867 TEST_REGEX_SEARCH ( "< (?: (?(R) \\ d++ | [^<>]*+) | (?R)) * >" , perl
| mod_x
, "<abc <123> hij>" , match_default
, make_array ( 0 , 15 , - 2 , - 2 ));
868 TEST_REGEX_SEARCH ( "< (?: (?(R) \\ d++ | [^<>]*+) | (?R)) * >" , perl
| mod_x
, "<abc <def> hij>" , match_default
, make_array ( 5 , 10 , - 2 , - 2 ));
869 TEST_REGEX_SEARCH ( "< (?: (?(R) \\ d++ | [^<>]*+) | (?R)) * >" , perl
| mod_x
, "<abc<>def>" , match_default
, make_array ( 0 , 10 , - 2 , - 2 ));
870 TEST_REGEX_SEARCH ( "< (?: (?(R) \\ d++ | [^<>]*+) | (?R)) * >" , perl
| mod_x
, "<abc<>" , match_default
, make_array ( 4 , 6 , - 2 , - 2 ));
871 TEST_REGEX_SEARCH ( "< (?: (?(R) \\ d++ | [^<>]*+) | (?R)) * >" , perl
| mod_x
, "<abc" , match_default
, make_array (- 2 , - 2 ));
872 TEST_REGEX_SEARCH ( "((abc (?(R) (?(R1)1) (?(R2)2) X | (?1) (?2) (?R) ))) " , perl
| mod_x
, "abcabc1Xabc2XabcXabcabc" , match_default
, make_array ( 0 , 17 , 0 , 17 , 0 , 17 , - 2 , - 2 ));
874 // Recursion to named sub-expressions:
875 //TEST_REGEX_SEARCH("^\\W*(?:(?<one>(?<two>.)\\W*(?&one)\\W*\\k<two>|)|(?<three>(?<four>.)\\W*(?&three)\\W*\\k'four'|\\W*.\\W*))\\W*$", perl|mod_x|icase, "Satan, oscillate my metallic sonatas!", match_default, make_array(0, 37, -1, -1, -1, -1, 0, 36, 0, 1, -2, -2));
876 TEST_REGEX_SEARCH ( "(?'abc'a|b)(?<doe>d|e)(?&abc){2}" , perl
| mod_x
, "bdaa" , match_default
, make_array ( 0 , 4 , 0 , 1 , 1 , 2 , - 2 , - 2 ));
877 TEST_REGEX_SEARCH ( "(?'abc'a|b)(?<doe>d|e)(?&abc){2}" , perl
| mod_x
, "bdab" , match_default
, make_array ( 0 , 4 , 0 , 1 , 1 , 2 , - 2 , - 2 ));
878 TEST_REGEX_SEARCH ( "(?'abc'a|b)(?<doe>d|e)(?&abc){2}" , perl
| mod_x
, "bddd" , match_default
, make_array (- 2 , - 2 ));
879 TEST_REGEX_SEARCH ( "(?&abc)X(?<abc>P)" , perl
| mod_x
, "abcPXP123" , match_default
, make_array ( 3 , 6 , 5 , 6 , - 2 , - 2 ));
880 TEST_REGEX_SEARCH ( "(?:a(?&abc)b)*(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
881 TEST_REGEX_SEARCH ( "(?:a(?&abc)b){1,5}(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
882 TEST_REGEX_SEARCH ( "(?:a(?&abc)b){2,5}(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
883 TEST_REGEX_SEARCH ( "(?:a(?&abc)b){2,}(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
884 TEST_INVALID_REGEX ( "(?<a>)(?&)" , perl
| mod_x
);
885 TEST_INVALID_REGEX ( "(?<abc>)(?&a)" , perl
| mod_x
);
886 TEST_INVALID_REGEX ( "(?<a>)(?&aaaaaaaaaaaaaaaaaaaaaaa)" , perl
| mod_x
);
887 TEST_INVALID_REGEX ( "(?&N)[]a(?<N>)](?<M>abc)" , perl
| mod_x
);
888 TEST_INVALID_REGEX ( "(?&N)[]a(?<N>)](abc)" , perl
| mod_x
);
889 TEST_INVALID_REGEX ( "(?&N)[]a(?<N>)](abc)" , perl
| mod_x
);
890 TEST_REGEX_SEARCH ( "^X(?&N)(a)(?|(b)|(q))(c)(d)(?<N>Y)" , perl
| mod_x
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
891 // And again with (?P> :
892 //TEST_REGEX_SEARCH("^\\W*(?:(?<one>(?<two>.)\\W*(?&one)\\W*\\k<two>|)|(?<three>(?<four>.)\\W*(?&three)\\W*\\k'four'|\\W*.\\W*))\\W*$", perl|mod_x|icase, "Satan, oscillate my metallic sonatas!", match_default, make_array(0, 37, -1, -1, -1, -1, 0, 36, 0, 1, -2, -2));
893 TEST_REGEX_SEARCH ( "(?'abc'a|b)(?<doe>d|e)(?P>abc){2}" , perl
| mod_x
, "bdaa" , match_default
, make_array ( 0 , 4 , 0 , 1 , 1 , 2 , - 2 , - 2 ));
894 TEST_REGEX_SEARCH ( "(?'abc'a|b)(?<doe>d|e)(?P>abc){2}" , perl
| mod_x
, "bdab" , match_default
, make_array ( 0 , 4 , 0 , 1 , 1 , 2 , - 2 , - 2 ));
895 TEST_REGEX_SEARCH ( "(?'abc'a|b)(?<doe>d|e)(?P>abc){2}" , perl
| mod_x
, "bddd" , match_default
, make_array (- 2 , - 2 ));
896 TEST_REGEX_SEARCH ( "(?P>abc)X(?<abc>P)" , perl
| mod_x
, "abcPXP123" , match_default
, make_array ( 3 , 6 , 5 , 6 , - 2 , - 2 ));
897 TEST_REGEX_SEARCH ( "(?:a(?P>abc)b)*(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
898 TEST_REGEX_SEARCH ( "(?:a(?P>abc)b){1,5}(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
899 TEST_REGEX_SEARCH ( "(?:a(?P>abc)b){2,5}(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
900 TEST_REGEX_SEARCH ( "(?:a(?P>abc)b){2,}(?<abc>x)" , perl
| mod_x
, "123axbaxbaxbx456" , match_default
, make_array ( 3 , 13 , 12 , 13 , - 2 , - 2 ));
901 TEST_INVALID_REGEX ( "(?<a>)(?P>)" , perl
| mod_x
);
902 TEST_INVALID_REGEX ( "(?<abc>)(?P>a)" , perl
| mod_x
);
903 TEST_INVALID_REGEX ( "(?<a>)(?P>aaaaaaaaaaaaaaaaaaaaaaa)" , perl
| mod_x
);
904 TEST_INVALID_REGEX ( "(?P>N)[]a(?<N>)](?<M>abc)" , perl
| mod_x
);
905 TEST_INVALID_REGEX ( "(?P>N)[]a(?<N>)](abc)" , perl
| mod_x
);
906 TEST_INVALID_REGEX ( "(?P>N)[]a(?<N>)](abc)" , perl
| mod_x
);
907 TEST_REGEX_SEARCH ( "^X(?P>N)(a)(?|(b)|(q))(c)(d)(?<N>Y)" , perl
| mod_x
, "XYabcdY" , match_default
, make_array ( 0 , 7 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , - 2 , - 2 ));
908 // Now check (?(R&NAME) :
909 TEST_REGEX_SEARCH ( "(?<A> (?'B' abc (?(R) (?(R&A)1) (?(R&B)2) X | (?1) (?2) (?R) ))) " , perl
| mod_x
, "abcabc1Xabc2XabcXabcabc" , match_default
, make_array ( 0 , 17 , 0 , 17 , 0 , 17 , - 2 , - 2 ));
910 TEST_INVALID_REGEX ( "(?<A> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X | (?1) (?2) (?R) ))) " , perl
| mod_x
);
911 TEST_REGEX_SEARCH ( "(?<1> (?'B' abc (?(R) (?(R&1)1) (?(R&B)2) X | (?1) (?2) (?R) ))) " , perl
| mod_x
, "abcabc1Xabc2XabcXabcabc" , match_default
, make_array ( 0 , 17 , 0 , 17 , 0 , 17 , - 2 , - 2 ));
913 // Now check for named conditionals:
914 TEST_REGEX_SEARCH ( "^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)" , perl
| mod_x
, "abd" , match_default
, make_array ( 0 , 3 , 0 , 1 , - 2 , - 2 ));
915 TEST_REGEX_SEARCH ( "^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)" , perl
| mod_x
, "ce" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 2 , - 2 ));
917 // Recursions in combination with (DEFINE):
918 TEST_REGEX_SEARCH ( "^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) " , perl
| mod_x
, "abcd" , match_default
, make_array ( 0 , 2 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
919 TEST_REGEX_SEARCH ( "(?<NAME>(?&NAME_PAT)) \\ s+(?<ADDR>(?&ADDRESS_PAT)) (?(DEFINE) (?<NAME_PAT>[a-z]+) (?<ADDRESS_PAT> \\ d+))" , perl
| mod_x
, "metcalfe 33" , match_default
, make_array ( 0 , 11 , 0 , 8 , 9 , 11 , - 1 , - 1 , - 1 , - 1 , - 2 , - 2 ));
920 TEST_INVALID_REGEX ( "^(?(DEFINE) abc | xyz ) " , perl
| mod_x
);
921 //TEST_INVALID_REGEX("(?(DEFINE) abc){3} xyz", perl|mod_x);
922 TEST_REGEX_SEARCH ( "(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d)) \\ b(?&byte)( \\ .(?&byte)){3}" , perl
| mod_x
, "1.2.3.4" , match_default
, make_array ( 0 , 7 , - 1 , - 1 , 5 , 7 , - 2 , - 2 ));
923 TEST_REGEX_SEARCH ( "(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d)) \\ b(?&byte)( \\ .(?&byte)){3}" , perl
| mod_x
, "131.111.10.206" , match_default
, make_array ( 0 , 14 , - 1 , - 1 , 10 , 14 , - 2 , - 2 ));
924 TEST_REGEX_SEARCH ( "(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d)) \\ b(?&byte)( \\ .(?&byte)){3}" , perl
| mod_x
, "10.0.0.0" , match_default
, make_array ( 0 , 8 , - 1 , - 1 , 6 , 8 , - 2 , - 2 ));
925 TEST_REGEX_SEARCH ( "(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d)) \\ b(?&byte)( \\ .(?&byte)){3}" , perl
| mod_x
, "10.6" , match_default
, make_array (- 2 , - 2 ));
926 TEST_REGEX_SEARCH ( "(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d)) \\ b(?&byte)( \\ .(?&byte)){3}" , perl
| mod_x
, "455.3.4.5" , match_default
, make_array (- 2 , - 2 ));
927 TEST_REGEX_SEARCH ( " \\ b(?&byte)( \\ .(?&byte)){3}(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d))" , perl
| mod_x
, "1.2.3.4" , match_default
, make_array ( 0 , 7 , 5 , 7 , - 1 , - 1 , - 2 , - 2 ));
928 TEST_REGEX_SEARCH ( " \\ b(?&byte)( \\ .(?&byte)){3}(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d))" , perl
| mod_x
, "131.111.10.206" , match_default
, make_array ( 0 , 14 , 10 , 14 , - 1 , - 1 , - 2 , - 2 ));
929 TEST_REGEX_SEARCH ( " \\ b(?&byte)( \\ .(?&byte)){3}(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d))" , perl
| mod_x
, "10.0.0.0" , match_default
, make_array ( 0 , 8 , 6 , 8 , - 1 , - 1 , - 2 , - 2 ));
930 TEST_REGEX_SEARCH ( " \\ b(?&byte)( \\ .(?&byte)){3}(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d))" , perl
| mod_x
, "10.6" , match_default
, make_array (- 2 , - 2 ));
931 TEST_REGEX_SEARCH ( " \\ b(?&byte)( \\ .(?&byte)){3}(?(DEFINE)(?<byte>2[0-4] \\ d|25[0-5]|1 \\ d \\ d|[1-9]? \\ d))" , perl
| mod_x
, "455.3.4.5" , match_default
, make_array (- 2 , - 2 ));
934 TEST_REGEX_SEARCH ( "namespace \\ s+( \\ w+) \\ s+( \\ {(?:[^{}]*(?:(?2)[^{}]*)*)? \\ })" , perl
, "namespace one { namespace two { int foo(); } }" , match_default
, make_array ( 0 , 46 , 10 , 13 , 14 , 46 , - 2 , - 2 ));
935 TEST_REGEX_SEARCH ( "namespace \\ s+( \\ w+) \\ s+( \\ {(?:[^{}]*(?:(?2)[^{}]*)*)? \\ })" , perl
, "namespace one { namespace two { int foo(){} } { {{{ } } } } {}}" , match_default
, make_array ( 0 , 64 , 10 , 13 , 14 , 64 , - 2 , - 2 ));
936 TEST_INVALID_REGEX ( "((?1)|a)" , perl
);
937 TEST_REGEX_SEARCH ( "a(?0)?" , perl
, "aaaaa" , match_default
, make_array ( 0 , 5 , - 2 , - 2 ));
939 // Recursion to a named sub with a name that is used multiple times:
940 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)) \\ .(?&A)" , perl
, "aaaa.aa" , match_default
, make_array ( 0 , 7 , 0 , 4 , - 1 , - 1 , - 2 , - 2 ));
941 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)) \\ .(?&A)" , perl
, "bbbb.aa" , match_default
, make_array ( 0 , 7 , - 1 , - 1 , 0 , 4 , - 2 , - 2 ));
942 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)) \\ .(?&A)" , perl
, "bbbb.bb" , match_default
, make_array (- 2 , - 2 ));
943 // Back reference to a named sub with a name that is used multiple times:
944 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)) \\ . \\ k<A>" , perl
, "aaaa.aaaa" , match_default
, make_array ( 0 , 9 , 0 , 4 , - 1 , - 1 , - 2 , - 2 ));
945 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)) \\ . \\ k<A>" , perl
, "bbbb.aaaa" , match_default
, make_array (- 2 , - 2 ));
946 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)) \\ . \\ k<A>" , perl
, "aaaa.bbbb" , match_default
, make_array (- 2 , - 2 ));
947 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)) \\ . \\ k<A>" , perl
, "bbbb.bbbb" , match_default
, make_array ( 0 , 9 , - 1 , - 1 , 0 , 4 , - 2 , - 2 ));
948 TEST_REGEX_SEARCH ( "(?:(?<A>a+)|(?<A>b+)|c+) \\ . \\ k<A>" , perl
, "cccc.cccc" , match_default
, make_array (- 2 , - 2 ));
953 using namespace boost :: regex_constants
;
955 TEST_INVALID_REGEX ( "a+(*" , perl
);
956 TEST_INVALID_REGEX ( "a+(*FX)" , perl
);
957 TEST_REGEX_SEARCH ( "a+(*FAIL)b" , perl
, "aaaab" , match_default
, make_array (- 2 , - 2 ));
958 TEST_REGEX_SEARCH ( "(A(A|B(*ACCEPT)|C)D)(E)" , perl
, "AB" , match_default
, make_array ( 0 , 2 , 0 , 2 , 1 , 2 , - 1 , - 1 , - 2 , - 2 ));
959 TEST_REGEX_SEARCH ( "(A(A|B(*ACCEPT)|C)D)(E)" , perl
, "ACDE" , match_default
, make_array ( 0 , 4 , 0 , 3 , 1 , 2 , 3 , 4 , - 2 , - 2 ));
961 TEST_REGEX_SEARCH ( "^a+(*FAIL)" , perl
, "aaaaaa" , match_default
, make_array (- 2 , - 2 ));
962 TEST_REGEX_SEARCH ( "a+b?c+(*FAIL)" , perl
, "aaabccc" , match_default
, make_array (- 2 , - 2 ));
963 TEST_REGEX_SEARCH ( "a+b?(*COMMIT)c+(*FAIL)" , perl
, "aaabccc" , match_default
, make_array (- 2 , - 2 ));
965 TEST_REGEX_SEARCH ( "(A(A|B(*ACCEPT)|C)D)(E)" , perl
, "AB" , match_default
, make_array ( 0 , 2 , 0 , 2 , 1 , 2 , - 1 , - 1 , - 2 , - 2 ));
966 TEST_REGEX_SEARCH ( "(A(A|B(*ACCEPT)|C)D)(E)" , perl
, "ABX" , match_default
, make_array ( 0 , 2 , 0 , 2 , 1 , 2 , - 1 , - 1 , - 2 , - 2 ));
967 TEST_REGEX_SEARCH ( "(A(A|B(*ACCEPT)|C)D)(E)" , perl
, "AADE" , match_default
, make_array ( 0 , 4 , 0 , 3 , 1 , 2 , 3 , 4 , - 2 , - 2 ));
968 TEST_REGEX_SEARCH ( "(A(A|B(*ACCEPT)|C)D)(E)" , perl
, "ACDE" , match_default
, make_array ( 0 , 4 , 0 , 3 , 1 , 2 , 3 , 4 , - 2 , - 2 ));
969 TEST_REGEX_SEARCH ( "(A(A|B(*ACCEPT)|C)D)(E)" , perl
, "AD" , match_default
, make_array (- 2 , - 2 ));
971 TEST_REGEX_SEARCH ( "(?:(?1)|B)(A(*ACCEPT)XX|C)D" , perl
, "AAD" , match_default
, make_array ( 0 , 2 , 1 , 2 , - 2 , - 2 ));
972 TEST_REGEX_SEARCH ( "(?:(?1)|B)(A(*ACCEPT)XX|C)D" , perl
, "ACD" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
973 TEST_REGEX_SEARCH ( "(?:(?1)|B)(A(*ACCEPT)XX|C)D" , perl
, "BAD" , match_default
, make_array ( 0 , 2 , 1 , 2 , - 2 , - 2 ));
974 TEST_REGEX_SEARCH ( "(?:(?1)|B)(A(*ACCEPT)XX|C)D" , perl
, "BCD" , match_default
, make_array ( 0 , 3 , 1 , 2 , - 2 , - 2 ));
975 TEST_REGEX_SEARCH ( "(?:(?1)|B)(A(*ACCEPT)XX|C)D" , perl
, "BAX" , match_default
, make_array ( 0 , 2 , 1 , 2 , - 2 , - 2 ));
976 TEST_REGEX_SEARCH ( "(?:(?1)|B)(A(*ACCEPT)XX|C)D" , perl
, "ACX" , match_default
, make_array (- 2 , - 2 ));
977 TEST_REGEX_SEARCH ( "(?:(?1)|B)(A(*ACCEPT)XX|C)D" , perl
, "ABC" , match_default
, make_array (- 2 , - 2 ));
979 TEST_REGEX_SEARCH ( "^(?=a(*ACCEPT)b)" , perl
, "ac" , match_default
, make_array ( 0 , 0 , - 2 , - 2 ));
980 TEST_REGEX_SEARCH ( "A(*COMMIT)(B|D)" , perl
, "ACABX" , match_default
, make_array (- 2 , - 2 ));
982 TEST_REGEX_SEARCH ( "(*COMMIT)(A|P)(B|P)(C|P)" , perl
, "ABCDEFG" , match_default
, make_array ( 0 , 3 , 0 , 1 , 1 , 2 , 2 , 3 , - 2 , - 2 ));
983 TEST_REGEX_SEARCH ( "(*COMMIT)(A|P)(B|P)(C|P)" , perl
, "DEFGABC" , match_default
, make_array (- 2 , - 2 ));
985 TEST_REGEX_SEARCH ( "( \\ w+)(?>b(*COMMIT)) \\ w{2}" , perl
, "abbb" , match_default
, make_array ( 0 , 4 , 0 , 1 , - 2 , - 2 ));
986 TEST_REGEX_SEARCH ( "( \\ w+)b(*COMMIT) \\ w{2}" , perl
, "abbb" , match_default
, make_array (- 2 , - 2 ));
988 TEST_REGEX_SEARCH ( "a+b?(*PRUNE)c+(*FAIL)" , perl
, "aaabccc" , match_default
, make_array (- 2 , - 2 ));
989 TEST_REGEX_SEARCH ( "a+b?(*SKIP)c+(*FAIL)" , perl
, "aaabcccaaabccc" , match_default
, make_array (- 2 , - 2 ));
991 TEST_REGEX_SEARCH ( "^(?=a(*SKIP)b|ac)" , perl
, "ac" , match_default
, make_array (- 2 , - 2 ));
992 TEST_REGEX_SEARCH ( "^(?=a(*PRUNE)b)" , perl
, "ab" , match_default
, make_array ( 0 , 0 , - 2 , - 2 ));
993 TEST_REGEX_SEARCH ( "^(?=a(*PRUNE)b)" , perl
, "ac" , match_default
, make_array (- 2 , - 2 ));
994 TEST_REGEX_SEARCH ( "AA+(*PRUNE)(B|Z)|AC" , perl
, "AAAC" , match_default
, make_array ( 2 , 4 , - 1 , - 1 , - 2 , - 2 ));
995 TEST_REGEX_SEARCH ( "AA+(*SKIP)(B|Z)|AC" , perl
, "AAAC" , match_default
, make_array (- 2 , - 2 ));
996 TEST_REGEX_SEARCH ( "AA+(*SKIP)(B|Z)|C" , perl
, "AAAC" , match_default
, make_array ( 3 , 4 , - 1 , - 1 , - 2 , - 2 ));
997 TEST_REGEX_SEARCH ( "AA+(*SKIP)(B|Z)|AC" , perl
, "AAAC" , match_default
, make_array (- 2 , - 2 ));
998 TEST_REGEX_SEARCH ( "AA+(*SKIP)B|C" , perl
, "AAAC" , match_default
, make_array ( 3 , 4 , - 2 , - 2 ));
1000 TEST_REGEX_SEARCH ( "^(?:aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "aaaxxxxxx" , match_default
, make_array ( 0 , 9 , - 2 , - 2 ));
1001 TEST_REGEX_SEARCH ( "^(?:aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "aaa++++++" , match_default
, make_array (- 2 , - 2 ));
1002 TEST_REGEX_SEARCH ( "^(?:aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "bbbxxxxx" , match_default
, make_array ( 0 , 8 , - 2 , - 2 ));
1003 TEST_REGEX_SEARCH ( "^(?:aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "bbb+++++" , match_default
, make_array (- 2 , - 2 ));
1004 TEST_REGEX_SEARCH ( "^(?:aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "cccxxxx" , match_default
, make_array ( 0 , 7 , - 2 , - 2 ));
1005 TEST_REGEX_SEARCH ( "^(?:aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "ccc++++" , match_default
, make_array (- 2 , - 2 ));
1006 TEST_REGEX_SEARCH ( "^(?:aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "dddddddd" , match_default
, make_array ( 0 , 3 , - 2 , - 2 ));
1008 TEST_REGEX_SEARCH ( "^(aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "aaaxxxxxx" , match_default
, make_array ( 0 , 9 , 0 , 9 , - 2 , - 2 ));
1009 TEST_REGEX_SEARCH ( "^(aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "aaa++++++" , match_default
, make_array (- 2 , - 2 ));
1010 TEST_REGEX_SEARCH ( "^(aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "bbbxxxxx" , match_default
, make_array ( 0 , 8 , 0 , 8 , - 2 , - 2 ));
1011 TEST_REGEX_SEARCH ( "^(aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "bbb+++++" , match_default
, make_array (- 2 , - 2 ));
1012 TEST_REGEX_SEARCH ( "^(aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "cccxxxx" , match_default
, make_array ( 0 , 7 , 0 , 7 , - 2 , - 2 ));
1013 TEST_REGEX_SEARCH ( "^(aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "ccc++++" , match_default
, make_array (- 2 , - 2 ));
1014 TEST_REGEX_SEARCH ( "^(aaa(*THEN) \\ w{6}|bbb(*THEN) \\ w{5}|ccc(*THEN) \\ w{4}| \\ w{3})" , perl
, "dddddddd" , match_default
, make_array ( 0 , 3 , 0 , 3 , - 2 , - 2 ));
1016 TEST_REGEX_SEARCH ( "(?:a+(*THEN) \\ w{6}|x \\ w{3})" , perl
, "aaaxxxxx" , match_default
, make_array ( 3 , 7 , - 2 , - 2 ));
1017 TEST_REGEX_SEARCH ( "(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?" , perl
, "yes" , match_default
, make_array (- 2 , - 2 ));
1018 TEST_REGEX_SEARCH ( "(?>(*COMMIT)(yes|no)(*THEN)(*F))?" , perl
, "yes" , match_default
, make_array (- 2 , - 2 ));