blob: adc3a7d4837a6c2400386a9dd15a0bcc35dafd0a [file] [log] [blame]
Guido van Rossum337c6d41997-07-15 18:42:58 +00001#!/usr/bin/env python
2# -*- mode: python -*-
3# $Id$
4
Guido van Rossum8430c581998-04-03 21:47:12 +00005# Re test suite and benchmark suite v1.5
Guido van Rossum8e0ce301997-07-11 19:34:44 +00006
7# The 3 possible outcomes for each pattern
8[SUCCEED, FAIL, SYNTAX_ERROR] = range(3)
9
10# Benchmark suite (needs expansion)
11#
12# The benchmark suite does not test correctness, just speed. The
Fredrik Lundh2643b552000-08-08 16:52:51 +000013# first element of each tuple is the regex pattern; the second is a
Guido van Rossum8e0ce301997-07-11 19:34:44 +000014# string to match it against. The benchmarking code will embed the
Fredrik Lundh2643b552000-08-08 16:52:51 +000015# second string inside several sizes of padding, to test how regex
Guido van Rossum8e0ce301997-07-11 19:34:44 +000016# matching performs on large strings.
17
18benchmarks = [
Fredrik Lundh2643b552000-08-08 16:52:51 +000019 ('Python', 'Python'), # Simple text literal
20 ('.*Python', 'Python'), # Bad text literal
21 ('.*Python.*', 'Python'), # Worse text literal
22 ('.*(Python)', 'Python'), # Bad text literal with grouping
23
24 ('(Python|Perl|Tcl', 'Perl'), # Alternation
25 ('(Python|Perl|Tcl)', 'Perl'), # Grouped alternation
26 ('(Python)\\1', 'PythonPython'), # Backreference
27 ('([0a-z][a-z]*,)+', 'a5,b7,c9,'), # Disable the fastmap optimization
Guido van Rossum8e0ce301997-07-11 19:34:44 +000028 ('([a-z][a-z0-9]*,)+', 'a5,b7,c9,') # A few sets
29]
30
31# Test suite (for verifying correctness)
32#
33# The test suite is a list of 5- or 3-tuples. The 5 parts of a
34# complete tuple are:
35# element 0: a string containing the pattern
36# 1: the string to match against the pattern
37# 2: the expected result (SUCCEED, FAIL, SYNTAX_ERROR)
38# 3: a string that will be eval()'ed to produce a test string.
39# This is an arbitrary Python expression; the available
40# variables are "found" (the whole match), and "g1", "g2", ...
Guido van Rossum16bd0ff1997-07-15 18:45:20 +000041# up to "g99" contain the contents of each group, or the
42# string 'None' if the group wasn't given a value, or the
43# string 'Error' if the group index was out of range;
44# also "groups", the return value of m.group() (a tuple).
Guido van Rossum8e0ce301997-07-11 19:34:44 +000045# 4: The expected result of evaluating the expression.
46# If the two don't match, an error is reported.
47#
48# If the regex isn't expected to work, the latter two elements can be omitted.
49
Fredrik Lundh2643b552000-08-08 16:52:51 +000050tests = [
Guido van Rossumdfa67901997-12-08 17:12:06 +000051 # Test ?P< and ?P= extensions
52 ('(?P<foo_123', '', SYNTAX_ERROR), # Unterminated group identifier
53 ('(?P<1>a)', '', SYNTAX_ERROR), # Begins with a digit
54 ('(?P<!>a)', '', SYNTAX_ERROR), # Begins with an illegal char
55 ('(?P<foo!>a)', '', SYNTAX_ERROR), # Begins with an illegal char
56
57 # Same tests, for the ?P= form
58 ('(?P<foo_123>a)(?P=foo_123', 'aa', SYNTAX_ERROR),
59 ('(?P<foo_123>a)(?P=1)', 'aa', SYNTAX_ERROR),
60 ('(?P<foo_123>a)(?P=!)', 'aa', SYNTAX_ERROR),
61 ('(?P<foo_123>a)(?P=foo_124', 'aa', SYNTAX_ERROR), # Backref to undefined group
62
63 ('(?P<foo_123>a)', 'a', SUCCEED, 'g1', 'a'),
64 ('(?P<foo_123>a)(?P=foo_123)', 'aa', SUCCEED, 'g1', 'a'),
Guido van Rossum8430c581998-04-03 21:47:12 +000065
Guido van Rossumdfa67901997-12-08 17:12:06 +000066 # Test octal escapes
Guido van Rossum8430c581998-04-03 21:47:12 +000067 ('\\1', 'a', SYNTAX_ERROR), # Backreference
68 ('[\\1]', '\1', SUCCEED, 'found', '\1'), # Character
Guido van Rossumdfa67901997-12-08 17:12:06 +000069 ('\\09', chr(0) + '9', SUCCEED, 'found', chr(0) + '9'),
70 ('\\141', 'a', SUCCEED, 'found', 'a'),
71 ('(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\119', 'abcdefghijklk9', SUCCEED, 'found+"-"+g11', 'abcdefghijklk9-k'),
72
Guido van Rossum8430c581998-04-03 21:47:12 +000073 # Test \0 is handled everywhere
Guido van Rossumdfa67901997-12-08 17:12:06 +000074 (r'\0', '\0', SUCCEED, 'found', '\0'),
Guido van Rossumdfa67901997-12-08 17:12:06 +000075 (r'[\0a]', '\0', SUCCEED, 'found', '\0'),
76 (r'[a\0]', '\0', SUCCEED, 'found', '\0'),
77 (r'[^a\0]', '\0', FAIL),
Fredrik Lundh2643b552000-08-08 16:52:51 +000078
Guido van Rossumdfa67901997-12-08 17:12:06 +000079 # Test various letter escapes
80 (r'\a[\b]\f\n\r\t\v', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'),
81 (r'[\a][\b][\f][\n][\r][\t][\v]', '\a\b\f\n\r\t\v', SUCCEED, 'found', '\a\b\f\n\r\t\v'),
82 (r'\u', '', SYNTAX_ERROR), # A Perl escape
83 (r'\c\e\g\h\i\j\k\m\o\p\q\y\z', 'ceghijkmopqyz', SUCCEED, 'found', 'ceghijkmopqyz'),
84 (r'\xff', '\377', SUCCEED, 'found', chr(255)),
85 (r'\x00ffffffffffffff', '\377', SUCCEED, 'found', chr(255)),
86 (r'\x00f', '\017', SUCCEED, 'found', chr(15)),
87 (r'\x00fe', '\376', SUCCEED, 'found', chr(254)),
88
Fredrik Lundh2643b552000-08-08 16:52:51 +000089 (r"^\w+=(\\[\000-\277]|[^\n\\])*", "SRC=eval.c g.c blah blah blah \\\\\n\tapes.c",
Guido van Rossumdfa67901997-12-08 17:12:06 +000090 SUCCEED, 'found', "SRC=eval.c g.c blah blah blah \\\\"),
Fredrik Lundh2643b552000-08-08 16:52:51 +000091
Guido van Rossumdfa67901997-12-08 17:12:06 +000092 # Test that . only matches \n in DOTALL mode
93 ('a.b', 'acb', SUCCEED, 'found', 'acb'),
94 ('a.b', 'a\nb', FAIL),
95 ('a.*b', 'acc\nccb', FAIL),
96 ('a.{4,5}b', 'acc\nccb', FAIL),
97 ('a.b', 'a\rb', SUCCEED, 'found', 'a\rb'),
98 ('a.b(?s)', 'a\nb', SUCCEED, 'found', 'a\nb'),
99 ('a.*(?s)b', 'acc\nccb', SUCCEED, 'found', 'acc\nccb'),
100 ('(?s)a.{4,5}b', 'acc\nccb', SUCCEED, 'found', 'acc\nccb'),
101 ('(?s)a.b', 'a\nb', SUCCEED, 'found', 'a\nb'),
102
Guido van Rossum8430c581998-04-03 21:47:12 +0000103 (')', '', SYNTAX_ERROR), # Unmatched right bracket
104 ('', '', SUCCEED, 'found', ''), # Empty pattern
Guido van Rossum337c6d41997-07-15 18:42:58 +0000105 ('abc', 'abc', SUCCEED, 'found', 'abc'),
106 ('abc', 'xbc', FAIL),
107 ('abc', 'axc', FAIL),
108 ('abc', 'abx', FAIL),
109 ('abc', 'xabcy', SUCCEED, 'found', 'abc'),
110 ('abc', 'ababc', SUCCEED, 'found', 'abc'),
111 ('ab*c', 'abc', SUCCEED, 'found', 'abc'),
112 ('ab*bc', 'abc', SUCCEED, 'found', 'abc'),
113 ('ab*bc', 'abbc', SUCCEED, 'found', 'abbc'),
114 ('ab*bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
115 ('ab+bc', 'abbc', SUCCEED, 'found', 'abbc'),
116 ('ab+bc', 'abc', FAIL),
117 ('ab+bc', 'abq', FAIL),
118 ('ab+bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
119 ('ab?bc', 'abbc', SUCCEED, 'found', 'abbc'),
120 ('ab?bc', 'abc', SUCCEED, 'found', 'abc'),
121 ('ab?bc', 'abbbbc', FAIL),
122 ('ab?c', 'abc', SUCCEED, 'found', 'abc'),
123 ('^abc$', 'abc', SUCCEED, 'found', 'abc'),
124 ('^abc$', 'abcc', FAIL),
125 ('^abc', 'abcc', SUCCEED, 'found', 'abc'),
126 ('^abc$', 'aabc', FAIL),
127 ('abc$', 'aabc', SUCCEED, 'found', 'abc'),
128 ('^', 'abc', SUCCEED, 'found+"-"', '-'),
129 ('$', 'abc', SUCCEED, 'found+"-"', '-'),
130 ('a.c', 'abc', SUCCEED, 'found', 'abc'),
131 ('a.c', 'axc', SUCCEED, 'found', 'axc'),
132 ('a.*c', 'axyzc', SUCCEED, 'found', 'axyzc'),
133 ('a.*c', 'axyzd', FAIL),
134 ('a[bc]d', 'abc', FAIL),
135 ('a[bc]d', 'abd', SUCCEED, 'found', 'abd'),
136 ('a[b-d]e', 'abd', FAIL),
137 ('a[b-d]e', 'ace', SUCCEED, 'found', 'ace'),
138 ('a[b-d]', 'aac', SUCCEED, 'found', 'ac'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000139 ('a[-b]', 'a-', SUCCEED, 'found', 'a-'),
Guido van Rossum337c6d41997-07-15 18:42:58 +0000140 ('a[\\-b]', 'a-', SUCCEED, 'found', 'a-'),
141 ('a[b-]', 'a-', SYNTAX_ERROR),
142 ('a[]b', '-', SYNTAX_ERROR),
143 ('a[', '-', SYNTAX_ERROR),
144 ('a\\', '-', SYNTAX_ERROR),
145 ('abc)', '-', SYNTAX_ERROR),
146 ('(abc', '-', SYNTAX_ERROR),
147 ('a]', 'a]', SUCCEED, 'found', 'a]'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000148 ('a[]]b', 'a]b', SUCCEED, 'found', 'a]b'),
Guido van Rossum337c6d41997-07-15 18:42:58 +0000149 ('a[\]]b', 'a]b', SUCCEED, 'found', 'a]b'),
150 ('a[^bc]d', 'aed', SUCCEED, 'found', 'aed'),
151 ('a[^bc]d', 'abd', FAIL),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000152 ('a[^-b]c', 'adc', SUCCEED, 'found', 'adc'),
153 ('a[^-b]c', 'a-c', FAIL),
154 ('a[^]b]c', 'a]c', FAIL),
155 ('a[^]b]c', 'adc', SUCCEED, 'found', 'adc'),
Guido van Rossum337c6d41997-07-15 18:42:58 +0000156 ('\\ba\\b', 'a-', SUCCEED, '"-"', '-'),
157 ('\\ba\\b', '-a', SUCCEED, '"-"', '-'),
158 ('\\ba\\b', '-a-', SUCCEED, '"-"', '-'),
159 ('\\by\\b', 'xy', FAIL),
160 ('\\by\\b', 'yz', FAIL),
161 ('\\by\\b', 'xyz', FAIL),
Guido van Rossumcf005051997-08-15 15:44:58 +0000162 ('x\\b', 'xyz', FAIL),
163 ('x\\B', 'xyz', SUCCEED, '"-"', '-'),
164 ('\\Bz', 'xyz', SUCCEED, '"-"', '-'),
165 ('z\\B', 'xyz', FAIL),
166 ('\\Bx', 'xyz', FAIL),
167 ('\\Ba\\B', 'a-', FAIL, '"-"', '-'),
168 ('\\Ba\\B', '-a', FAIL, '"-"', '-'),
169 ('\\Ba\\B', '-a-', FAIL, '"-"', '-'),
170 ('\\By\\B', 'xy', FAIL),
171 ('\\By\\B', 'yz', FAIL),
172 ('\\By\\b', 'xy', SUCCEED, '"-"', '-'),
173 ('\\by\\B', 'yz', SUCCEED, '"-"', '-'),
174 ('\\By\\B', 'xyz', SUCCEED, '"-"', '-'),
Guido van Rossum337c6d41997-07-15 18:42:58 +0000175 ('ab|cd', 'abc', SUCCEED, 'found', 'ab'),
176 ('ab|cd', 'abcd', SUCCEED, 'found', 'ab'),
177 ('()ef', 'def', SUCCEED, 'found+"-"+g1', 'ef-'),
178 ('$b', 'b', FAIL),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000179 ('a\\(b', 'a(b', SUCCEED, 'found+"-"+g1', 'a(b-Error'),
Guido van Rossum337c6d41997-07-15 18:42:58 +0000180 ('a\\(*b', 'ab', SUCCEED, 'found', 'ab'),
181 ('a\\(*b', 'a((b', SUCCEED, 'found', 'a((b'),
182 ('a\\\\b', 'a\\b', SUCCEED, 'found', 'a\\b'),
183 ('((a))', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'a-a-a'),
184 ('(a)b(c)', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'abc-a-c'),
185 ('a+b+c', 'aabbabc', SUCCEED, 'found', 'abc'),
186 ('(a+|b)*', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),
187 ('(a+|b)+', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),
188 ('(a+|b)?', 'ab', SUCCEED, 'found+"-"+g1', 'a-a'),
189 (')(', '-', SYNTAX_ERROR),
190 ('[^ab]*', 'cde', SUCCEED, 'found', 'cde'),
191 ('abc', '', FAIL),
192 ('a*', '', SUCCEED, 'found', ''),
193 ('a|b|c|d|e', 'e', SUCCEED, 'found', 'e'),
194 ('(a|b|c|d|e)f', 'ef', SUCCEED, 'found+"-"+g1', 'ef-e'),
195 ('abcd*efg', 'abcdefg', SUCCEED, 'found', 'abcdefg'),
196 ('ab*', 'xabyabbbz', SUCCEED, 'found', 'ab'),
197 ('ab*', 'xayabbbz', SUCCEED, 'found', 'a'),
198 ('(ab|cd)e', 'abcde', SUCCEED, 'found+"-"+g1', 'cde-cd'),
199 ('[abhgefdc]ij', 'hij', SUCCEED, 'found', 'hij'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000200 ('^(ab|cd)e', 'abcde', FAIL, 'xg1y', 'xy'),
Guido van Rossum337c6d41997-07-15 18:42:58 +0000201 ('(abc|)ef', 'abcdef', SUCCEED, 'found+"-"+g1', 'ef-'),
202 ('(a|b)c*d', 'abcd', SUCCEED, 'found+"-"+g1', 'bcd-b'),
203 ('(ab|ab*)bc', 'abc', SUCCEED, 'found+"-"+g1', 'abc-a'),
204 ('a([bc]*)c*', 'abc', SUCCEED, 'found+"-"+g1', 'abc-bc'),
205 ('a([bc]*)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),
206 ('a([bc]+)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),
207 ('a([bc]*)(c+d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-b-cd'),
208 ('a[bcd]*dcdcde', 'adcdcde', SUCCEED, 'found', 'adcdcde'),
209 ('a[bcd]+dcdcde', 'adcdcde', FAIL),
210 ('(ab|a)b*c', 'abc', SUCCEED, 'found+"-"+g1', 'abc-ab'),
211 ('((a)(b)c)(d)', 'abcd', SUCCEED, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d'),
212 ('[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', SUCCEED, 'found', 'alpha'),
213 ('^a(bc+|b[eh])g|.h$', 'abh', SUCCEED, 'found+"-"+g1', 'bh-None'),
214 ('(bc+d$|ef*g.|h?i(j|k))', 'effgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),
215 ('(bc+d$|ef*g.|h?i(j|k))', 'ij', SUCCEED, 'found+"-"+g1+"-"+g2', 'ij-ij-j'),
216 ('(bc+d$|ef*g.|h?i(j|k))', 'effg', FAIL),
217 ('(bc+d$|ef*g.|h?i(j|k))', 'bcdd', FAIL),
218 ('(bc+d$|ef*g.|h?i(j|k))', 'reffgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),
219 ('(((((((((a)))))))))', 'a', SUCCEED, 'found', 'a'),
220 ('multiple words of text', 'uh-uh', FAIL),
221 ('multiple words', 'multiple words, yeah', SUCCEED, 'found', 'multiple words'),
222 ('(.*)c(.*)', 'abcde', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcde-ab-de'),
223 ('\\((.*), (.*)\\)', '(a, b)', SUCCEED, 'g2+"-"+g1', 'b-a'),
224 ('[k]', 'ab', FAIL),
225 ('a[-]?c', 'ac', SUCCEED, 'found', 'ac'),
226 ('(abc)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),
227 ('([a-c]*)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),
228 ('^(.+)?B', 'AB', SUCCEED, 'g1', 'A'),
229 ('(a+).\\1$', 'aaaaa', SUCCEED, 'found+"-"+g1', 'aaaaa-aa'),
230 ('^(a+).\\1$', 'aaaa', FAIL),
231 ('(abc)\\1', 'abcabc', SUCCEED, 'found+"-"+g1', 'abcabc-abc'),
232 ('([a-c]+)\\1', 'abcabc', SUCCEED, 'found+"-"+g1', 'abcabc-abc'),
233 ('(a)\\1', 'aa', SUCCEED, 'found+"-"+g1', 'aa-a'),
234 ('(a+)\\1', 'aa', SUCCEED, 'found+"-"+g1', 'aa-a'),
235 ('(a+)+\\1', 'aa', SUCCEED, 'found+"-"+g1', 'aa-a'),
236 ('(a).+\\1', 'aba', SUCCEED, 'found+"-"+g1', 'aba-a'),
237 ('(a)ba*\\1', 'aba', SUCCEED, 'found+"-"+g1', 'aba-a'),
238 ('(aa|a)a\\1$', 'aaa', SUCCEED, 'found+"-"+g1', 'aaa-a'),
239 ('(a|aa)a\\1$', 'aaa', SUCCEED, 'found+"-"+g1', 'aaa-a'),
240 ('(a+)a\\1$', 'aaa', SUCCEED, 'found+"-"+g1', 'aaa-a'),
241 ('([abc]*)\\1', 'abcabc', SUCCEED, 'found+"-"+g1', 'abcabc-abc'),
242 ('(a)(b)c|ab', 'ab', SUCCEED, 'found+"-"+g1+"-"+g2', 'ab-None-None'),
243 ('(a)+x', 'aaax', SUCCEED, 'found+"-"+g1', 'aaax-a'),
244 ('([ac])+x', 'aacx', SUCCEED, 'found+"-"+g1', 'aacx-c'),
245 ('([^/]*/)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', SUCCEED, 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/'),
246 ('([^.]*)\\.([^:]*):[T ]+(.*)', 'track1.title:TBlah blah blah', SUCCEED, 'found+"-"+g1+"-"+g2+"-"+g3', 'track1.title:TBlah blah blah-track1-title-Blah blah blah'),
247 ('([^N]*N)+', 'abNNxyzN', SUCCEED, 'found+"-"+g1', 'abNNxyzN-xyzN'),
248 ('([^N]*N)+', 'abNNxyz', SUCCEED, 'found+"-"+g1', 'abNN-N'),
249 ('([abc]*)x', 'abcx', SUCCEED, 'found+"-"+g1', 'abcx-abc'),
250 ('([abc]*)x', 'abc', FAIL),
251 ('([xyz]*)x', 'abcx', SUCCEED, 'found+"-"+g1', 'x-'),
252 ('(a)+b|aac', 'aac', SUCCEED, 'found+"-"+g1', 'aac-None'),
253
254 # Test symbolic groups
255
256 ('(?P<i d>aaa)a', 'aaaa', SYNTAX_ERROR),
257 ('(?P<id>aaa)a', 'aaaa', SUCCEED, 'found+"-"+id', 'aaaa-aaa'),
258 ('(?P<id>aa)(?P=id)', 'aaaa', SUCCEED, 'found+"-"+id', 'aaaa-aa'),
259 ('(?P<id>aa)(?P=xd)', 'aaaa', SYNTAX_ERROR),
260
261 # Test octal escapes/memory references
262
263 ('\\1', 'a', SYNTAX_ERROR),
264 ('\\09', chr(0) + '9', SUCCEED, 'found', chr(0) + '9'),
265 ('\\141', 'a', SUCCEED, 'found', 'a'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000266 ('(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\\119', 'abcdefghijklk9', SUCCEED, 'found+"-"+g11', 'abcdefghijklk9-k'),
Fredrik Lundh2643b552000-08-08 16:52:51 +0000267
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000268 # All tests from Perl
269
270 ('abc', 'abc', SUCCEED, 'found', 'abc'),
271 ('abc', 'xbc', FAIL),
272 ('abc', 'axc', FAIL),
273 ('abc', 'abx', FAIL),
274 ('abc', 'xabcy', SUCCEED, 'found', 'abc'),
275 ('abc', 'ababc', SUCCEED, 'found', 'abc'),
276 ('ab*c', 'abc', SUCCEED, 'found', 'abc'),
277 ('ab*bc', 'abc', SUCCEED, 'found', 'abc'),
278 ('ab*bc', 'abbc', SUCCEED, 'found', 'abbc'),
279 ('ab*bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
280 ('ab{0,}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
281 ('ab+bc', 'abbc', SUCCEED, 'found', 'abbc'),
282 ('ab+bc', 'abc', FAIL),
283 ('ab+bc', 'abq', FAIL),
284 ('ab{1,}bc', 'abq', FAIL),
285 ('ab+bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
286 ('ab{1,}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
287 ('ab{1,3}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
288 ('ab{3,4}bc', 'abbbbc', SUCCEED, 'found', 'abbbbc'),
289 ('ab{4,5}bc', 'abbbbc', FAIL),
290 ('ab?bc', 'abbc', SUCCEED, 'found', 'abbc'),
291 ('ab?bc', 'abc', SUCCEED, 'found', 'abc'),
292 ('ab{0,1}bc', 'abc', SUCCEED, 'found', 'abc'),
293 ('ab?bc', 'abbbbc', FAIL),
294 ('ab?c', 'abc', SUCCEED, 'found', 'abc'),
295 ('ab{0,1}c', 'abc', SUCCEED, 'found', 'abc'),
296 ('^abc$', 'abc', SUCCEED, 'found', 'abc'),
297 ('^abc$', 'abcc', FAIL),
298 ('^abc', 'abcc', SUCCEED, 'found', 'abc'),
299 ('^abc$', 'aabc', FAIL),
300 ('abc$', 'aabc', SUCCEED, 'found', 'abc'),
301 ('^', 'abc', SUCCEED, 'found', ''),
302 ('$', 'abc', SUCCEED, 'found', ''),
303 ('a.c', 'abc', SUCCEED, 'found', 'abc'),
304 ('a.c', 'axc', SUCCEED, 'found', 'axc'),
305 ('a.*c', 'axyzc', SUCCEED, 'found', 'axyzc'),
306 ('a.*c', 'axyzd', FAIL),
307 ('a[bc]d', 'abc', FAIL),
308 ('a[bc]d', 'abd', SUCCEED, 'found', 'abd'),
309 ('a[b-d]e', 'abd', FAIL),
310 ('a[b-d]e', 'ace', SUCCEED, 'found', 'ace'),
311 ('a[b-d]', 'aac', SUCCEED, 'found', 'ac'),
312 ('a[-b]', 'a-', SUCCEED, 'found', 'a-'),
313 ('a[b-]', 'a-', SUCCEED, 'found', 'a-'),
314 ('a[b-a]', '-', SYNTAX_ERROR),
315 ('a[]b', '-', SYNTAX_ERROR),
316 ('a[', '-', SYNTAX_ERROR),
317 ('a]', 'a]', SUCCEED, 'found', 'a]'),
318 ('a[]]b', 'a]b', SUCCEED, 'found', 'a]b'),
319 ('a[^bc]d', 'aed', SUCCEED, 'found', 'aed'),
320 ('a[^bc]d', 'abd', FAIL),
321 ('a[^-b]c', 'adc', SUCCEED, 'found', 'adc'),
322 ('a[^-b]c', 'a-c', FAIL),
323 ('a[^]b]c', 'a]c', FAIL),
324 ('a[^]b]c', 'adc', SUCCEED, 'found', 'adc'),
325 ('ab|cd', 'abc', SUCCEED, 'found', 'ab'),
326 ('ab|cd', 'abcd', SUCCEED, 'found', 'ab'),
327 ('()ef', 'def', SUCCEED, 'found+"-"+g1', 'ef-'),
328 ('*a', '-', SYNTAX_ERROR),
329 ('(*)b', '-', SYNTAX_ERROR),
330 ('$b', 'b', FAIL),
331 ('a\\', '-', SYNTAX_ERROR),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000332 ('a\\(b', 'a(b', SUCCEED, 'found+"-"+g1', 'a(b-Error'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000333 ('a\\(*b', 'ab', SUCCEED, 'found', 'ab'),
334 ('a\\(*b', 'a((b', SUCCEED, 'found', 'a((b'),
335 ('a\\\\b', 'a\\b', SUCCEED, 'found', 'a\\b'),
336 ('abc)', '-', SYNTAX_ERROR),
337 ('(abc', '-', SYNTAX_ERROR),
338 ('((a))', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'a-a-a'),
339 ('(a)b(c)', 'abc', SUCCEED, 'found+"-"+g1+"-"+g2', 'abc-a-c'),
340 ('a+b+c', 'aabbabc', SUCCEED, 'found', 'abc'),
341 ('a{1,}b{1,}c', 'aabbabc', SUCCEED, 'found', 'abc'),
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000342 ('a**', '-', SYNTAX_ERROR),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000343 ('a.+?c', 'abcabc', SUCCEED, 'found', 'abc'),
344 ('(a+|b)*', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),
345 ('(a+|b){0,}', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),
346 ('(a+|b)+', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),
347 ('(a+|b){1,}', 'ab', SUCCEED, 'found+"-"+g1', 'ab-b'),
348 ('(a+|b)?', 'ab', SUCCEED, 'found+"-"+g1', 'a-a'),
349 ('(a+|b){0,1}', 'ab', SUCCEED, 'found+"-"+g1', 'a-a'),
350 (')(', '-', SYNTAX_ERROR),
351 ('[^ab]*', 'cde', SUCCEED, 'found', 'cde'),
352 ('abc', '', FAIL),
353 ('a*', '', SUCCEED, 'found', ''),
354 ('([abc])*d', 'abbbcd', SUCCEED, 'found+"-"+g1', 'abbbcd-c'),
355 ('([abc])*bcd', 'abcd', SUCCEED, 'found+"-"+g1', 'abcd-a'),
356 ('a|b|c|d|e', 'e', SUCCEED, 'found', 'e'),
357 ('(a|b|c|d|e)f', 'ef', SUCCEED, 'found+"-"+g1', 'ef-e'),
358 ('abcd*efg', 'abcdefg', SUCCEED, 'found', 'abcdefg'),
359 ('ab*', 'xabyabbbz', SUCCEED, 'found', 'ab'),
360 ('ab*', 'xayabbbz', SUCCEED, 'found', 'a'),
361 ('(ab|cd)e', 'abcde', SUCCEED, 'found+"-"+g1', 'cde-cd'),
362 ('[abhgefdc]ij', 'hij', SUCCEED, 'found', 'hij'),
363 ('^(ab|cd)e', 'abcde', FAIL),
364 ('(abc|)ef', 'abcdef', SUCCEED, 'found+"-"+g1', 'ef-'),
365 ('(a|b)c*d', 'abcd', SUCCEED, 'found+"-"+g1', 'bcd-b'),
366 ('(ab|ab*)bc', 'abc', SUCCEED, 'found+"-"+g1', 'abc-a'),
367 ('a([bc]*)c*', 'abc', SUCCEED, 'found+"-"+g1', 'abc-bc'),
368 ('a([bc]*)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),
369 ('a([bc]+)(c*d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),
370 ('a([bc]*)(c+d)', 'abcd', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcd-b-cd'),
371 ('a[bcd]*dcdcde', 'adcdcde', SUCCEED, 'found', 'adcdcde'),
372 ('a[bcd]+dcdcde', 'adcdcde', FAIL),
373 ('(ab|a)b*c', 'abc', SUCCEED, 'found+"-"+g1', 'abc-ab'),
374 ('((a)(b)c)(d)', 'abcd', SUCCEED, 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d'),
375 ('[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', SUCCEED, 'found', 'alpha'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000376 ('^a(bc+|b[eh])g|.h$', 'abh', SUCCEED, 'found+"-"+g1', 'bh-None'),
377 ('(bc+d$|ef*g.|h?i(j|k))', 'effgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000378 ('(bc+d$|ef*g.|h?i(j|k))', 'ij', SUCCEED, 'found+"-"+g1+"-"+g2', 'ij-ij-j'),
379 ('(bc+d$|ef*g.|h?i(j|k))', 'effg', FAIL),
380 ('(bc+d$|ef*g.|h?i(j|k))', 'bcdd', FAIL),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000381 ('(bc+d$|ef*g.|h?i(j|k))', 'reffgz', SUCCEED, 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000382 ('((((((((((a))))))))))', 'a', SUCCEED, 'g10', 'a'),
383 ('((((((((((a))))))))))\\10', 'aa', SUCCEED, 'found', 'aa'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000384# Python does not have the same rules for \\41 so this is a syntax error
385# ('((((((((((a))))))))))\\41', 'aa', FAIL),
386# ('((((((((((a))))))))))\\41', 'a!', SUCCEED, 'found', 'a!'),
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000387 ('((((((((((a))))))))))\\41', '', SYNTAX_ERROR),
Guido van Rossum95e80531997-08-13 22:34:14 +0000388 ('(?i)((((((((((a))))))))))\\41', '', SYNTAX_ERROR),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000389 ('(((((((((a)))))))))', 'a', SUCCEED, 'found', 'a'),
390 ('multiple words of text', 'uh-uh', FAIL),
391 ('multiple words', 'multiple words, yeah', SUCCEED, 'found', 'multiple words'),
392 ('(.*)c(.*)', 'abcde', SUCCEED, 'found+"-"+g1+"-"+g2', 'abcde-ab-de'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000393 ('\\((.*), (.*)\\)', '(a, b)', SUCCEED, 'g2+"-"+g1', 'b-a'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000394 ('[k]', 'ab', FAIL),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000395 ('a[-]?c', 'ac', SUCCEED, 'found', 'ac'),
396 ('(abc)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),
397 ('([a-c]*)\\1', 'abcabc', SUCCEED, 'g1', 'abc'),
398 ('(?i)abc', 'ABC', SUCCEED, 'found', 'ABC'),
399 ('(?i)abc', 'XBC', FAIL),
400 ('(?i)abc', 'AXC', FAIL),
401 ('(?i)abc', 'ABX', FAIL),
402 ('(?i)abc', 'XABCY', SUCCEED, 'found', 'ABC'),
403 ('(?i)abc', 'ABABC', SUCCEED, 'found', 'ABC'),
404 ('(?i)ab*c', 'ABC', SUCCEED, 'found', 'ABC'),
405 ('(?i)ab*bc', 'ABC', SUCCEED, 'found', 'ABC'),
406 ('(?i)ab*bc', 'ABBC', SUCCEED, 'found', 'ABBC'),
407 ('(?i)ab*?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),
408 ('(?i)ab{0,}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),
409 ('(?i)ab+?bc', 'ABBC', SUCCEED, 'found', 'ABBC'),
410 ('(?i)ab+bc', 'ABC', FAIL),
411 ('(?i)ab+bc', 'ABQ', FAIL),
412 ('(?i)ab{1,}bc', 'ABQ', FAIL),
413 ('(?i)ab+bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),
414 ('(?i)ab{1,}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),
415 ('(?i)ab{1,3}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),
416 ('(?i)ab{3,4}?bc', 'ABBBBC', SUCCEED, 'found', 'ABBBBC'),
417 ('(?i)ab{4,5}?bc', 'ABBBBC', FAIL),
418 ('(?i)ab??bc', 'ABBC', SUCCEED, 'found', 'ABBC'),
419 ('(?i)ab??bc', 'ABC', SUCCEED, 'found', 'ABC'),
420 ('(?i)ab{0,1}?bc', 'ABC', SUCCEED, 'found', 'ABC'),
421 ('(?i)ab??bc', 'ABBBBC', FAIL),
422 ('(?i)ab??c', 'ABC', SUCCEED, 'found', 'ABC'),
423 ('(?i)ab{0,1}?c', 'ABC', SUCCEED, 'found', 'ABC'),
424 ('(?i)^abc$', 'ABC', SUCCEED, 'found', 'ABC'),
425 ('(?i)^abc$', 'ABCC', FAIL),
426 ('(?i)^abc', 'ABCC', SUCCEED, 'found', 'ABC'),
427 ('(?i)^abc$', 'AABC', FAIL),
428 ('(?i)abc$', 'AABC', SUCCEED, 'found', 'ABC'),
429 ('(?i)^', 'ABC', SUCCEED, 'found', ''),
430 ('(?i)$', 'ABC', SUCCEED, 'found', ''),
431 ('(?i)a.c', 'ABC', SUCCEED, 'found', 'ABC'),
432 ('(?i)a.c', 'AXC', SUCCEED, 'found', 'AXC'),
433 ('(?i)a.*?c', 'AXYZC', SUCCEED, 'found', 'AXYZC'),
434 ('(?i)a.*c', 'AXYZD', FAIL),
435 ('(?i)a[bc]d', 'ABC', FAIL),
436 ('(?i)a[bc]d', 'ABD', SUCCEED, 'found', 'ABD'),
437 ('(?i)a[b-d]e', 'ABD', FAIL),
438 ('(?i)a[b-d]e', 'ACE', SUCCEED, 'found', 'ACE'),
439 ('(?i)a[b-d]', 'AAC', SUCCEED, 'found', 'AC'),
440 ('(?i)a[-b]', 'A-', SUCCEED, 'found', 'A-'),
441 ('(?i)a[b-]', 'A-', SUCCEED, 'found', 'A-'),
442 ('(?i)a[b-a]', '-', SYNTAX_ERROR),
443 ('(?i)a[]b', '-', SYNTAX_ERROR),
444 ('(?i)a[', '-', SYNTAX_ERROR),
445 ('(?i)a]', 'A]', SUCCEED, 'found', 'A]'),
446 ('(?i)a[]]b', 'A]B', SUCCEED, 'found', 'A]B'),
447 ('(?i)a[^bc]d', 'AED', SUCCEED, 'found', 'AED'),
448 ('(?i)a[^bc]d', 'ABD', FAIL),
449 ('(?i)a[^-b]c', 'ADC', SUCCEED, 'found', 'ADC'),
450 ('(?i)a[^-b]c', 'A-C', FAIL),
451 ('(?i)a[^]b]c', 'A]C', FAIL),
452 ('(?i)a[^]b]c', 'ADC', SUCCEED, 'found', 'ADC'),
453 ('(?i)ab|cd', 'ABC', SUCCEED, 'found', 'AB'),
454 ('(?i)ab|cd', 'ABCD', SUCCEED, 'found', 'AB'),
455 ('(?i)()ef', 'DEF', SUCCEED, 'found+"-"+g1', 'EF-'),
456 ('(?i)*a', '-', SYNTAX_ERROR),
457 ('(?i)(*)b', '-', SYNTAX_ERROR),
458 ('(?i)$b', 'B', FAIL),
459 ('(?i)a\\', '-', SYNTAX_ERROR),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000460 ('(?i)a\\(b', 'A(B', SUCCEED, 'found+"-"+g1', 'A(B-Error'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000461 ('(?i)a\\(*b', 'AB', SUCCEED, 'found', 'AB'),
462 ('(?i)a\\(*b', 'A((B', SUCCEED, 'found', 'A((B'),
463 ('(?i)a\\\\b', 'A\\B', SUCCEED, 'found', 'A\\B'),
464 ('(?i)abc)', '-', SYNTAX_ERROR),
465 ('(?i)(abc', '-', SYNTAX_ERROR),
466 ('(?i)((a))', 'ABC', SUCCEED, 'found+"-"+g1+"-"+g2', 'A-A-A'),
467 ('(?i)(a)b(c)', 'ABC', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABC-A-C'),
468 ('(?i)a+b+c', 'AABBABC', SUCCEED, 'found', 'ABC'),
469 ('(?i)a{1,}b{1,}c', 'AABBABC', SUCCEED, 'found', 'ABC'),
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000470 ('(?i)a**', '-', SYNTAX_ERROR),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000471 ('(?i)a.+?c', 'ABCABC', SUCCEED, 'found', 'ABC'),
472 ('(?i)a.*?c', 'ABCABC', SUCCEED, 'found', 'ABC'),
473 ('(?i)a.{0,5}?c', 'ABCABC', SUCCEED, 'found', 'ABC'),
474 ('(?i)(a+|b)*', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),
475 ('(?i)(a+|b){0,}', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),
476 ('(?i)(a+|b)+', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),
477 ('(?i)(a+|b){1,}', 'AB', SUCCEED, 'found+"-"+g1', 'AB-B'),
478 ('(?i)(a+|b)?', 'AB', SUCCEED, 'found+"-"+g1', 'A-A'),
479 ('(?i)(a+|b){0,1}', 'AB', SUCCEED, 'found+"-"+g1', 'A-A'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000480 ('(?i)(a+|b){0,1}?', 'AB', SUCCEED, 'found+"-"+g1', '-None'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000481 ('(?i))(', '-', SYNTAX_ERROR),
482 ('(?i)[^ab]*', 'CDE', SUCCEED, 'found', 'CDE'),
483 ('(?i)abc', '', FAIL),
484 ('(?i)a*', '', SUCCEED, 'found', ''),
485 ('(?i)([abc])*d', 'ABBBCD', SUCCEED, 'found+"-"+g1', 'ABBBCD-C'),
486 ('(?i)([abc])*bcd', 'ABCD', SUCCEED, 'found+"-"+g1', 'ABCD-A'),
487 ('(?i)a|b|c|d|e', 'E', SUCCEED, 'found', 'E'),
488 ('(?i)(a|b|c|d|e)f', 'EF', SUCCEED, 'found+"-"+g1', 'EF-E'),
489 ('(?i)abcd*efg', 'ABCDEFG', SUCCEED, 'found', 'ABCDEFG'),
490 ('(?i)ab*', 'XABYABBBZ', SUCCEED, 'found', 'AB'),
491 ('(?i)ab*', 'XAYABBBZ', SUCCEED, 'found', 'A'),
492 ('(?i)(ab|cd)e', 'ABCDE', SUCCEED, 'found+"-"+g1', 'CDE-CD'),
493 ('(?i)[abhgefdc]ij', 'HIJ', SUCCEED, 'found', 'HIJ'),
494 ('(?i)^(ab|cd)e', 'ABCDE', FAIL),
495 ('(?i)(abc|)ef', 'ABCDEF', SUCCEED, 'found+"-"+g1', 'EF-'),
496 ('(?i)(a|b)c*d', 'ABCD', SUCCEED, 'found+"-"+g1', 'BCD-B'),
497 ('(?i)(ab|ab*)bc', 'ABC', SUCCEED, 'found+"-"+g1', 'ABC-A'),
498 ('(?i)a([bc]*)c*', 'ABC', SUCCEED, 'found+"-"+g1', 'ABC-BC'),
499 ('(?i)a([bc]*)(c*d)', 'ABCD', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCD-BC-D'),
500 ('(?i)a([bc]+)(c*d)', 'ABCD', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCD-BC-D'),
501 ('(?i)a([bc]*)(c+d)', 'ABCD', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCD-B-CD'),
502 ('(?i)a[bcd]*dcdcde', 'ADCDCDE', SUCCEED, 'found', 'ADCDCDE'),
503 ('(?i)a[bcd]+dcdcde', 'ADCDCDE', FAIL),
504 ('(?i)(ab|a)b*c', 'ABC', SUCCEED, 'found+"-"+g1', 'ABC-AB'),
505 ('(?i)((a)(b)c)(d)', 'ABCD', SUCCEED, 'g1+"-"+g2+"-"+g3+"-"+g4', 'ABC-A-B-D'),
506 ('(?i)[a-zA-Z_][a-zA-Z0-9_]*', 'ALPHA', SUCCEED, 'found', 'ALPHA'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000507 ('(?i)^a(bc+|b[eh])g|.h$', 'ABH', SUCCEED, 'found+"-"+g1', 'BH-None'),
508 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'EFFGZ', SUCCEED, 'found+"-"+g1+"-"+g2', 'EFFGZ-EFFGZ-None'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000509 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'IJ', SUCCEED, 'found+"-"+g1+"-"+g2', 'IJ-IJ-J'),
510 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'EFFG', FAIL),
511 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'BCDD', FAIL),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000512 ('(?i)(bc+d$|ef*g.|h?i(j|k))', 'REFFGZ', SUCCEED, 'found+"-"+g1+"-"+g2', 'EFFGZ-EFFGZ-None'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000513 ('(?i)((((((((((a))))))))))', 'A', SUCCEED, 'g10', 'A'),
514 ('(?i)((((((((((a))))))))))\\10', 'AA', SUCCEED, 'found', 'AA'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000515 #('(?i)((((((((((a))))))))))\\41', 'AA', FAIL),
516 #('(?i)((((((((((a))))))))))\\41', 'A!', SUCCEED, 'found', 'A!'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000517 ('(?i)(((((((((a)))))))))', 'A', SUCCEED, 'found', 'A'),
518 ('(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))', 'A', SUCCEED, 'g1', 'A'),
519 ('(?i)(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))', 'C', SUCCEED, 'g1', 'C'),
520 ('(?i)multiple words of text', 'UH-UH', FAIL),
521 ('(?i)multiple words', 'MULTIPLE WORDS, YEAH', SUCCEED, 'found', 'MULTIPLE WORDS'),
522 ('(?i)(.*)c(.*)', 'ABCDE', SUCCEED, 'found+"-"+g1+"-"+g2', 'ABCDE-AB-DE'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000523 ('(?i)\\((.*), (.*)\\)', '(A, B)', SUCCEED, 'g2+"-"+g1', 'B-A'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000524 ('(?i)[k]', 'AB', FAIL),
Guido van Rossumdfa67901997-12-08 17:12:06 +0000525# ('(?i)abcd', 'ABCD', SUCCEED, 'found+"-"+\\found+"-"+\\\\found', 'ABCD-$&-\\ABCD'),
526# ('(?i)a(bc)d', 'ABCD', SUCCEED, 'g1+"-"+\\g1+"-"+\\\\g1', 'BC-$1-\\BC'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000527 ('(?i)a[-]?c', 'AC', SUCCEED, 'found', 'AC'),
528 ('(?i)(abc)\\1', 'ABCABC', SUCCEED, 'g1', 'ABC'),
529 ('(?i)([a-c]*)\\1', 'ABCABC', SUCCEED, 'g1', 'ABC'),
Guido van Rossumdfa67901997-12-08 17:12:06 +0000530 ('a(?!b).', 'abad', SUCCEED, 'found', 'ad'),
531 ('a(?=d).', 'abad', SUCCEED, 'found', 'ad'),
532 ('a(?=c|d).', 'abad', SUCCEED, 'found', 'ad'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000533 ('a(?:b|c|d)(.)', 'ace', SUCCEED, 'g1', 'e'),
534 ('a(?:b|c|d)*(.)', 'ace', SUCCEED, 'g1', 'e'),
535 ('a(?:b|c|d)+?(.)', 'ace', SUCCEED, 'g1', 'e'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000536 ('a(?:b|(c|e){1,2}?|d)+?(.)', 'ace', SUCCEED, 'g1 + g2', 'ce'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000537 ('^(.+)?B', 'AB', SUCCEED, 'g1', 'A'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000538
539 # Comments using the (?#...) syntax
540
541 ('w(?# comment', 'w', SYNTAX_ERROR),
542 ('w(?# comment 1)xy(?# comment 2)z', 'wxyz', SUCCEED, 'found', 'wxyz'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000543
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000544 # Check odd placement of embedded pattern modifiers
545
546 ('w(?i)', 'W', SYNTAX_ERROR),
Fredrik Lundh2643b552000-08-08 16:52:51 +0000547
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000548 # Comments using the x embedded pattern modifier
549
550 ("""(?x)w# comment 1
551 x y
Fredrik Lundh2643b552000-08-08 16:52:51 +0000552 # comment 2
553 z""", 'wxyz', SUCCEED, 'found', 'wxyz'),
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000554
555 # using the m embedded pattern modifier
556
557 ('^abc', """jkl
558abc
559xyz""", FAIL),
560 ('(?m)^abc', """jkl
561abc
562xyz""", SUCCEED, 'found', 'abc'),
563
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000564 ('(?m)abc$', """jkl
565xyzabc
566123""", SUCCEED, 'found', 'abc'),
Fredrik Lundh2643b552000-08-08 16:52:51 +0000567
Guido van Rossuma0e4c1b1997-07-17 14:52:48 +0000568 # using the s embedded pattern modifier
569
570 ('a.b', 'a\nb', FAIL),
571 ('(?s)a.b', 'a\nb', SUCCEED, 'found', 'a\nb'),
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000572
Guido van Rossum95e80531997-08-13 22:34:14 +0000573 # test \w, etc. both inside and outside character classes
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000574
575 ('\\w+', '--ab_cd0123--', SUCCEED, 'found', 'ab_cd0123'),
Guido van Rossum95e80531997-08-13 22:34:14 +0000576 ('[\\w]+', '--ab_cd0123--', SUCCEED, 'found', 'ab_cd0123'),
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000577 ('\\D+', '1234abc5678', SUCCEED, 'found', 'abc'),
Guido van Rossum95e80531997-08-13 22:34:14 +0000578 ('[\\D]+', '1234abc5678', SUCCEED, 'found', 'abc'),
Guido van Rossum06c0ec91997-07-17 22:36:39 +0000579 ('[\\da-fA-F]+', '123abc', SUCCEED, 'found', '123abc'),
580 ('[\\d-x]', '-', SYNTAX_ERROR),
Guido van Rossum95e80531997-08-13 22:34:14 +0000581 (r'([\s]*)([\S]*)([\s]*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '),
582 (r'(\s*)(\S*)(\s*)', ' testing!1972', SUCCEED, 'g3+g2+g1', 'testing!1972 '),
583
584 (r'\xff', '\377', SUCCEED, 'found', chr(255)),
585 (r'\x00ff', '\377', SUCCEED, 'found', chr(255)),
586 (r'\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'),
587 ('\t\n\v\r\f\a\g', '\t\n\v\r\f\ag', SUCCEED, 'found', '\t\n\v\r\f\ag'),
588 (r'\t\n\v\r\f\a', '\t\n\v\r\f\a', SUCCEED, 'found', chr(9)+chr(10)+chr(11)+chr(13)+chr(12)+chr(7)),
Guido van Rossumdfa67901997-12-08 17:12:06 +0000589 (r'[\t][\n][\v][\r][\f][\b]', '\t\n\v\r\f\b', SUCCEED, 'found', '\t\n\v\r\f\b'),
Guido van Rossum16bd0ff1997-07-15 18:45:20 +0000590]