aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDima Kogan2016-03-11 18:18:14 -0800
committerMichal Nazarewicz2016-08-02 15:39:10 +0200
commit6db72771cc08e719a08f56db8abd7cefef9c8c99 (patch)
treeade21e8c66a4f759d3d40f7cc9a590472c8c916c
parent53917616b0aca43b9ca85531d4dcb426885bdb73 (diff)
downloademacs-6db72771cc08e719a08f56db8abd7cefef9c8c99.tar.gz
emacs-6db72771cc08e719a08f56db8abd7cefef9c8c99.zip
New regex tests imported from glibc 2.21
* test/src/regex-resources/BOOST.tests: * test/src/regex-resources/PCRE.tests: * test/src/regex-resources/PTESTS: * test/src/regex-resources/TESTS: New test data files [mina86@mina86.com: Moved files from test/src/regex/* to test/src/*.]
-rw-r--r--test/src/regex-resources/BOOST.tests829
-rw-r--r--test/src/regex-resources/PCRE.tests2386
-rw-r--r--test/src/regex-resources/PTESTS341
-rw-r--r--test/src/regex-resources/TESTS167
4 files changed, 3723 insertions, 0 deletions
diff --git a/test/src/regex-resources/BOOST.tests b/test/src/regex-resources/BOOST.tests
new file mode 100644
index 00000000000..98fd3b6abf3
--- /dev/null
+++ b/test/src/regex-resources/BOOST.tests
@@ -0,0 +1,829 @@
1;
2;
3; this file contains a script of tests to run through regress.exe
4;
5; comments start with a semicolon and proceed to the end of the line
6;
7; changes to regular expression compile flags start with a "-" as the first
8; non-whitespace character and consist of a list of the printable names
9; of the flags, for example "match_default"
10;
11; Other lines contain a test to perform using the current flag status
12; the first token contains the expression to compile, the second the string
13; to match it against. If the second string is "!" then the expression should
14; not compile, that is the first string is an invalid regular expression.
15; This is then followed by a list of integers that specify what should match,
16; each pair represents the starting and ending positions of a subexpression
17; starting with the zeroth subexpression (the whole match).
18; A value of -1 indicates that the subexpression should not take part in the
19; match at all, if the first value is -1 then no part of the expression should
20; match the string.
21;
22; Tests taken from BOOST testsuite and adapted to glibc regex.
23;
24; Boost Software License - Version 1.0 - August 17th, 2003
25;
26; Permission is hereby granted, free of charge, to any person or organization
27; obtaining a copy of the software and accompanying documentation covered by
28; this license (the "Software") to use, reproduce, display, distribute,
29; execute, and transmit the Software, and to prepare derivative works of the
30; Software, and to permit third-parties to whom the Software is furnished to
31; do so, all subject to the following:
32;
33; The copyright notices in the Software and this entire statement, including
34; the above license grant, this restriction and the following disclaimer,
35; must be included in all copies of the Software, in whole or in part, and
36; all derivative works of the Software, unless such copies or derivative
37; works are solely in the form of machine-executable object code generated by
38; a source language processor.
39;
40; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
42; FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
43; SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
44; FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
45; ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
46; DEALINGS IN THE SOFTWARE.
47;
48
49- match_default normal REG_EXTENDED
50
51;
52; try some really simple literals:
53a a 0 1
54Z Z 0 1
55Z aaa -1 -1
56Z xxxxZZxxx 4 5
57
58; and some simple brackets:
59(a) zzzaazz 3 4 3 4
60() zzz 0 0 0 0
61() "" 0 0 0 0
62( !
63) ) 0 1
64(aa !
65aa) baa)b 1 4
66a b -1 -1
67\(\) () 0 2
68\(a\) (a) 0 3
69\() () 0 2
70(\) !
71p(a)rameter ABCparameterXYZ 3 12 4 5
72[pq](a)rameter ABCparameterXYZ 3 12 4 5
73
74; now try escaped brackets:
75- match_default bk_parens REG_BASIC
76\(a\) zzzaazz 3 4 3 4
77\(\) zzz 0 0 0 0
78\(\) "" 0 0 0 0
79\( !
80\) !
81\(aa !
82aa\) !
83() () 0 2
84(a) (a) 0 3
85(\) !
86\() !
87
88; now move on to "." wildcards
89- match_default normal REG_EXTENDED REG_STARTEND
90. a 0 1
91. \n 0 1
92. \r 0 1
93. \0 0 1
94
95;
96; now move on to the repetion ops,
97; starting with operator *
98- match_default normal REG_EXTENDED
99a* b 0 0
100ab* a 0 1
101ab* ab 0 2
102ab* sssabbbbbbsss 3 10
103ab*c* a 0 1
104ab*c* abbb 0 4
105ab*c* accc 0 4
106ab*c* abbcc 0 5
107*a !
108\<* !
109\>* !
110\n* \n\n 0 2
111\** ** 0 2
112\* * 0 1
113
114; now try operator +
115ab+ a -1 -1
116ab+ ab 0 2
117ab+ sssabbbbbbsss 3 10
118ab+c+ a -1 -1
119ab+c+ abbb -1 -1
120ab+c+ accc -1 -1
121ab+c+ abbcc 0 5
122+a !
123\<+ !
124\>+ !
125\n+ \n\n 0 2
126\+ + 0 1
127\+ ++ 0 1
128\++ ++ 0 2
129
130; now try operator ?
131- match_default normal REG_EXTENDED
132a? b 0 0
133ab? a 0 1
134ab? ab 0 2
135ab? sssabbbbbbsss 3 5
136ab?c? a 0 1
137ab?c? abbb 0 2
138ab?c? accc 0 2
139ab?c? abcc 0 3
140?a !
141\<? !
142\>? !
143\n? \n\n 0 1
144\? ? 0 1
145\? ?? 0 1
146\?? ?? 0 1
147
148; now try operator {}
149- match_default normal REG_EXTENDED
150a{2} a -1 -1
151a{2} aa 0 2
152a{2} aaa 0 2
153a{2,} a -1 -1
154a{2,} aa 0 2
155a{2,} aaaaa 0 5
156a{2,4} a -1 -1
157a{2,4} aa 0 2
158a{2,4} aaa 0 3
159a{2,4} aaaa 0 4
160a{2,4} aaaaa 0 4
161a{} !
162a{2 !
163a} a} 0 2
164\{\} {} 0 2
165
166- match_default normal REG_BASIC
167a\{2\} a -1 -1
168a\{2\} aa 0 2
169a\{2\} aaa 0 2
170a\{2,\} a -1 -1
171a\{2,\} aa 0 2
172a\{2,\} aaaaa 0 5
173a\{2,4\} a -1 -1
174a\{2,4\} aa 0 2
175a\{2,4\} aaa 0 3
176a\{2,4\} aaaa 0 4
177a\{2,4\} aaaaa 0 4
178{} {} 0 2
179
180; now test the alternation operator |
181- match_default normal REG_EXTENDED
182a|b a 0 1
183a|b b 0 1
184a(b|c) ab 0 2 1 2
185a(b|c) ac 0 2 1 2
186a(b|c) ad -1 -1 -1 -1
187a\| a| 0 2
188
189; now test the set operator []
190- match_default normal REG_EXTENDED
191; try some literals first
192[abc] a 0 1
193[abc] b 0 1
194[abc] c 0 1
195[abc] d -1 -1
196[^bcd] a 0 1
197[^bcd] b -1 -1
198[^bcd] d -1 -1
199[^bcd] e 0 1
200a[b]c abc 0 3
201a[ab]c abc 0 3
202a[^ab]c adc 0 3
203a[]b]c a]c 0 3
204a[[b]c a[c 0 3
205a[-b]c a-c 0 3
206a[^]b]c adc 0 3
207a[^-b]c adc 0 3
208a[b-]c a-c 0 3
209a[b !
210a[] !
211
212; then some ranges
213[b-e] a -1 -1
214[b-e] b 0 1
215[b-e] e 0 1
216[b-e] f -1 -1
217[^b-e] a 0 1
218[^b-e] b -1 -1
219[^b-e] e -1 -1
220[^b-e] f 0 1
221a[1-3]c a2c 0 3
222a[3-1]c !
223a[1-3-5]c !
224a[1- !
225
226; and some classes
227a[[:alpha:]]c abc 0 3
228a[[:unknown:]]c !
229a[[: !
230a[[:alpha !
231a[[:alpha:] !
232a[[:alpha,:] !
233a[[:]:]]b !
234a[[:-:]]b !
235a[[:alph:]] !
236a[[:alphabet:]] !
237[[:alnum:]]+ -%@a0X_- 3 6
238[[:alpha:]]+ -%@aX_0- 3 5
239[[:blank:]]+ "a \tb" 1 4
240[[:cntrl:]]+ a\n\tb 1 3
241[[:digit:]]+ a019b 1 4
242[[:graph:]]+ " a%b " 1 4
243[[:lower:]]+ AabC 1 3
244; This test fails with STLPort, disable for now as this is a corner case anyway...
245;[[:print:]]+ "\na b\n" 1 4
246[[:punct:]]+ " %-&\t" 1 4
247[[:space:]]+ "a \n\t\rb" 1 5
248[[:upper:]]+ aBCd 1 3
249[[:xdigit:]]+ p0f3Cx 1 5
250
251; now test flag settings:
252- escape_in_lists REG_NO_POSIX_TEST
253[\n] \n 0 1
254- REG_NO_POSIX_TEST
255
256; line anchors
257- match_default normal REG_EXTENDED
258^ab ab 0 2
259^ab xxabxx -1 -1
260ab$ ab 0 2
261ab$ abxx -1 -1
262- match_default match_not_bol match_not_eol normal REG_EXTENDED REG_NOTBOL REG_NOTEOL
263^ab ab -1 -1
264^ab xxabxx -1 -1
265ab$ ab -1 -1
266ab$ abxx -1 -1
267
268; back references
269- match_default normal REG_PERL
270a(b)\2c !
271a(b\1)c !
272a(b*)c\1d abbcbbd 0 7 1 3
273a(b*)c\1d abbcbd -1 -1
274a(b*)c\1d abbcbbbd -1 -1
275^(.)\1 abc -1 -1
276a([bc])\1d abcdabbd 4 8 5 6
277; strictly speaking this is at best ambiguous, at worst wrong, this is what most
278; re implimentations will match though.
279a(([bc])\2)*d abbccd 0 6 3 5 3 4
280
281a(([bc])\2)*d abbcbd -1 -1
282a((b)*\2)*d abbbd 0 5 1 4 2 3
283; perl only:
284(ab*)[ab]*\1 ababaaa 0 7 0 1
285(a)\1bcd aabcd 0 5 0 1
286(a)\1bc*d aabcd 0 5 0 1
287(a)\1bc*d aabd 0 4 0 1
288(a)\1bc*d aabcccd 0 7 0 1
289(a)\1bc*[ce]d aabcccd 0 7 0 1
290^(a)\1b(c)*cd$ aabcccd 0 7 0 1 4 5
291
292; posix only:
293- match_default extended REG_EXTENDED
294(ab*)[ab]*\1 ababaaa 0 7 0 1
295
296;
297; word operators:
298\w a 0 1
299\w z 0 1
300\w A 0 1
301\w Z 0 1
302\w _ 0 1
303\w } -1 -1
304\w ` -1 -1
305\w [ -1 -1
306\w @ -1 -1
307; non-word:
308\W a -1 -1
309\W z -1 -1
310\W A -1 -1
311\W Z -1 -1
312\W _ -1 -1
313\W } 0 1
314\W ` 0 1
315\W [ 0 1
316\W @ 0 1
317; word start:
318\<abcd " abcd" 2 6
319\<ab cab -1 -1
320\<ab "\nab" 1 3
321\<tag ::tag 2 5
322;word end:
323abc\> abc 0 3
324abc\> abcd -1 -1
325abc\> abc\n 0 3
326abc\> abc:: 0 3
327; word boundary:
328\babcd " abcd" 2 6
329\bab cab -1 -1
330\bab "\nab" 1 3
331\btag ::tag 2 5
332abc\b abc 0 3
333abc\b abcd -1 -1
334abc\b abc\n 0 3
335abc\b abc:: 0 3
336; within word:
337\B ab 1 1
338a\Bb ab 0 2
339a\B ab 0 1
340a\B a -1 -1
341a\B "a " -1 -1
342
343;
344; buffer operators:
345\`abc abc 0 3
346\`abc \nabc -1 -1
347\`abc " abc" -1 -1
348abc\' abc 0 3
349abc\' abc\n -1 -1
350abc\' "abc " -1 -1
351
352;
353; now follows various complex expressions designed to try and bust the matcher:
354a(((b)))c abc 0 3 1 2 1 2 1 2
355a(b|(c))d abd 0 3 1 2 -1 -1
356a(b|(c))d acd 0 3 1 2 1 2
357a(b*|c)d abbd 0 4 1 3
358; just gotta have one DFA-buster, of course
359a[ab]{20} aaaaabaaaabaaaabaaaab 0 21
360; and an inline expansion in case somebody gets tricky
361a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab] aaaaabaaaabaaaabaaaab 0 21
362; and in case somebody just slips in an NFA...
363a[ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab][ab](wee|week)(knights|night) aaaaabaaaabaaaabaaaabweeknights 0 31 21 24 24 31
364; one really big one
3651234567890123456789012345678901234567890123456789012345678901234567890 a1234567890123456789012345678901234567890123456789012345678901234567890b 1 71
366; fish for problems as brackets go past 8
367[ab][cd][ef][gh][ij][kl][mn] xacegikmoq 1 8
368[ab][cd][ef][gh][ij][kl][mn][op] xacegikmoq 1 9
369[ab][cd][ef][gh][ij][kl][mn][op][qr] xacegikmoqy 1 10
370[ab][cd][ef][gh][ij][kl][mn][op][q] xacegikmoqy 1 10
371; and as parenthesis go past 9:
372(a)(b)(c)(d)(e)(f)(g)(h) zabcdefghi 1 9 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9
373(a)(b)(c)(d)(e)(f)(g)(h)(i) zabcdefghij 1 10 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10
374(a)(b)(c)(d)(e)(f)(g)(h)(i)(j) zabcdefghijk 1 11 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11
375(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k) zabcdefghijkl 1 12 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10 11 11 12
376(a)d|(b)c abc 1 3 -1 -1 1 2
377_+((www)|(ftp)|(mailto)):_* "_wwwnocolon _mailto:" 12 20 13 19 -1 -1 -1 -1 13 19
378
379; subtleties of matching
380;a(b)?c\1d acd 0 3 -1 -1
381; POSIX is about the following test:
382a(b)?c\1d acd -1 -1 -1 -1
383a(b?c)+d accd 0 4 2 3
384(wee|week)(knights|night) weeknights 0 10 0 3 3 10
385.* abc 0 3
386a(b|(c))d abd 0 3 1 2 -1 -1
387a(b|(c))d acd 0 3 1 2 1 2
388a(b*|c|e)d abbd 0 4 1 3
389a(b*|c|e)d acd 0 3 1 2
390a(b*|c|e)d ad 0 2 1 1
391a(b?)c abc 0 3 1 2
392a(b?)c ac 0 2 1 1
393a(b+)c abc 0 3 1 2
394a(b+)c abbbc 0 5 1 4
395a(b*)c ac 0 2 1 1
396(a|ab)(bc([de]+)f|cde) abcdef 0 6 0 1 1 6 3 5
397a([bc]?)c abc 0 3 1 2
398a([bc]?)c ac 0 2 1 1
399a([bc]+)c abc 0 3 1 2
400a([bc]+)c abcc 0 4 1 3
401a([bc]+)bc abcbc 0 5 1 3
402a(bb+|b)b abb 0 3 1 2
403a(bbb+|bb+|b)b abb 0 3 1 2
404a(bbb+|bb+|b)b abbb 0 4 1 3
405a(bbb+|bb+|b)bb abbb 0 4 1 2
406(.*).* abcdef 0 6 0 6
407(a*)* bc 0 0 0 0
408xyx*xz xyxxxxyxxxz 5 11
409
410; do we get the right subexpression when it is used more than once?
411a(b|c)*d ad 0 2 -1 -1
412a(b|c)*d abcd 0 4 2 3
413a(b|c)+d abd 0 3 1 2
414a(b|c)+d abcd 0 4 2 3
415a(b|c?)+d ad 0 2 1 1
416a(b|c){0,0}d ad 0 2 -1 -1
417a(b|c){0,1}d ad 0 2 -1 -1
418a(b|c){0,1}d abd 0 3 1 2
419a(b|c){0,2}d ad 0 2 -1 -1
420a(b|c){0,2}d abcd 0 4 2 3
421a(b|c){0,}d ad 0 2 -1 -1
422a(b|c){0,}d abcd 0 4 2 3
423a(b|c){1,1}d abd 0 3 1 2
424a(b|c){1,2}d abd 0 3 1 2
425a(b|c){1,2}d abcd 0 4 2 3
426a(b|c){1,}d abd 0 3 1 2
427a(b|c){1,}d abcd 0 4 2 3
428a(b|c){2,2}d acbd 0 4 2 3
429a(b|c){2,2}d abcd 0 4 2 3
430a(b|c){2,4}d abcd 0 4 2 3
431a(b|c){2,4}d abcbd 0 5 3 4
432a(b|c){2,4}d abcbcd 0 6 4 5
433a(b|c){2,}d abcd 0 4 2 3
434a(b|c){2,}d abcbd 0 5 3 4
435; perl only: these conflict with the POSIX test below
436;a(b|c?)+d abcd 0 4 3 3
437;a(b+|((c)*))+d abd 0 3 2 2 2 2 -1 -1
438;a(b+|((c)*))+d abcd 0 4 3 3 3 3 2 3
439
440; posix only:
441- match_default extended REG_EXTENDED REG_STARTEND
442
443a(b|c?)+d abcd 0 4 2 3
444a(b|((c)*))+d abcd 0 4 2 3 2 3 2 3
445a(b+|((c)*))+d abd 0 3 1 2 -1 -1 -1 -1
446a(b+|((c)*))+d abcd 0 4 2 3 2 3 2 3
447a(b|((c)*))+d ad 0 2 1 1 1 1 -1 -1
448a(b|((c)*))*d abcd 0 4 2 3 2 3 2 3
449a(b+|((c)*))*d abd 0 3 1 2 -1 -1 -1 -1
450a(b+|((c)*))*d abcd 0 4 2 3 2 3 2 3
451a(b|((c)*))*d ad 0 2 1 1 1 1 -1 -1
452
453- match_default normal REG_PERL
454; try to match C++ syntax elements:
455; line comment:
456//[^\n]* "++i //here is a line comment\n" 4 28
457; block comment:
458/\*([^*]|\*+[^*/])*\*+/ "/* here is a block comment */" 0 29 26 27
459/\*([^*]|\*+[^*/])*\*+/ "/**/" 0 4 -1 -1
460/\*([^*]|\*+[^*/])*\*+/ "/***/" 0 5 -1 -1
461/\*([^*]|\*+[^*/])*\*+/ "/****/" 0 6 -1 -1
462/\*([^*]|\*+[^*/])*\*+/ "/*****/" 0 7 -1 -1
463/\*([^*]|\*+[^*/])*\*+/ "/*****/*/" 0 7 -1 -1
464; preprossor directives:
465^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol" 0 19 -1 -1
466^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol(x) #x" 0 25 -1 -1
467; perl only:
468^[[:blank:]]*#([^\n]*\\[[:space:]]+)*[^\n]* "#define some_symbol(x) \\ \r\n foo();\\\r\n printf(#x);" 0 53 30 42
469; literals:
470((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFF 0 4 0 4 0 4 -1 -1 -1 -1 -1 -1 -1 -1
471((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 35 0 2 0 2 -1 -1 0 2 -1 -1 -1 -1 -1 -1
472((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFu 0 5 0 4 0 4 -1 -1 -1 -1 -1 -1 -1 -1
473((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFL 0 5 0 4 0 4 -1 -1 4 5 -1 -1 -1 -1
474((0x[[:xdigit:]]+)|([[:digit:]]+))u?((int(8|16|32|64))|L)? 0xFFFFFFFFFFFFFFFFuint64 0 24 0 18 0 18 -1 -1 19 24 19 24 22 24
475; strings:
476'([^\\']|\\.)*' '\\x3A' 0 6 4 5
477'([^\\']|\\.)*' '\\'' 0 4 1 3
478'([^\\']|\\.)*' '\\n' 0 4 1 3
479
480; finally try some case insensitive matches:
481- match_default normal REG_EXTENDED REG_ICASE
482; upper and lower have no meaning here so they fail, however these
483; may compile with other libraries...
484;[[:lower:]] !
485;[[:upper:]] !
4860123456789@abcdefghijklmnopqrstuvwxyz\[\\\]\^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ\{\|\} 0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]\^_`abcdefghijklmnopqrstuvwxyz\{\|\} 0 72
487
488; known and suspected bugs:
489- match_default normal REG_EXTENDED
490\( ( 0 1
491\) ) 0 1
492\$ $ 0 1
493\^ ^ 0 1
494\. . 0 1
495\* * 0 1
496\+ + 0 1
497\? ? 0 1
498\[ [ 0 1
499\] ] 0 1
500\| | 0 1
501\\ \\ 0 1
502# # 0 1
503\# # 0 1
504a- a- 0 2
505\- - 0 1
506\{ { 0 1
507\} } 0 1
5080 0 0 1
5091 1 0 1
5109 9 0 1
511b b 0 1
512B B 0 1
513< < 0 1
514> > 0 1
515w w 0 1
516W W 0 1
517` ` 0 1
518' ' 0 1
519\n \n 0 1
520, , 0 1
521a a 0 1
522f f 0 1
523n n 0 1
524r r 0 1
525t t 0 1
526v v 0 1
527c c 0 1
528x x 0 1
529: : 0 1
530(\.[[:alnum:]]+){2} "w.a.b " 1 5 3 5
531
532- match_default normal REG_EXTENDED REG_ICASE
533a A 0 1
534A a 0 1
535[abc]+ abcABC 0 6
536[ABC]+ abcABC 0 6
537[a-z]+ abcABC 0 6
538[A-Z]+ abzANZ 0 6
539[a-Z]+ abzABZ 0 6
540[A-z]+ abzABZ 0 6
541[[:lower:]]+ abyzABYZ 0 8
542[[:upper:]]+ abzABZ 0 6
543[[:alpha:]]+ abyzABYZ 0 8
544[[:alnum:]]+ 09abyzABYZ 0 10
545
546; word start:
547\<abcd " abcd" 2 6
548\<ab cab -1 -1
549\<ab "\nab" 1 3
550\<tag ::tag 2 5
551;word end:
552abc\> abc 0 3
553abc\> abcd -1 -1
554abc\> abc\n 0 3
555abc\> abc:: 0 3
556
557; collating elements and rewritten set code:
558- match_default normal REG_EXTENDED REG_STARTEND
559;[[.zero.]] 0 0 1
560;[[.one.]] 1 0 1
561;[[.two.]] 2 0 1
562;[[.three.]] 3 0 1
563[[.a.]] baa 1 2
564;[[.right-curly-bracket.]] } 0 1
565;[[.NUL.]] \0 0 1
566[[:<:]z] !
567[a[:>:]] !
568[[=a=]] a 0 1
569;[[=right-curly-bracket=]] } 0 1
570- match_default normal REG_EXTENDED REG_STARTEND REG_ICASE
571[[.A.]] A 0 1
572[[.A.]] a 0 1
573[[.A.]-b]+ AaBb 0 4
574[A-[.b.]]+ AaBb 0 4
575[[.a.]-B]+ AaBb 0 4
576[a-[.B.]]+ AaBb 0 4
577- match_default normal REG_EXTENDED REG_STARTEND
578[[.a.]-c]+ abcd 0 3
579[a-[.c.]]+ abcd 0 3
580[[:alpha:]-a] !
581[a-[:alpha:]] !
582
583; try mutli-character ligatures:
584;[[.ae.]] ae 0 2
585;[[.ae.]] aE -1 -1
586;[[.AE.]] AE 0 2
587;[[.Ae.]] Ae 0 2
588;[[.ae.]-b] a -1 -1
589;[[.ae.]-b] b 0 1
590;[[.ae.]-b] ae 0 2
591;[a-[.ae.]] a 0 1
592;[a-[.ae.]] b -1 -1
593;[a-[.ae.]] ae 0 2
594- match_default normal REG_EXTENDED REG_STARTEND REG_ICASE
595;[[.ae.]] AE 0 2
596;[[.ae.]] Ae 0 2
597;[[.AE.]] Ae 0 2
598;[[.Ae.]] aE 0 2
599;[[.AE.]-B] a -1 -1
600;[[.Ae.]-b] b 0 1
601;[[.Ae.]-b] B 0 1
602;[[.ae.]-b] AE 0 2
603
604- match_default normal REG_EXTENDED REG_STARTEND REG_NO_POSIX_TEST
605\s+ "ab ab" 2 5
606\S+ " abc " 2 5
607
608- match_default normal REG_EXTENDED REG_STARTEND
609\`abc abc 0 3
610\`abc aabc -1 -1
611abc\' abc 0 3
612abc\' abcd -1 -1
613abc\' abc\n\n -1 -1
614abc\' abc 0 3
615
616; extended repeat checking to exercise new algorithms:
617ab.*xy abxy_ 0 4
618ab.*xy ab_xy_ 0 5
619ab.*xy abxy 0 4
620ab.*xy ab_xy 0 5
621ab.* ab 0 2
622ab.* ab__ 0 4
623
624ab.{2,5}xy ab__xy_ 0 6
625ab.{2,5}xy ab____xy_ 0 8
626ab.{2,5}xy ab_____xy_ 0 9
627ab.{2,5}xy ab__xy 0 6
628ab.{2,5}xy ab_____xy 0 9
629ab.{2,5} ab__ 0 4
630ab.{2,5} ab_______ 0 7
631ab.{2,5}xy ab______xy -1 -1
632ab.{2,5}xy ab_xy -1 -1
633
634ab.*?xy abxy_ 0 4
635ab.*?xy ab_xy_ 0 5
636ab.*?xy abxy 0 4
637ab.*?xy ab_xy 0 5
638ab.*? ab 0 2
639ab.*? ab__ 0 4
640
641ab.{2,5}?xy ab__xy_ 0 6
642ab.{2,5}?xy ab____xy_ 0 8
643ab.{2,5}?xy ab_____xy_ 0 9
644ab.{2,5}?xy ab__xy 0 6
645ab.{2,5}?xy ab_____xy 0 9
646ab.{2,5}? ab__ 0 4
647ab.{2,5}? ab_______ 0 7
648ab.{2,5}?xy ab______xy -1 -1
649ab.{2,5}xy ab_xy -1 -1
650
651; again but with slower algorithm variant:
652- match_default REG_EXTENDED
653; now again for single character repeats:
654
655ab_*xy abxy_ 0 4
656ab_*xy ab_xy_ 0 5
657ab_*xy abxy 0 4
658ab_*xy ab_xy 0 5
659ab_* ab 0 2
660ab_* ab__ 0 4
661
662ab_{2,5}xy ab__xy_ 0 6
663ab_{2,5}xy ab____xy_ 0 8
664ab_{2,5}xy ab_____xy_ 0 9
665ab_{2,5}xy ab__xy 0 6
666ab_{2,5}xy ab_____xy 0 9
667ab_{2,5} ab__ 0 4
668ab_{2,5} ab_______ 0 7
669ab_{2,5}xy ab______xy -1 -1
670ab_{2,5}xy ab_xy -1 -1
671
672ab_*?xy abxy_ 0 4
673ab_*?xy ab_xy_ 0 5
674ab_*?xy abxy 0 4
675ab_*?xy ab_xy 0 5
676ab_*? ab 0 2
677ab_*? ab__ 0 4
678
679ab_{2,5}?xy ab__xy_ 0 6
680ab_{2,5}?xy ab____xy_ 0 8
681ab_{2,5}?xy ab_____xy_ 0 9
682ab_{2,5}?xy ab__xy 0 6
683ab_{2,5}?xy ab_____xy 0 9
684ab_{2,5}? ab__ 0 4
685ab_{2,5}? ab_______ 0 7
686ab_{2,5}?xy ab______xy -1 -1
687ab_{2,5}xy ab_xy -1 -1
688
689; and again for sets:
690ab[_,;]*xy abxy_ 0 4
691ab[_,;]*xy ab_xy_ 0 5
692ab[_,;]*xy abxy 0 4
693ab[_,;]*xy ab_xy 0 5
694ab[_,;]* ab 0 2
695ab[_,;]* ab__ 0 4
696
697ab[_,;]{2,5}xy ab__xy_ 0 6
698ab[_,;]{2,5}xy ab____xy_ 0 8
699ab[_,;]{2,5}xy ab_____xy_ 0 9
700ab[_,;]{2,5}xy ab__xy 0 6
701ab[_,;]{2,5}xy ab_____xy 0 9
702ab[_,;]{2,5} ab__ 0 4
703ab[_,;]{2,5} ab_______ 0 7
704ab[_,;]{2,5}xy ab______xy -1 -1
705ab[_,;]{2,5}xy ab_xy -1 -1
706
707ab[_,;]*?xy abxy_ 0 4
708ab[_,;]*?xy ab_xy_ 0 5
709ab[_,;]*?xy abxy 0 4
710ab[_,;]*?xy ab_xy 0 5
711ab[_,;]*? ab 0 2
712ab[_,;]*? ab__ 0 4
713
714ab[_,;]{2,5}?xy ab__xy_ 0 6
715ab[_,;]{2,5}?xy ab____xy_ 0 8
716ab[_,;]{2,5}?xy ab_____xy_ 0 9
717ab[_,;]{2,5}?xy ab__xy 0 6
718ab[_,;]{2,5}?xy ab_____xy 0 9
719ab[_,;]{2,5}? ab__ 0 4
720ab[_,;]{2,5}? ab_______ 0 7
721ab[_,;]{2,5}?xy ab______xy -1 -1
722ab[_,;]{2,5}xy ab_xy -1 -1
723
724; and again for tricky sets with digraphs:
725;ab[_[.ae.]]*xy abxy_ 0 4
726;ab[_[.ae.]]*xy ab_xy_ 0 5
727;ab[_[.ae.]]*xy abxy 0 4
728;ab[_[.ae.]]*xy ab_xy 0 5
729;ab[_[.ae.]]* ab 0 2
730;ab[_[.ae.]]* ab__ 0 4
731
732;ab[_[.ae.]]{2,5}xy ab__xy_ 0 6
733;ab[_[.ae.]]{2,5}xy ab____xy_ 0 8
734;ab[_[.ae.]]{2,5}xy ab_____xy_ 0 9
735;ab[_[.ae.]]{2,5}xy ab__xy 0 6
736;ab[_[.ae.]]{2,5}xy ab_____xy 0 9
737;ab[_[.ae.]]{2,5} ab__ 0 4
738;ab[_[.ae.]]{2,5} ab_______ 0 7
739;ab[_[.ae.]]{2,5}xy ab______xy -1 -1
740;ab[_[.ae.]]{2,5}xy ab_xy -1 -1
741
742;ab[_[.ae.]]*?xy abxy_ 0 4
743;ab[_[.ae.]]*?xy ab_xy_ 0 5
744;ab[_[.ae.]]*?xy abxy 0 4
745;ab[_[.ae.]]*?xy ab_xy 0 5
746;ab[_[.ae.]]*? ab 0 2
747;ab[_[.ae.]]*? ab__ 0 2
748
749;ab[_[.ae.]]{2,5}?xy ab__xy_ 0 6
750;ab[_[.ae.]]{2,5}?xy ab____xy_ 0 8
751;ab[_[.ae.]]{2,5}?xy ab_____xy_ 0 9
752;ab[_[.ae.]]{2,5}?xy ab__xy 0 6
753;ab[_[.ae.]]{2,5}?xy ab_____xy 0 9
754;ab[_[.ae.]]{2,5}? ab__ 0 4
755;ab[_[.ae.]]{2,5}? ab_______ 0 4
756;ab[_[.ae.]]{2,5}?xy ab______xy -1 -1
757;ab[_[.ae.]]{2,5}xy ab_xy -1 -1
758
759; new bugs detected in spring 2003:
760- normal match_continuous REG_NO_POSIX_TEST
761b abc 1 2
762
763() abc 0 0 0 0
764^() abc 0 0 0 0
765^()+ abc 0 0 0 0
766^(){1} abc 0 0 0 0
767^(){2} abc 0 0 0 0
768^((){2}) abc 0 0 0 0 0 0
769() "" 0 0 0 0
770()\1 "" 0 0 0 0
771()\1 a 0 0 0 0
772a()\1b ab 0 2 1 1
773a()b\1 ab 0 2 1 1
774
775; subtleties of matching with no sub-expressions marked
776- normal match_nosubs REG_NO_POSIX_TEST
777a(b?c)+d accd 0 4
778(wee|week)(knights|night) weeknights 0 10
779.* abc 0 3
780a(b|(c))d abd 0 3
781a(b|(c))d acd 0 3
782a(b*|c|e)d abbd 0 4
783a(b*|c|e)d acd 0 3
784a(b*|c|e)d ad 0 2
785a(b?)c abc 0 3
786a(b?)c ac 0 2
787a(b+)c abc 0 3
788a(b+)c abbbc 0 5
789a(b*)c ac 0 2
790(a|ab)(bc([de]+)f|cde) abcdef 0 6
791a([bc]?)c abc 0 3
792a([bc]?)c ac 0 2
793a([bc]+)c abc 0 3
794a([bc]+)c abcc 0 4
795a([bc]+)bc abcbc 0 5
796a(bb+|b)b abb 0 3
797a(bbb+|bb+|b)b abb 0 3
798a(bbb+|bb+|b)b abbb 0 4
799a(bbb+|bb+|b)bb abbb 0 4
800(.*).* abcdef 0 6
801(a*)* bc 0 0
802
803- normal nosubs REG_NO_POSIX_TEST
804a(b?c)+d accd 0 4
805(wee|week)(knights|night) weeknights 0 10
806.* abc 0 3
807a(b|(c))d abd 0 3
808a(b|(c))d acd 0 3
809a(b*|c|e)d abbd 0 4
810a(b*|c|e)d acd 0 3
811a(b*|c|e)d ad 0 2
812a(b?)c abc 0 3
813a(b?)c ac 0 2
814a(b+)c abc 0 3
815a(b+)c abbbc 0 5
816a(b*)c ac 0 2
817(a|ab)(bc([de]+)f|cde) abcdef 0 6
818a([bc]?)c abc 0 3
819a([bc]?)c ac 0 2
820a([bc]+)c abc 0 3
821a([bc]+)c abcc 0 4
822a([bc]+)bc abcbc 0 5
823a(bb+|b)b abb 0 3
824a(bbb+|bb+|b)b abb 0 3
825a(bbb+|bb+|b)b abbb 0 4
826a(bbb+|bb+|b)bb abbb 0 4
827(.*).* abcdef 0 6
828(a*)* bc 0 0
829
diff --git a/test/src/regex-resources/PCRE.tests b/test/src/regex-resources/PCRE.tests
new file mode 100644
index 00000000000..0fb9cadafc9
--- /dev/null
+++ b/test/src/regex-resources/PCRE.tests
@@ -0,0 +1,2386 @@
1# PCRE version 4.4 21-August-2003
2
3# Tests taken from PCRE and modified to suit glibc regex.
4#
5# PCRE LICENCE
6# ------------
7#
8# PCRE is a library of functions to support regular expressions whose syntax
9# and semantics are as close as possible to those of the Perl 5 language.
10#
11# Written by: Philip Hazel <ph10@cam.ac.uk>
12#
13# University of Cambridge Computing Service,
14# Cambridge, England. Phone: +44 1223 334714.
15#
16# Copyright (c) 1997-2003 University of Cambridge
17#
18# Permission is granted to anyone to use this software for any purpose on any
19# computer system, and to redistribute it freely, subject to the following
20# restrictions:
21#
22# 1. This software is distributed in the hope that it will be useful,
23# but WITHOUT ANY WARRANTY; without even the implied warranty of
24# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
25#
26# 2. The origin of this software must not be misrepresented, either by
27# explicit claim or by omission. In practice, this means that if you use
28# PCRE in software that you distribute to others, commercially or
29# otherwise, you must put a sentence like this
30#
31# Regular expression support is provided by the PCRE library package,
32# which is open source software, written by Philip Hazel, and copyright
33# by the University of Cambridge, England.
34#
35# somewhere reasonably visible in your documentation and in any relevant
36# files or online help data or similar. A reference to the ftp site for
37# the source, that is, to
38#
39# ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
40#
41# should also be given in the documentation. However, this condition is not
42# intended to apply to whole chains of software. If package A includes PCRE,
43# it must acknowledge it, but if package B is software that includes package
44# A, the condition is not imposed on package B (unless it uses PCRE
45# independently).
46#
47# 3. Altered versions must be plainly marked as such, and must not be
48# misrepresented as being the original software.
49#
50# 4. If PCRE is embedded in any software that is released under the GNU
51# General Purpose Licence (GPL), or Lesser General Purpose Licence (LGPL),
52# then the terms of that licence shall supersede any condition above with
53# which it is incompatible.
54#
55# The documentation for PCRE, supplied in the "doc" directory, is distributed
56# under the same terms as the software itself.
57#
58# End
59#
60
61/the quick brown fox/
62 the quick brown fox
63 0: the quick brown fox
64 The quick brown FOX
65No match
66 What do you know about the quick brown fox?
67 0: the quick brown fox
68 What do you know about THE QUICK BROWN FOX?
69No match
70
71/The quick brown fox/i
72 the quick brown fox
73 0: the quick brown fox
74 The quick brown FOX
75 0: The quick brown FOX
76 What do you know about the quick brown fox?
77 0: the quick brown fox
78 What do you know about THE QUICK BROWN FOX?
79 0: THE QUICK BROWN FOX
80
81/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
82 abxyzpqrrrabbxyyyypqAzz
83 0: abxyzpqrrrabbxyyyypqAzz
84 abxyzpqrrrabbxyyyypqAzz
85 0: abxyzpqrrrabbxyyyypqAzz
86 aabxyzpqrrrabbxyyyypqAzz
87 0: aabxyzpqrrrabbxyyyypqAzz
88 aaabxyzpqrrrabbxyyyypqAzz
89 0: aaabxyzpqrrrabbxyyyypqAzz
90 aaaabxyzpqrrrabbxyyyypqAzz
91 0: aaaabxyzpqrrrabbxyyyypqAzz
92 abcxyzpqrrrabbxyyyypqAzz
93 0: abcxyzpqrrrabbxyyyypqAzz
94 aabcxyzpqrrrabbxyyyypqAzz
95 0: aabcxyzpqrrrabbxyyyypqAzz
96 aaabcxyzpqrrrabbxyyyypAzz
97 0: aaabcxyzpqrrrabbxyyyypAzz
98 aaabcxyzpqrrrabbxyyyypqAzz
99 0: aaabcxyzpqrrrabbxyyyypqAzz
100 aaabcxyzpqrrrabbxyyyypqqAzz
101 0: aaabcxyzpqrrrabbxyyyypqqAzz
102 aaabcxyzpqrrrabbxyyyypqqqAzz
103 0: aaabcxyzpqrrrabbxyyyypqqqAzz
104 aaabcxyzpqrrrabbxyyyypqqqqAzz
105 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
106 aaabcxyzpqrrrabbxyyyypqqqqqAzz
107 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
108 aaabcxyzpqrrrabbxyyyypqqqqqqAzz
109 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
110 aaaabcxyzpqrrrabbxyyyypqAzz
111 0: aaaabcxyzpqrrrabbxyyyypqAzz
112 abxyzzpqrrrabbxyyyypqAzz
113 0: abxyzzpqrrrabbxyyyypqAzz
114 aabxyzzzpqrrrabbxyyyypqAzz
115 0: aabxyzzzpqrrrabbxyyyypqAzz
116 aaabxyzzzzpqrrrabbxyyyypqAzz
117 0: aaabxyzzzzpqrrrabbxyyyypqAzz
118 aaaabxyzzzzpqrrrabbxyyyypqAzz
119 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
120 abcxyzzpqrrrabbxyyyypqAzz
121 0: abcxyzzpqrrrabbxyyyypqAzz
122 aabcxyzzzpqrrrabbxyyyypqAzz
123 0: aabcxyzzzpqrrrabbxyyyypqAzz
124 aaabcxyzzzzpqrrrabbxyyyypqAzz
125 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
126 aaaabcxyzzzzpqrrrabbxyyyypqAzz
127 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
128 aaaabcxyzzzzpqrrrabbbxyyyypqAzz
129 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
130 aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
131 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
132 aaabcxyzpqrrrabbxyyyypABzz
133 0: aaabcxyzpqrrrabbxyyyypABzz
134 aaabcxyzpqrrrabbxyyyypABBzz
135 0: aaabcxyzpqrrrabbxyyyypABBzz
136 >>>aaabxyzpqrrrabbxyyyypqAzz
137 0: aaabxyzpqrrrabbxyyyypqAzz
138 >aaaabxyzpqrrrabbxyyyypqAzz
139 0: aaaabxyzpqrrrabbxyyyypqAzz
140 >>>>abcxyzpqrrrabbxyyyypqAzz
141 0: abcxyzpqrrrabbxyyyypqAzz
142 *** Failers
143No match
144 abxyzpqrrabbxyyyypqAzz
145No match
146 abxyzpqrrrrabbxyyyypqAzz
147No match
148 abxyzpqrrrabxyyyypqAzz
149No match
150 aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
151No match
152 aaaabcxyzzzzpqrrrabbbxyyypqAzz
153No match
154 aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
155No match
156
157/^(abc){1,2}zz/
158 abczz
159 0: abczz
160 1: abc
161 abcabczz
162 0: abcabczz
163 1: abc
164 *** Failers
165No match
166 zz
167No match
168 abcabcabczz
169No match
170 >>abczz
171No match
172
173/^(b+|a){1,2}c/
174 bc
175 0: bc
176 1: b
177 bbc
178 0: bbc
179 1: bb
180 bbbc
181 0: bbbc
182 1: bbb
183 bac
184 0: bac
185 1: a
186 bbac
187 0: bbac
188 1: a
189 aac
190 0: aac
191 1: a
192 abbbbbbbbbbbc
193 0: abbbbbbbbbbbc
194 1: bbbbbbbbbbb
195 bbbbbbbbbbbac
196 0: bbbbbbbbbbbac
197 1: a
198 *** Failers
199No match
200 aaac
201No match
202 abbbbbbbbbbbac
203No match
204
205/^[]cde]/
206 ]thing
207 0: ]
208 cthing
209 0: c
210 dthing
211 0: d
212 ething
213 0: e
214 *** Failers
215No match
216 athing
217No match
218 fthing
219No match
220
221/^[^]cde]/
222 athing
223 0: a
224 fthing
225 0: f
226 *** Failers
227 0: *
228 ]thing
229No match
230 cthing
231No match
232 dthing
233No match
234 ething
235No match
236
237/^[0-9]+$/
238 0
239 0: 0
240 1
241 0: 1
242 2
243 0: 2
244 3
245 0: 3
246 4
247 0: 4
248 5
249 0: 5
250 6
251 0: 6
252 7
253 0: 7
254 8
255 0: 8
256 9
257 0: 9
258 10
259 0: 10
260 100
261 0: 100
262 *** Failers
263No match
264 abc
265No match
266
267/^.*nter/
268 enter
269 0: enter
270 inter
271 0: inter
272 uponter
273 0: uponter
274
275/^xxx[0-9]+$/
276 xxx0
277 0: xxx0
278 xxx1234
279 0: xxx1234
280 *** Failers
281No match
282 xxx
283No match
284
285/^.+[0-9][0-9][0-9]$/
286 x123
287 0: x123
288 xx123
289 0: xx123
290 123456
291 0: 123456
292 *** Failers
293No match
294 123
295No match
296 x1234
297 0: x1234
298
299/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
300 abc!pqr=apquxz.ixr.zzz.ac.uk
301 0: abc!pqr=apquxz.ixr.zzz.ac.uk
302 1: abc
303 2: pqr
304 *** Failers
305No match
306 !pqr=apquxz.ixr.zzz.ac.uk
307No match
308 abc!=apquxz.ixr.zzz.ac.uk
309No match
310 abc!pqr=apquxz:ixr.zzz.ac.uk
311No match
312 abc!pqr=apquxz.ixr.zzz.ac.ukk
313No match
314
315/:/
316 Well, we need a colon: somewhere
317 0: :
318 *** Fail if we don't
319No match
320
321/([0-9a-f:]+)$/i
322 0abc
323 0: 0abc
324 1: 0abc
325 abc
326 0: abc
327 1: abc
328 fed
329 0: fed
330 1: fed
331 E
332 0: E
333 1: E
334 ::
335 0: ::
336 1: ::
337 5f03:12C0::932e
338 0: 5f03:12C0::932e
339 1: 5f03:12C0::932e
340 fed def
341 0: def
342 1: def
343 Any old stuff
344 0: ff
345 1: ff
346 *** Failers
347No match
348 0zzz
349No match
350 gzzz
351No match
352 Any old rubbish
353No match
354
355/^.*\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/
356 .1.2.3
357 0: .1.2.3
358 1: 1
359 2: 2
360 3: 3
361 A.12.123.0
362 0: A.12.123.0
363 1: 12
364 2: 123
365 3: 0
366 *** Failers
367No match
368 .1.2.3333
369No match
370 1.2.3
371No match
372 1234.2.3
373No match
374
375/^([0-9]+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
376 1 IN SOA non-sp1 non-sp2(
377 0: 1 IN SOA non-sp1 non-sp2(
378 1: 1
379 2: non-sp1
380 3: non-sp2
381 1 IN SOA non-sp1 non-sp2 (
382 0: 1 IN SOA non-sp1 non-sp2 (
383 1: 1
384 2: non-sp1
385 3: non-sp2
386 *** Failers
387No match
388 1IN SOA non-sp1 non-sp2(
389No match
390
391/^[a-zA-Z0-9][a-zA-Z0-9-]*(\.[a-zA-Z0-9][a-zA-z0-9-]*)*\.$/
392 a.
393 0: a.
394 Z.
395 0: Z.
396 2.
397 0: 2.
398 ab-c.pq-r.
399 0: ab-c.pq-r.
400 1: .pq-r
401 sxk.zzz.ac.uk.
402 0: sxk.zzz.ac.uk.
403 1: .uk
404 x-.y-.
405 0: x-.y-.
406 1: .y-
407 *** Failers
408No match
409 -abc.peq.
410No match
411
412/^\*\.[a-z]([a-z0-9-]*[a-z0-9]+)?(\.[a-z]([a-z0-9-]*[a-z0-9]+)?)*$/
413 *.a
414 0: *.a
415 *.b0-a
416 0: *.b0-a
417 1: 0-a
418 *.c3-b.c
419 0: *.c3-b.c
420 1: 3-b
421 2: .c
422 *.c-a.b-c
423 0: *.c-a.b-c
424 1: -a
425 2: .b-c
426 3: -c
427 *** Failers
428No match
429 *.0
430No match
431 *.a-
432No match
433 *.a-b.c-
434No match
435 *.c-a.0-c
436No match
437
438/^[0-9a-f](\.[0-9a-f])*$/i
439 a.b.c.d
440 0: a.b.c.d
441 1: .d
442 A.B.C.D
443 0: A.B.C.D
444 1: .D
445 a.b.c.1.2.3.C
446 0: a.b.c.1.2.3.C
447 1: .C
448
449/^".*"\s*(;.*)?$/
450 "1234"
451 0: "1234"
452 "abcd" ;
453 0: "abcd" ;
454 1: ;
455 "" ; rhubarb
456 0: "" ; rhubarb
457 1: ; rhubarb
458 *** Failers
459No match
460 "1234" : things
461No match
462
463/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
464 abcdefhijklm
465 0: abcdefhijklm
466 1: abc
467 2: bc
468 3: c
469 4: def
470 5: ef
471 6: f
472 7: hij
473 8: ij
474 9: j
47510: klm
47611: lm
47712: m
478
479/^a*\w/
480 z
481 0: z
482 az
483 0: az
484 aaaz
485 0: aaaz
486 a
487 0: a
488 aa
489 0: aa
490 aaaa
491 0: aaaa
492 a+
493 0: a
494 aa+
495 0: aa
496
497/^a+\w/
498 az
499 0: az
500 aaaz
501 0: aaaz
502 aa
503 0: aa
504 aaaa
505 0: aaaa
506 aa+
507 0: aa
508
509/^[0-9]{8}\w{2,}/
510 1234567890
511 0: 1234567890
512 12345678ab
513 0: 12345678ab
514 12345678__
515 0: 12345678__
516 *** Failers
517No match
518 1234567
519No match
520
521/^[aeiou0-9]{4,5}$/
522 uoie
523 0: uoie
524 1234
525 0: 1234
526 12345
527 0: 12345
528 aaaaa
529 0: aaaaa
530 *** Failers
531No match
532 123456
533No match
534
535/\`(abc|def)=(\1){2,3}\'/
536 abc=abcabc
537 0: abc=abcabc
538 1: abc
539 2: abc
540 def=defdefdef
541 0: def=defdefdef
542 1: def
543 2: def
544 *** Failers
545No match
546 abc=defdef
547No match
548
549/(cat(a(ract|tonic)|erpillar)) \1()2(3)/
550 cataract cataract23
551 0: cataract cataract23
552 1: cataract
553 2: aract
554 3: ract
555 4:
556 5: 3
557 catatonic catatonic23
558 0: catatonic catatonic23
559 1: catatonic
560 2: atonic
561 3: tonic
562 4:
563 5: 3
564 caterpillar caterpillar23
565 0: caterpillar caterpillar23
566 1: caterpillar
567 2: erpillar
568 3: <unset>
569 4:
570 5: 3
571
572
573/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
574 From abcd Mon Sep 01 12:33:02 1997
575 0: From abcd Mon Sep 01 12:33
576 1: abcd
577
578/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}[0-9]{1,2}\s+[0-9][0-9]:[0-9][0-9]/
579 From abcd Mon Sep 01 12:33:02 1997
580 0: From abcd Mon Sep 01 12:33
581 1: Sep
582 From abcd Mon Sep 1 12:33:02 1997
583 0: From abcd Mon Sep 1 12:33
584 1: Sep
585 *** Failers
586No match
587 From abcd Sep 01 12:33:02 1997
588No match
589
590/^(a)\1{2,3}(.)/
591 aaab
592 0: aaab
593 1: a
594 2: b
595 aaaab
596 0: aaaab
597 1: a
598 2: b
599 aaaaab
600 0: aaaaa
601 1: a
602 2: a
603 aaaaaab
604 0: aaaaa
605 1: a
606 2: a
607
608/^[ab]{1,3}(ab*|b)/
609 aabbbbb
610 0: aabbbbb
611 1: abbbbb
612
613/^(cow|)\1(bell)/
614 cowcowbell
615 0: cowcowbell
616 1: cow
617 2: bell
618 bell
619 0: bell
620 1:
621 2: bell
622 *** Failers
623No match
624 cowbell
625No match
626
627/^(a|)\1+b/
628 aab
629 0: aab
630 1: a
631 aaaab
632 0: aaaab
633 1: a
634 b
635 0: b
636 1:
637 *** Failers
638No match
639 ab
640No match
641
642/^(a|)\1{2}b/
643 aaab
644 0: aaab
645 1: a
646 b
647 0: b
648 1:
649 *** Failers
650No match
651 ab
652No match
653 aab
654No match
655 aaaab
656No match
657
658/^(a|)\1{2,3}b/
659 aaab
660 0: aaab
661 1: a
662 aaaab
663 0: aaaab
664 1: a
665 b
666 0: b
667 1:
668 *** Failers
669No match
670 ab
671No match
672 aab
673No match
674 aaaaab
675No match
676
677/ab{1,3}bc/
678 abbbbc
679 0: abbbbc
680 abbbc
681 0: abbbc
682 abbc
683 0: abbc
684 *** Failers
685No match
686 abc
687No match
688 abbbbbc
689No match
690
691/([^.]*)\.([^:]*):[T ]+(.*)/
692 track1.title:TBlah blah blah
693 0: track1.title:TBlah blah blah
694 1: track1
695 2: title
696 3: Blah blah blah
697
698/([^.]*)\.([^:]*):[T ]+(.*)/i
699 track1.title:TBlah blah blah
700 0: track1.title:TBlah blah blah
701 1: track1
702 2: title
703 3: Blah blah blah
704
705/([^.]*)\.([^:]*):[t ]+(.*)/i
706 track1.title:TBlah blah blah
707 0: track1.title:TBlah blah blah
708 1: track1
709 2: title
710 3: Blah blah blah
711
712/^abc$/
713 abc
714 0: abc
715 *** Failers
716No match
717
718/[-az]+/
719 az-
720 0: az-
721 *** Failers
722 0: a
723 b
724No match
725
726/[az-]+/
727 za-
728 0: za-
729 *** Failers
730 0: a
731 b
732No match
733
734/[a-z]+/
735 abcdxyz
736 0: abcdxyz
737
738/[0-9-]+/
739 12-34
740 0: 12-34
741 *** Failers
742No match
743 aaa
744No match
745
746/(abc)\1/i
747 abcabc
748 0: abcabc
749 1: abc
750 ABCabc
751 0: ABCabc
752 1: ABC
753 abcABC
754 0: abcABC
755 1: abc
756
757/a{0}bc/
758 bc
759 0: bc
760
761/^([^a])([^b])([^c]*)([^d]{3,4})/
762 baNOTccccd
763 0: baNOTcccc
764 1: b
765 2: a
766 3: NOT
767 4: cccc
768 baNOTcccd
769 0: baNOTccc
770 1: b
771 2: a
772 3: NOT
773 4: ccc
774 baNOTccd
775 0: baNOTcc
776 1: b
777 2: a
778 3: NO
779 4: Tcc
780 bacccd
781 0: baccc
782 1: b
783 2: a
784 3:
785 4: ccc
786 *** Failers
787 0: *** Failers
788 1: *
789 2: *
790 3: * Fail
791 4: ers
792 anything
793No match
794 baccd
795No match
796
797/[^a]/
798 Abc
799 0: A
800
801/[^a]/i
802 Abc
803 0: b
804
805/[^a]+/
806 AAAaAbc
807 0: AAA
808
809/[^a]+/i
810 AAAaAbc
811 0: bc
812
813/[^k]$/
814 abc
815 0: c
816 *** Failers
817 0: s
818 abk
819No match
820
821/[^k]{2,3}$/
822 abc
823 0: abc
824 kbc
825 0: bc
826 kabc
827 0: abc
828 *** Failers
829 0: ers
830 abk
831No match
832 akb
833No match
834 akk
835No match
836
837/^[0-9]{8,}@.+[^k]$/
838 12345678@a.b.c.d
839 0: 12345678@a.b.c.d
840 123456789@x.y.z
841 0: 123456789@x.y.z
842 *** Failers
843No match
844 12345678@x.y.uk
845No match
846 1234567@a.b.c.d
847No match
848
849/(a)\1{8,}/
850 aaaaaaaaa
851 0: aaaaaaaaa
852 1: a
853 aaaaaaaaaa
854 0: aaaaaaaaaa
855 1: a
856 *** Failers
857No match
858 aaaaaaa
859No match
860
861/[^a]/
862 aaaabcd
863 0: b
864 aaAabcd
865 0: A
866
867/[^a]/i
868 aaaabcd
869 0: b
870 aaAabcd
871 0: b
872
873/[^az]/
874 aaaabcd
875 0: b
876 aaAabcd
877 0: A
878
879/[^az]/i
880 aaaabcd
881 0: b
882 aaAabcd
883 0: b
884
885/P[^*]TAIRE[^*]{1,6}LL/
886 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
887 0: PSTAIREISLL
888
889/P[^*]TAIRE[^*]{1,}LL/
890 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
891 0: PSTAIREISLL
892
893/(\.[0-9][0-9][1-9]?)[0-9]+/
894 1.230003938
895 0: .230003938
896 1: .23
897 1.875000282
898 0: .875000282
899 1: .875
900 1.235
901 0: .235
902 1: .23
903
904/\b(foo)\s+(\w+)/i
905 Food is on the foo table
906 0: foo table
907 1: foo
908 2: table
909
910/foo(.*)bar/
911 The food is under the bar in the barn.
912 0: food is under the bar in the bar
913 1: d is under the bar in the
914
915/(.*)([0-9]*)/
916 I have 2 numbers: 53147
917 0: I have 2 numbers: 53147
918 1: I have 2 numbers: 53147
919 2:
920
921/(.*)([0-9]+)/
922 I have 2 numbers: 53147
923 0: I have 2 numbers: 53147
924 1: I have 2 numbers: 5314
925 2: 7
926
927/(.*)([0-9]+)$/
928 I have 2 numbers: 53147
929 0: I have 2 numbers: 53147
930 1: I have 2 numbers: 5314
931 2: 7
932
933/(.*)\b([0-9]+)$/
934 I have 2 numbers: 53147
935 0: I have 2 numbers: 53147
936 1: I have 2 numbers:
937 2: 53147
938
939/(.*[^0-9])([0-9]+)$/
940 I have 2 numbers: 53147
941 0: I have 2 numbers: 53147
942 1: I have 2 numbers:
943 2: 53147
944
945/[[:digit:]][[:digit:]]\/[[:digit:]][[:digit:]]\/[[:digit:]][[:digit:]][[:digit:]][[:digit:]]/
946 01/01/2000
947 0: 01/01/2000
948
949/^(a){0,0}/
950 bcd
951 0:
952 abc
953 0:
954 aab
955 0:
956
957/^(a){0,1}/
958 bcd
959 0:
960 abc
961 0: a
962 1: a
963 aab
964 0: a
965 1: a
966
967/^(a){0,2}/
968 bcd
969 0:
970 abc
971 0: a
972 1: a
973 aab
974 0: aa
975 1: a
976
977/^(a){0,3}/
978 bcd
979 0:
980 abc
981 0: a
982 1: a
983 aab
984 0: aa
985 1: a
986 aaa
987 0: aaa
988 1: a
989
990/^(a){0,}/
991 bcd
992 0:
993 abc
994 0: a
995 1: a
996 aab
997 0: aa
998 1: a
999 aaa
1000 0: aaa
1001 1: a
1002 aaaaaaaa
1003 0: aaaaaaaa
1004 1: a
1005
1006/^(a){1,1}/
1007 bcd
1008No match
1009 abc
1010 0: a
1011 1: a
1012 aab
1013 0: a
1014 1: a
1015
1016/^(a){1,2}/
1017 bcd
1018No match
1019 abc
1020 0: a
1021 1: a
1022 aab
1023 0: aa
1024 1: a
1025
1026/^(a){1,3}/
1027 bcd
1028No match
1029 abc
1030 0: a
1031 1: a
1032 aab
1033 0: aa
1034 1: a
1035 aaa
1036 0: aaa
1037 1: a
1038
1039/^(a){1,}/
1040 bcd
1041No match
1042 abc
1043 0: a
1044 1: a
1045 aab
1046 0: aa
1047 1: a
1048 aaa
1049 0: aaa
1050 1: a
1051 aaaaaaaa
1052 0: aaaaaaaa
1053 1: a
1054
1055/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
1056 123456654321
1057 0: 123456654321
1058
1059/^[[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]]/
1060 123456654321
1061 0: 123456654321
1062
1063/^[abc]{12}/
1064 abcabcabcabc
1065 0: abcabcabcabc
1066
1067/^[a-c]{12}/
1068 abcabcabcabc
1069 0: abcabcabcabc
1070
1071/^(a|b|c){12}/
1072 abcabcabcabc
1073 0: abcabcabcabc
1074 1: c
1075
1076/^[abcdefghijklmnopqrstuvwxy0123456789]/
1077 n
1078 0: n
1079 *** Failers
1080No match
1081 z
1082No match
1083
1084/abcde{0,0}/
1085 abcd
1086 0: abcd
1087 *** Failers
1088No match
1089 abce
1090No match
1091
1092/ab[cd]{0,0}e/
1093 abe
1094 0: abe
1095 *** Failers
1096No match
1097 abcde
1098No match
1099
1100/ab(c){0,0}d/
1101 abd
1102 0: abd
1103 *** Failers
1104No match
1105 abcd
1106No match
1107
1108/a(b*)/
1109 a
1110 0: a
1111 1:
1112 ab
1113 0: ab
1114 1: b
1115 abbbb
1116 0: abbbb
1117 1: bbbb
1118 *** Failers
1119 0: a
1120 1:
1121 bbbbb
1122No match
1123
1124/ab[0-9]{0}e/
1125 abe
1126 0: abe
1127 *** Failers
1128No match
1129 ab1e
1130No match
1131
1132/(A|B)*CD/
1133 CD
1134 0: CD
1135
1136/(AB)*\1/
1137 ABABAB
1138 0: ABABAB
1139 1: AB
1140
1141/([0-9]+)(\w)/
1142 12345a
1143 0: 12345a
1144 1: 12345
1145 2: a
1146 12345+
1147 0: 12345
1148 1: 1234
1149 2: 5
1150
1151/(abc|)+/
1152 abc
1153 0: abc
1154 1: abc
1155 abcabc
1156 0: abcabc
1157 1: abc
1158 abcabcabc
1159 0: abcabcabc
1160 1: abc
1161 xyz
1162 0:
1163 1:
1164
1165/([a]*)*/
1166 a
1167 0: a
1168 1: a
1169 aaaaa
1170 0: aaaaa
1171 1: aaaaa
1172
1173/([ab]*)*/
1174 a
1175 0: a
1176 1: a
1177 b
1178 0: b
1179 1: b
1180 ababab
1181 0: ababab
1182 1: ababab
1183 aaaabcde
1184 0: aaaab
1185 1: aaaab
1186 bbbb
1187 0: bbbb
1188 1: bbbb
1189
1190/([^a]*)*/
1191 b
1192 0: b
1193 1: b
1194 bbbb
1195 0: bbbb
1196 1: bbbb
1197 aaa
1198 0:
1199
1200/([^ab]*)*/
1201 cccc
1202 0: cccc
1203 1: cccc
1204 abab
1205 0:
1206
1207/abc/
1208 abc
1209 0: abc
1210 xabcy
1211 0: abc
1212 ababc
1213 0: abc
1214 *** Failers
1215No match
1216 xbc
1217No match
1218 axc
1219No match
1220 abx
1221No match
1222
1223/ab*c/
1224 abc
1225 0: abc
1226
1227/ab*bc/
1228 abc
1229 0: abc
1230 abbc
1231 0: abbc
1232 abbbbc
1233 0: abbbbc
1234
1235/.{1}/
1236 abbbbc
1237 0: a
1238
1239/.{3,4}/
1240 abbbbc
1241 0: abbb
1242
1243/ab{0,}bc/
1244 abbbbc
1245 0: abbbbc
1246
1247/ab+bc/
1248 abbc
1249 0: abbc
1250 *** Failers
1251No match
1252 abc
1253No match
1254 abq
1255No match
1256
1257/ab+bc/
1258 abbbbc
1259 0: abbbbc
1260
1261/ab{1,}bc/
1262 abbbbc
1263 0: abbbbc
1264
1265/ab{1,3}bc/
1266 abbbbc
1267 0: abbbbc
1268
1269/ab{3,4}bc/
1270 abbbbc
1271 0: abbbbc
1272
1273/ab{4,5}bc/
1274 *** Failers
1275No match
1276 abq
1277No match
1278 abbbbc
1279No match
1280
1281/ab?bc/
1282 abbc
1283 0: abbc
1284 abc
1285 0: abc
1286
1287/ab{0,1}bc/
1288 abc
1289 0: abc
1290
1291/ab?c/
1292 abc
1293 0: abc
1294
1295/ab{0,1}c/
1296 abc
1297 0: abc
1298
1299/^abc$/
1300 abc
1301 0: abc
1302 *** Failers
1303No match
1304 abbbbc
1305No match
1306 abcc
1307No match
1308
1309/^abc/
1310 abcc
1311 0: abc
1312
1313/abc$/
1314 aabc
1315 0: abc
1316 *** Failers
1317No match
1318 aabc
1319 0: abc
1320 aabcd
1321No match
1322
1323/^/
1324 abc
1325 0:
1326
1327/$/
1328 abc
1329 0:
1330
1331/a.c/
1332 abc
1333 0: abc
1334 axc
1335 0: axc
1336
1337/a.*c/
1338 axyzc
1339 0: axyzc
1340
1341/a[bc]d/
1342 abd
1343 0: abd
1344 *** Failers
1345No match
1346 axyzd
1347No match
1348 abc
1349No match
1350
1351/a[b-d]e/
1352 ace
1353 0: ace
1354
1355/a[b-d]/
1356 aac
1357 0: ac
1358
1359/a[-b]/
1360 a-
1361 0: a-
1362
1363/a[b-]/
1364 a-
1365 0: a-
1366
1367/a[]]b/
1368 a]b
1369 0: a]b
1370
1371/a[^bc]d/
1372 aed
1373 0: aed
1374 *** Failers
1375No match
1376 abd
1377No match
1378 abd
1379No match
1380
1381/a[^-b]c/
1382 adc
1383 0: adc
1384
1385/a[^]b]c/
1386 adc
1387 0: adc
1388 *** Failers
1389No match
1390 a-c
1391 0: a-c
1392 a]c
1393No match
1394
1395/\ba\b/
1396 a-
1397 0: a
1398 -a
1399 0: a
1400 -a-
1401 0: a
1402
1403/\by\b/
1404 *** Failers
1405No match
1406 xy
1407No match
1408 yz
1409No match
1410 xyz
1411No match
1412
1413/\Ba\B/
1414 *** Failers
1415 0: a
1416 a-
1417No match
1418 -a
1419No match
1420 -a-
1421No match
1422
1423/\By\b/
1424 xy
1425 0: y
1426
1427/\by\B/
1428 yz
1429 0: y
1430
1431/\By\B/
1432 xyz
1433 0: y
1434
1435/\w/
1436 a
1437 0: a
1438
1439/\W/
1440 -
1441 0: -
1442 *** Failers
1443 0: *
1444 -
1445 0: -
1446 a
1447No match
1448
1449/a\sb/
1450 a b
1451 0: a b
1452
1453/a\Sb/
1454 a-b
1455 0: a-b
1456 *** Failers
1457No match
1458 a-b
1459 0: a-b
1460 a b
1461No match
1462
1463/[0-9]/
1464 1
1465 0: 1
1466
1467/[^0-9]/
1468 -
1469 0: -
1470 *** Failers
1471 0: *
1472 -
1473 0: -
1474 1
1475No match
1476
1477/ab|cd/
1478 abc
1479 0: ab
1480 abcd
1481 0: ab
1482
1483/()ef/
1484 def
1485 0: ef
1486 1:
1487
1488/a\(b/
1489 a(b
1490 0: a(b
1491
1492/a\(*b/
1493 ab
1494 0: ab
1495 a((b
1496 0: a((b
1497
1498/((a))/
1499 abc
1500 0: a
1501 1: a
1502 2: a
1503
1504/(a)b(c)/
1505 abc
1506 0: abc
1507 1: a
1508 2: c
1509
1510/a+b+c/
1511 aabbabc
1512 0: abc
1513
1514/a{1,}b{1,}c/
1515 aabbabc
1516 0: abc
1517
1518/(a+|b)*/
1519 ab
1520 0: ab
1521 1: b
1522
1523/(a+|b){0,}/
1524 ab
1525 0: ab
1526 1: b
1527
1528/(a+|b)+/
1529 ab
1530 0: ab
1531 1: b
1532
1533/(a+|b){1,}/
1534 ab
1535 0: ab
1536 1: b
1537
1538/(a+|b)?/
1539 ab
1540 0: a
1541 1: a
1542
1543/(a+|b){0,1}/
1544 ab
1545 0: a
1546 1: a
1547
1548/[^ab]*/
1549 cde
1550 0: cde
1551
1552/abc/
1553 *** Failers
1554No match
1555 b
1556No match
1557
1558
1559/a*/
1560
1561
1562/([abc])*d/
1563 abbbcd
1564 0: abbbcd
1565 1: c
1566
1567/([abc])*bcd/
1568 abcd
1569 0: abcd
1570 1: a
1571
1572/a|b|c|d|e/
1573 e
1574 0: e
1575
1576/(a|b|c|d|e)f/
1577 ef
1578 0: ef
1579 1: e
1580
1581/abcd*efg/
1582 abcdefg
1583 0: abcdefg
1584
1585/ab*/
1586 xabyabbbz
1587 0: ab
1588 xayabbbz
1589 0: a
1590
1591/(ab|cd)e/
1592 abcde
1593 0: cde
1594 1: cd
1595
1596/[abhgefdc]ij/
1597 hij
1598 0: hij
1599
1600/(abc|)ef/
1601 abcdef
1602 0: ef
1603 1:
1604
1605/(a|b)c*d/
1606 abcd
1607 0: bcd
1608 1: b
1609
1610/(ab|ab*)bc/
1611 abc
1612 0: abc
1613 1: a
1614
1615/a([bc]*)c*/
1616 abc
1617 0: abc
1618 1: bc
1619
1620/a([bc]*)(c*d)/
1621 abcd
1622 0: abcd
1623 1: bc
1624 2: d
1625
1626/a([bc]+)(c*d)/
1627 abcd
1628 0: abcd
1629 1: bc
1630 2: d
1631
1632/a([bc]*)(c+d)/
1633 abcd
1634 0: abcd
1635 1: b
1636 2: cd
1637
1638/a[bcd]*dcdcde/
1639 adcdcde
1640 0: adcdcde
1641
1642/a[bcd]+dcdcde/
1643 *** Failers
1644No match
1645 abcde
1646No match
1647 adcdcde
1648No match
1649
1650/(ab|a)b*c/
1651 abc
1652 0: abc
1653 1: ab
1654
1655/((a)(b)c)(d)/
1656 abcd
1657 0: abcd
1658 1: abc
1659 2: a
1660 3: b
1661 4: d
1662
1663/[a-zA-Z_][a-zA-Z0-9_]*/
1664 alpha
1665 0: alpha
1666
1667/^a(bc+|b[eh])g|.h$/
1668 abh
1669 0: bh
1670
1671/(bc+d$|ef*g.|h?i(j|k))/
1672 effgz
1673 0: effgz
1674 1: effgz
1675 ij
1676 0: ij
1677 1: ij
1678 2: j
1679 reffgz
1680 0: effgz
1681 1: effgz
1682 *** Failers
1683No match
1684 effg
1685No match
1686 bcdd
1687No match
1688
1689/((((((((((a))))))))))/
1690 a
1691 0: a
1692 1: a
1693 2: a
1694 3: a
1695 4: a
1696 5: a
1697 6: a
1698 7: a
1699 8: a
1700 9: a
170110: a
1702
1703/((((((((((a))))))))))\9/
1704 aa
1705 0: aa
1706 1: a
1707 2: a
1708 3: a
1709 4: a
1710 5: a
1711 6: a
1712 7: a
1713 8: a
1714 9: a
171510: a
1716
1717/(((((((((a)))))))))/
1718 a
1719 0: a
1720 1: a
1721 2: a
1722 3: a
1723 4: a
1724 5: a
1725 6: a
1726 7: a
1727 8: a
1728 9: a
1729
1730/multiple words of text/
1731 *** Failers
1732No match
1733 aa
1734No match
1735 uh-uh
1736No match
1737
1738/multiple words/
1739 multiple words, yeah
1740 0: multiple words
1741
1742/(.*)c(.*)/
1743 abcde
1744 0: abcde
1745 1: ab
1746 2: de
1747
1748/\((.*), (.*)\)/
1749 (a, b)
1750 0: (a, b)
1751 1: a
1752 2: b
1753
1754/abcd/
1755 abcd
1756 0: abcd
1757
1758/a(bc)d/
1759 abcd
1760 0: abcd
1761 1: bc
1762
1763/a[-]?c/
1764 ac
1765 0: ac
1766
1767/(abc)\1/
1768 abcabc
1769 0: abcabc
1770 1: abc
1771
1772/([a-c]*)\1/
1773 abcabc
1774 0: abcabc
1775 1: abc
1776
1777/(a)|\1/
1778 a
1779 0: a
1780 1: a
1781 *** Failers
1782 0: a
1783 1: a
1784 ab
1785 0: a
1786 1: a
1787 x
1788No match
1789
1790/abc/i
1791 ABC
1792 0: ABC
1793 XABCY
1794 0: ABC
1795 ABABC
1796 0: ABC
1797 *** Failers
1798No match
1799 aaxabxbaxbbx
1800No match
1801 XBC
1802No match
1803 AXC
1804No match
1805 ABX
1806No match
1807
1808/ab*c/i
1809 ABC
1810 0: ABC
1811
1812/ab*bc/i
1813 ABC
1814 0: ABC
1815 ABBC
1816 0: ABBC
1817
1818/ab+bc/i
1819 *** Failers
1820No match
1821 ABC
1822No match
1823 ABQ
1824No match
1825
1826/ab+bc/i
1827 ABBBBC
1828 0: ABBBBC
1829
1830/^abc$/i
1831 ABC
1832 0: ABC
1833 *** Failers
1834No match
1835 ABBBBC
1836No match
1837 ABCC
1838No match
1839
1840/^abc/i
1841 ABCC
1842 0: ABC
1843
1844/abc$/i
1845 AABC
1846 0: ABC
1847
1848/^/i
1849 ABC
1850 0:
1851
1852/$/i
1853 ABC
1854 0:
1855
1856/a.c/i
1857 ABC
1858 0: ABC
1859 AXC
1860 0: AXC
1861
1862/a.*c/i
1863 *** Failers
1864No match
1865 AABC
1866 0: AABC
1867 AXYZD
1868No match
1869
1870/a[bc]d/i
1871 ABD
1872 0: ABD
1873
1874/a[b-d]e/i
1875 ACE
1876 0: ACE
1877 *** Failers
1878No match
1879 ABC
1880No match
1881 ABD
1882No match
1883
1884/a[b-d]/i
1885 AAC
1886 0: AC
1887
1888/a[-b]/i
1889 A-
1890 0: A-
1891
1892/a[b-]/i
1893 A-
1894 0: A-
1895
1896/a[]]b/i
1897 A]B
1898 0: A]B
1899
1900/a[^bc]d/i
1901 AED
1902 0: AED
1903
1904/a[^-b]c/i
1905 ADC
1906 0: ADC
1907 *** Failers
1908No match
1909 ABD
1910No match
1911 A-C
1912No match
1913
1914/a[^]b]c/i
1915 ADC
1916 0: ADC
1917
1918/ab|cd/i
1919 ABC
1920 0: AB
1921 ABCD
1922 0: AB
1923
1924/()ef/i
1925 DEF
1926 0: EF
1927 1:
1928
1929/$b/i
1930 *** Failers
1931No match
1932 A]C
1933No match
1934 B
1935No match
1936
1937/a\(b/i
1938 A(B
1939 0: A(B
1940
1941/a\(*b/i
1942 AB
1943 0: AB
1944 A((B
1945 0: A((B
1946
1947/((a))/i
1948 ABC
1949 0: A
1950 1: A
1951 2: A
1952
1953/(a)b(c)/i
1954 ABC
1955 0: ABC
1956 1: A
1957 2: C
1958
1959/a+b+c/i
1960 AABBABC
1961 0: ABC
1962
1963/a{1,}b{1,}c/i
1964 AABBABC
1965 0: ABC
1966
1967/(a+|b)*/i
1968 AB
1969 0: AB
1970 1: B
1971
1972/(a+|b){0,}/i
1973 AB
1974 0: AB
1975 1: B
1976
1977/(a+|b)+/i
1978 AB
1979 0: AB
1980 1: B
1981
1982/(a+|b){1,}/i
1983 AB
1984 0: AB
1985 1: B
1986
1987/(a+|b)?/i
1988 AB
1989 0: A
1990 1: A
1991
1992/(a+|b){0,1}/i
1993 AB
1994 0: A
1995 1: A
1996
1997/[^ab]*/i
1998 CDE
1999 0: CDE
2000
2001/([abc])*d/i
2002 ABBBCD
2003 0: ABBBCD
2004 1: C
2005
2006/([abc])*bcd/i
2007 ABCD
2008 0: ABCD
2009 1: A
2010
2011/a|b|c|d|e/i
2012 E
2013 0: E
2014
2015/(a|b|c|d|e)f/i
2016 EF
2017 0: EF
2018 1: E
2019
2020/abcd*efg/i
2021 ABCDEFG
2022 0: ABCDEFG
2023
2024/ab*/i
2025 XABYABBBZ
2026 0: AB
2027 XAYABBBZ
2028 0: A
2029
2030/(ab|cd)e/i
2031 ABCDE
2032 0: CDE
2033 1: CD
2034
2035/[abhgefdc]ij/i
2036 HIJ
2037 0: HIJ
2038
2039/^(ab|cd)e/i
2040 ABCDE
2041No match
2042
2043/(abc|)ef/i
2044 ABCDEF
2045 0: EF
2046 1:
2047
2048/(a|b)c*d/i
2049 ABCD
2050 0: BCD
2051 1: B
2052
2053/(ab|ab*)bc/i
2054 ABC
2055 0: ABC
2056 1: A
2057
2058/a([bc]*)c*/i
2059 ABC
2060 0: ABC
2061 1: BC
2062
2063/a([bc]*)(c*d)/i
2064 ABCD
2065 0: ABCD
2066 1: BC
2067 2: D
2068
2069/a([bc]+)(c*d)/i
2070 ABCD
2071 0: ABCD
2072 1: BC
2073 2: D
2074
2075/a([bc]*)(c+d)/i
2076 ABCD
2077 0: ABCD
2078 1: B
2079 2: CD
2080
2081/a[bcd]*dcdcde/i
2082 ADCDCDE
2083 0: ADCDCDE
2084
2085/a[bcd]+dcdcde/i
2086
2087/(ab|a)b*c/i
2088 ABC
2089 0: ABC
2090 1: AB
2091
2092/((a)(b)c)(d)/i
2093 ABCD
2094 0: ABCD
2095 1: ABC
2096 2: A
2097 3: B
2098 4: D
2099
2100/[a-zA-Z_][a-zA-Z0-9_]*/i
2101 ALPHA
2102 0: ALPHA
2103
2104/^a(bc+|b[eh])g|.h$/i
2105 ABH
2106 0: BH
2107
2108/(bc+d$|ef*g.|h?i(j|k))/i
2109 EFFGZ
2110 0: EFFGZ
2111 1: EFFGZ
2112 IJ
2113 0: IJ
2114 1: IJ
2115 2: J
2116 REFFGZ
2117 0: EFFGZ
2118 1: EFFGZ
2119 *** Failers
2120No match
2121 ADCDCDE
2122No match
2123 EFFG
2124No match
2125 BCDD
2126No match
2127
2128/((((((((((a))))))))))/i
2129 A
2130 0: A
2131 1: A
2132 2: A
2133 3: A
2134 4: A
2135 5: A
2136 6: A
2137 7: A
2138 8: A
2139 9: A
214010: A
2141
2142/((((((((((a))))))))))\9/i
2143 AA
2144 0: AA
2145 1: A
2146 2: A
2147 3: A
2148 4: A
2149 5: A
2150 6: A
2151 7: A
2152 8: A
2153 9: A
215410: A
2155
2156/(((((((((a)))))))))/i
2157 A
2158 0: A
2159 1: A
2160 2: A
2161 3: A
2162 4: A
2163 5: A
2164 6: A
2165 7: A
2166 8: A
2167 9: A
2168
2169/multiple words of text/i
2170 *** Failers
2171No match
2172 AA
2173No match
2174 UH-UH
2175No match
2176
2177/multiple words/i
2178 MULTIPLE WORDS, YEAH
2179 0: MULTIPLE WORDS
2180
2181/(.*)c(.*)/i
2182 ABCDE
2183 0: ABCDE
2184 1: AB
2185 2: DE
2186
2187/\((.*), (.*)\)/i
2188 (A, B)
2189 0: (A, B)
2190 1: A
2191 2: B
2192
2193/abcd/i
2194 ABCD
2195 0: ABCD
2196
2197/a(bc)d/i
2198 ABCD
2199 0: ABCD
2200 1: BC
2201
2202/a[-]?c/i
2203 AC
2204 0: AC
2205
2206/(abc)\1/i
2207 ABCABC
2208 0: ABCABC
2209 1: ABC
2210
2211/([a-c]*)\1/i
2212 ABCABC
2213 0: ABCABC
2214 1: ABC
2215
2216/((foo)|(bar))*/
2217 foobar
2218 0: foobar
2219 1: bar
2220 2: foo
2221 3: bar
2222
2223/^(.+)?B/
2224 AB
2225 0: AB
2226 1: A
2227
2228/^([^a-z])|(\^)$/
2229 .
2230 0: .
2231 1: .
2232
2233/^[<>]&/
2234 <&OUT
2235 0: <&
2236
2237/^(){3,5}/
2238 abc
2239 0:
2240 1:
2241
2242/^(a+)*ax/
2243 aax
2244 0: aax
2245 1: a
2246
2247/^((a|b)+)*ax/
2248 aax
2249 0: aax
2250 1: a
2251 2: a
2252
2253/^((a|bc)+)*ax/
2254 aax
2255 0: aax
2256 1: a
2257 2: a
2258
2259/(a|x)*ab/
2260 cab
2261 0: ab
2262
2263/(a)*ab/
2264 cab
2265 0: ab
2266
2267/(ab)[0-9]\1/i
2268 Ab4ab
2269 0: Ab4ab
2270 1: Ab
2271 ab4Ab
2272 0: ab4Ab
2273 1: ab
2274
2275/foo\w*[0-9]{4}baz/
2276 foobar1234baz
2277 0: foobar1234baz
2278
2279/(\w+:)+/
2280 one:
2281 0: one:
2282 1: one:
2283
2284/((\w|:)+::)?(\w+)$/
2285 abcd
2286 0: abcd
2287 1: <unset>
2288 2: <unset>
2289 3: abcd
2290 xy:z:::abcd
2291 0: xy:z:::abcd
2292 1: xy:z:::
2293 2: :
2294 3: abcd
2295
2296/^[^bcd]*(c+)/
2297 aexycd
2298 0: aexyc
2299 1: c
2300
2301/(a*)b+/
2302 caab
2303 0: aab
2304 1: aa
2305
2306/((\w|:)+::)?(\w+)$/
2307 abcd
2308 0: abcd
2309 1: <unset>
2310 2: <unset>
2311 3: abcd
2312 xy:z:::abcd
2313 0: xy:z:::abcd
2314 1: xy:z:::
2315 2: :
2316 3: abcd
2317 *** Failers
2318 0: Failers
2319 1: <unset>
2320 2: <unset>
2321 3: Failers
2322 abcd:
2323No match
2324 abcd:
2325No match
2326
2327/^[^bcd]*(c+)/
2328 aexycd
2329 0: aexyc
2330 1: c
2331
2332/((Z)+|A)*/
2333 ZABCDEFG
2334 0: ZA
2335 1: A
2336 2: Z
2337
2338/(Z()|A)*/
2339 ZABCDEFG
2340 0: ZA
2341 1: A
2342 2:
2343
2344/(Z(())|A)*/
2345 ZABCDEFG
2346 0: ZA
2347 1: A
2348 2:
2349 3:
2350
2351/(.*)[0-9]+\1/
2352 abc123abc
2353 0: abc123abc
2354 1: abc
2355 abc123bc
2356 0: bc123bc
2357 1: bc
2358
2359/((.*))[0-9]+\1/
2360 abc123abc
2361 0: abc123abc
2362 1: abc
2363 2: abc
2364 abc123bc
2365 0: bc123bc
2366 1: bc
2367 2: bc
2368
2369/^a{2,5}$/
2370 aa
2371 0: aa
2372 aaa
2373 0: aaa
2374 aaaa
2375 0: aaaa
2376 aaaaa
2377 0: aaaaa
2378 *** Failers
2379No match
2380 a
2381No match
2382 b
2383No match
2384 aaaaab
2385No match
2386 aaaaaa
diff --git a/test/src/regex-resources/PTESTS b/test/src/regex-resources/PTESTS
new file mode 100644
index 00000000000..02b357cf2e3
--- /dev/null
+++ b/test/src/regex-resources/PTESTS
@@ -0,0 +1,341 @@
1# 2.8.2 Regular Expression General Requirement
22¦4¦bb*¦abbbc¦
32¦2¦bb*¦ababbbc¦
47¦9¦A#*::¦A:A#:qA::qA#::qA##::q¦
51¦5¦A#*::¦A##::A#::qA::qA#:q¦
6# 2.8.3.1.2 BRE Special Characters
7# GA108
82¦2¦\.¦a.c¦
92¦2¦\[¦a[c¦
102¦2¦\\¦a\c¦
112¦2¦\*¦a*c¦
122¦2¦\^¦a^c¦
132¦2¦\$¦a$c¦
147¦11¦X\*Y\*8¦Y*8X*8X*Y*8¦
15# GA109
162¦2¦[.]¦a.c¦
172¦2¦[[]¦a[c¦
18-1¦-1¦[[]¦ac¦
192¦2¦[\]¦a\c¦
201¦1¦[\a]¦abc¦
212¦2¦[\.]¦a\.c¦
222¦2¦[\.]¦a.\c¦
232¦2¦[*]¦a*c¦
242¦2¦[$]¦a$c¦
252¦2¦[X*Y8]¦7*8YX¦
26# GA110
272¦2¦*¦a*c¦
283¦4¦*a¦*b*a*c¦
291¦5¦**9=¦***9=9¦
30# GA111
311¦1¦^*¦*bc¦
32-1¦-1¦^*¦a*c¦
33-1¦-1¦^*¦^*ab¦
341¦5¦^**9=¦***9=¦
35-1¦-1¦^*5<*9¦5<9*5<*9¦
36# GA112
372¦3¦\(*b\)¦a*b¦
38-1¦-1¦\(*b\)¦ac¦
391¦6¦A\(**9\)=¦A***9=79¦
40# GA113(1)
411¦3¦\(^*ab\)¦*ab¦
42-1¦-1¦\(^*ab\)¦^*ab¦
43-1¦-1¦\(^*b\)¦a*b¦
44-1¦-1¦\(^*b\)¦^*b¦
45### GA113(2) GNU regex implements GA113(1)
46##-1¦-1¦\(^*ab\)¦*ab¦
47##-1¦-1¦\(^*ab\)¦^*ab¦
48##1¦1¦\(^*b\)¦b¦
49##1¦3¦\(^*b\)¦^^b¦
50# GA114
511¦3¦a^b¦a^b¦
521¦3¦a\^b¦a^b¦
531¦1¦^^¦^bc¦
542¦2¦\^¦a^c¦
551¦1¦[c^b]¦^abc¦
561¦1¦[\^ab]¦^ab¦
572¦2¦[\^ab]¦c\d¦
58-1¦-1¦[^^]¦^¦
591¦3¦\(a^b\)¦a^b¦
601¦3¦\(a\^b\)¦a^b¦
612¦2¦\(\^\)¦a^b¦
62# GA115
633¦3¦$$¦ab$¦
64-1¦-1¦$$¦$ab¦
652¦3¦$c¦a$c¦
662¦2¦[$]¦a$c¦
671¦2¦\$a¦$a¦
683¦3¦\$$¦ab$¦
692¦6¦A\([34]$[34]\)B¦XA4$3BY¦
70# 2.8.3.1.3 Periods in BREs
71# GA116
721¦1¦.¦abc¦
73-1¦-1¦.ab¦abc¦
741¦3¦ab.¦abc¦
751¦3¦a.b¦a,b¦
76-1¦-1¦.......¦PqRs6¦
771¦7¦.......¦PqRs6T8¦
78# 2.8.3.2 RE Bracket Expression
79# GA118
802¦2¦[abc]¦xbyz¦
81-1¦-1¦[abc]¦xyz¦
822¦2¦[abc]¦xbay¦
83# GA119
842¦2¦[^a]¦abc¦
854¦4¦[^]cd]¦cd]ef¦
862¦2¦[^abc]¦axyz¦
87-1¦-1¦[^abc]¦abc¦
883¦3¦[^[.a.]b]¦abc¦
893¦3¦[^[=a=]b]¦abc¦
902¦2¦[^-ac]¦abcde-¦
912¦2¦[^ac-]¦abcde-¦
923¦3¦[^a-b]¦abcde¦
933¦3¦[^a-bd-e]¦dec¦
942¦2¦[^---]¦-ab¦
9516¦16¦[^a-zA-Z0-9]¦pqrstVWXYZ23579#¦
96# GA120(1)
973¦3¦[]a]¦cd]ef¦
981¦1¦[]-a]¦a_b¦
993¦3¦[][.-.]-0]¦ab0-]¦
1001¦1¦[]^a-z]¦string¦
101# GA120(2)
1024¦4¦[^]cd]¦cd]ef¦
1030¦0¦[^]]*¦]]]]]]]]X¦
1040¦0¦[^]]*¦]]]]]]]]¦
1059¦9¦[^]]\{1,\}¦]]]]]]]]X¦
106-1¦-1¦[^]]\{1,\}¦]]]]]]]]¦
107# GA120(3)
1083¦3¦[c[.].]d]¦ab]cd¦
1092¦8¦[a-z]*[[.].]][A-Z]*¦Abcd]DEFg¦
110# GA121
1112¦2¦[[.a.]b]¦Abc¦
1121¦1¦[[.a.]b]¦aBc¦
113-1¦-1¦[[.a.]b]¦ABc¦
1143¦3¦[^[.a.]b]¦abc¦
1153¦3¦[][.-.]-0]¦ab0-]¦
1163¦3¦[A-[.].]c]¦ab]!¦
117# GA122
118-2¦-2¦[[.ch.]]¦abc¦
119-2¦-2¦[[.ab.][.CD.][.EF.]]¦yZabCDEFQ9¦
120# GA125
1212¦2¦[[=a=]b]¦Abc¦
1221¦1¦[[=a=]b]¦aBc¦
123-1¦-1¦[[=a=]b]¦ABc¦
1243¦3¦[^[=a=]b]¦abc¦
125# GA126
126#W the expected result for [[:alnum:]]* is 2-7 which is wrong
1270¦0¦[[:alnum:]]*¦ aB28gH¦
1282¦7¦[[:alnum:]][[:alnum:]]*¦ aB28gH¦
129#W the expected result for [^[:alnum:]]* is 2-5 which is wrong
1300¦0¦[^[:alnum:]]*¦2 ,a¦
1312¦5¦[^[:alnum:]][^[:alnum:]]*¦2 ,a¦
132#W the expected result for [[:alpha:]]* is 2-5 which is wrong
1330¦0¦[[:alpha:]]*¦ aBgH2¦
1342¦5¦[[:alpha:]][[:alpha:]]*¦ aBgH2¦
1351¦6¦[^[:alpha:]]*¦2 8,a¦
1361¦2¦[[:blank:]]*¦ ¦
1371¦8¦[^[:blank:]]*¦aB28gH, ¦
1381¦2¦[[:cntrl:]]*¦  ¦
1391¦8¦[^[:cntrl:]]*¦aB2 8gh,¦
140#W the expected result for [[:digit:]]* is 2-3 which is wrong
1410¦0¦[[:digit:]]*¦a28¦
1422¦3¦[[:digit:]][[:digit:]]*¦a28¦
1431¦8¦[^[:digit:]]*¦aB gH,¦
1441¦7¦[[:graph:]]*¦aB28gH, ¦
1451¦3¦[^[:graph:]]*¦ ,¦
1461¦2¦[[:lower:]]*¦agB¦
1471¦8¦[^[:lower:]]*¦B2 8H,a¦
1481¦8¦[[:print:]]*¦aB2 8gH, ¦
1491¦2¦[^[:print:]]*¦  ¦
150#W the expected result for [[:punct:]]* is 2-2 which is wrong
1510¦0¦[[:punct:]]*¦a,2¦
1522¦3¦[[:punct:]][[:punct:]]*¦a,,2¦
1531¦9¦[^[:punct:]]*¦aB2 8gH¦
1541¦3¦[[:space:]]*¦ ¦
155#W the expected result for [^[:space:]]* is 2-9 which is wrong
1560¦0¦[^[:space:]]*¦ aB28gH, ¦
1572¦9¦[^[:space:]][^[:space:]]*¦ aB28gH, ¦
158#W the expected result for [[:upper:]]* is 2-3 which is wrong
1590¦0¦[[:upper:]]*¦aBH2¦
1602¦3¦[[:upper:]][[:upper:]]*¦aBH2¦
1611¦8¦[^[:upper:]]*¦a2 8g,B¦
162#W the expected result for [[:xdigit:]]* is 2-5 which is wrong
1630¦0¦[[:xdigit:]]*¦gaB28h¦
1642¦5¦[[:xdigit:]][[:xdigit:]]*¦gaB28h¦
165#W the expected result for [^[:xdigit:]]* is 2-7 which is wrong
1662¦7¦[^[:xdigit:]][^[:xdigit:]]*¦a gH,2¦
167# GA127
168-2¦-2¦[b-a]¦abc¦
1691¦1¦[a-c]¦bbccde¦
1702¦2¦[a-b]¦-bc¦
1713¦3¦[a-z0-9]¦AB0¦
1723¦3¦[^a-b]¦abcde¦
1733¦3¦[^a-bd-e]¦dec¦
1741¦1¦[]-a]¦a_b¦
1752¦2¦[+--]¦a,b¦
1762¦2¦[--/]¦a.b¦
1772¦2¦[^---]¦-ab¦
1783¦3¦[][.-.]-0]¦ab0-]¦
1793¦3¦[A-[.].]c]¦ab]!¦
1802¦6¦bc[d-w]xy¦abchxyz¦
181# GA129
1821¦1¦[a-cd-f]¦dbccde¦
183-1¦-1¦[a-ce-f]¦dBCCdE¦
1842¦4¦b[n-zA-M]Y¦absY9Z¦
1852¦4¦b[n-zA-M]Y¦abGY9Z¦
186# GA130
1873¦3¦[-xy]¦ac-¦
1882¦4¦c[-xy]D¦ac-D+¦
1892¦2¦[--/]¦a.b¦
1902¦4¦c[--/]D¦ac.D+b¦
1912¦2¦[^-ac]¦abcde-¦
1921¦3¦a[^-ac]c¦abcde-¦
1933¦3¦[xy-]¦zc-¦
1942¦4¦c[xy-]7¦zc-786¦
1952¦2¦[^ac-]¦abcde-¦
1962¦4¦a[^ac-]c¦5abcde-¦
1972¦2¦[+--]¦a,b¦
1982¦4¦a[+--]B¦Xa,By¦
1992¦2¦[^---]¦-ab¦
2004¦6¦X[^---]Y¦X-YXaYXbY¦
201# 2.8.3.3 BREs Matching Multiple Characters
202# GA131
2033¦4¦cd¦abcdeabcde¦
2041¦2¦ag*b¦abcde¦
205-1¦-1¦[a-c][e-f]¦abcdef¦
2063¦4¦[a-c][e-f]¦acbedf¦
2074¦8¦abc*XYZ¦890abXYZ#*¦
2084¦9¦abc*XYZ¦890abcXYZ#*¦
2094¦15¦abc*XYZ¦890abcccccccXYZ#*¦
210-1¦-1¦abc*XYZ¦890abc*XYZ#*¦
211# GA132
2122¦4¦\(*bc\)¦a*bc¦
2131¦2¦\(ab\)¦abcde¦
2141¦10¦\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)¦abcdefghijk¦
2153¦8¦43\(2\(6\)*0\)AB¦654320ABCD¦
2163¦9¦43\(2\(7\)*0\)AB¦6543270ABCD¦
2173¦12¦43\(2\(7\)*0\)AB¦6543277770ABCD¦
218# GA133
2191¦10¦\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)¦abcdefghijk¦
220-1¦-1¦\(a\(b\(c\(d\(e\(f\(g\)h\(i\(k\)\)\)\)\)\)\)\)¦abcdefghijk¦
221# GA134
2222¦4¦\(bb*\)¦abbbc¦
2232¦2¦\(bb*\)¦ababbbc¦
2241¦6¦a\(.*b\)¦ababbbc¦
2251¦2¦a\(b*\)¦ababbbc¦
2261¦20¦a\(.*b\)c¦axcaxbbbcsxbbbbbbbbc¦
227# GA135
2281¦7¦\(a\(b\(c\(d\(e\)\)\)\)\)\4¦abcdededede¦
229#W POSIX does not really specify whether a\(b\)*c\1 matches acb.
230#W back references are supposed to expand to the last match, but what
231#W if there never was a match as in this case?
232-1¦-1¦a\(b\)*c\1¦acb¦
2331¦11¦\(a\(b\(c\(d\(e\(f\(g\)h\(i\(j\)\)\)\)\)\)\)\)\9¦abcdefghijjk¦
234# GA136
235#W These two tests have the same problem as the test in GA135. No match
236#W of a subexpression, why should the back reference be usable?
237#W 1 2 a\(b\)*c\1 acb
238#W 4 7 a\(b\(c\(d\(f\)*\)\)\)\4¦xYzabcdePQRST
239-1¦-1¦a\(b\)*c\1¦acb¦
240-1¦-1¦a\(b\(c\(d\(f\)*\)\)\)\4¦xYzabcdePQRST¦
241# GA137
242-2¦-2¦\(a\(b\)\)\3¦foo¦
243-2¦-2¦\(a\(b\)\)\(a\(b\)\)\5¦foo¦
244# GA138
2451¦2¦ag*b¦abcde¦
2461¦10¦a.*b¦abababvbabc¦
2472¦5¦b*c¦abbbcdeabbbbbbcde¦
2482¦5¦bbb*c¦abbbcdeabbbbbbcde¦
2491¦5¦a\(b\)*c\1¦abbcbbb¦
250-1¦-1¦a\(b\)*c\1¦abbdbd¦
2510¦0¦\([a-c]*\)\1¦abcacdef¦
2521¦6¦\([a-c]*\)\1¦abcabcabcd¦
2531¦2¦a^*b¦ab¦
2541¦5¦a^*b¦a^^^b¦
255# GA139
2561¦2¦a\{2\}¦aaaa¦
2571¦7¦\([a-c]*\)\{0,\}¦aabcaab¦
2581¦2¦\(a\)\1\{1,2\}¦aabc¦
2591¦3¦\(a\)\1\{1,2\}¦aaaabc¦
260#W the expression \(\(a\)\1\)\{1,2\} is ill-formed, using \2
2611¦4¦\(\(a\)\2\)\{1,2\}¦aaaabc¦
262# GA140
2631¦2¦a\{2\}¦aaaa¦
264-1¦-1¦a\{2\}¦abcd¦
2650¦0¦a\{0\}¦aaaa¦
2661¦64¦a\{64\}¦aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa¦
267# GA141
2681¦7¦\([a-c]*\)\{0,\}¦aabcaab¦
269#W the expected result for \([a-c]*\)\{2,\} is failure which isn't correct
2701¦3¦\([a-c]*\)\{2,\}¦abcdefg¦
2711¦3¦\([a-c]*\)\{1,\}¦abcdefg¦
272-1¦-1¦a\{64,\}¦aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa¦
273# GA142
2741¦3¦a\{2,3\}¦aaaa¦
275-1¦-1¦a\{2,3\}¦abcd¦
2760¦0¦\([a-c]*\)\{0,0\}¦foo¦
2771¦63¦a\{1,63\}¦aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa¦
278# 2.8.3.4 BRE Precedence
279# GA143
280#W There are numerous bugs in the original version.
2812¦19¦\^\[[[.].]]\\(\\1\\)\*\\{1,2\\}\$¦a^[]\(\1\)*\{1,2\}$b¦
2821¦6¦[[=*=]][[=\=]][[=]=]][[===]][[...]][[:punct:]]¦*\]=.;¦
2831¦6¦[$\(*\)^]*¦$\()*^¦
2841¦1¦[\1]¦1¦
2851¦1¦[\{1,2\}]¦{¦
286#W the expected result for \(*\)*\1* is 2-2 which isn't correct
2870¦0¦\(*\)*\1*¦a*b*11¦
2882¦3¦\(*\)*\1*b¦a*b*11¦
289#W the expected result for \(a\(b\{1,2\}\)\{1,2\}\) is 1-5 which isn't correct
2901¦3¦\(a\(b\{1,2\}\)\{1,2\}\)¦abbab¦
2911¦5¦\(a\(b\{1,2\}\)\)\{1,2\}¦abbab¦
2921¦1¦^\(^\(^a$\)$\)$¦a¦
2931¦2¦\(a\)\1$¦aa¦
2941¦3¦ab*¦abb¦
2951¦4¦ab\{2,4\}¦abbbc¦
296# 2.8.3.5 BRE Expression Anchoring
297# GA144
2981¦1¦^a¦abc¦
299-1¦-1¦^b¦abc¦
300-1¦-1¦^[a-zA-Z]¦99Nine¦
3011¦4¦^[a-zA-Z]*¦Nine99¦
302# GA145(1)
3031¦2¦\(^a\)\1¦aabc¦
304-1¦-1¦\(^a\)\1¦^a^abc¦
3051¦2¦\(^^a\)¦^a¦
3061¦1¦\(^^\)¦^^¦
3071¦3¦\(^abc\)¦abcdef¦
308-1¦-1¦\(^def\)¦abcdef¦
309### GA145(2) GNU regex implements GA145(1)
310##-1¦-1¦\(^a\)\1¦aabc¦
311##1¦4¦\(^a\)\1¦^a^abc¦
312##-1¦-1¦\(^^a\)¦^a¦
313##1¦2¦\(^^\)¦^^¦
314# GA146
3153¦3¦a$¦cba¦
316-1¦-1¦a$¦abc¦
3175¦7¦[a-z]*$¦99ZZxyz¦
318#W the expected result for [a-z]*$ is failure which isn't correct
31910¦9¦[a-z]*$¦99ZZxyz99¦
3203¦3¦$$¦ab$¦
321-1¦-1¦$$¦$ab¦
3223¦3¦\$$¦ab$¦
323# GA147(1)
324-1¦-1¦\(a$\)\1¦bcaa¦
325-1¦-1¦\(a$\)\1¦ba$¦
326-1¦-1¦\(ab$\)¦ab$¦
3271¦2¦\(ab$\)¦ab¦
3284¦6¦\(def$\)¦abcdef¦
329-1¦-1¦\(abc$\)¦abcdef¦
330### GA147(2) GNU regex implements GA147(1)
331##-1¦-1¦\(a$\)\1¦bcaa¦
332##2¦5¦\(a$\)\1¦ba$a$¦
333##-1¦-1¦\(ab$\)¦ab¦
334##1¦3¦\(ab$\)¦ab$¦
335# GA148
3360¦0¦^$¦¦
3371¦3¦^abc$¦abc¦
338-1¦-1¦^xyz$¦^xyz^¦
339-1¦-1¦^234$¦^234$¦
3401¦9¦^[a-zA-Z0-9]*$¦2aA3bB9zZ¦
341-1¦-1¦^[a-z0-9]*$¦2aA3b#B9zZ¦
diff --git a/test/src/regex-resources/TESTS b/test/src/regex-resources/TESTS
new file mode 100644
index 00000000000..f2c98864058
--- /dev/null
+++ b/test/src/regex-resources/TESTS
@@ -0,0 +1,167 @@
10:(.*)*\1:xx
20:^:
30:$:
40:^$:
50:^a$:a
60:abc:abc
71:abc:xbc
81:abc:axc
91:abc:abx
100:abc:xabcy
110:abc:ababc
120:ab*c:abc
130:ab*bc:abc
140:ab*bc:abbc
150:ab*bc:abbbbc
160:ab+bc:abbc
171:ab+bc:abc
181:ab+bc:abq
190:ab+bc:abbbbc
200:ab?bc:abbc
210:ab?bc:abc
221:ab?bc:abbbbc
230:ab?c:abc
240:^abc$:abc
251:^abc$:abcc
260:^abc:abcc
271:^abc$:aabc
280:abc$:aabc
290:^:abc
300:$:abc
310:a.c:abc
320:a.c:axc
330:a.*c:axyzc
341:a.*c:axyzd
351:a[bc]d:abc
360:a[bc]d:abd
371:a[b-d]e:abd
380:a[b-d]e:ace
390:a[b-d]:aac
400:a[-b]:a-
410:a[b-]:a-
422:a[b-a]:-
432:a[]b:-
442:a[:-
450:a]:a]
460:a[]]b:a]b
470:a[^bc]d:aed
481:a[^bc]d:abd
490:a[^-b]c:adc
501:a[^-b]c:a-c
511:a[^]b]c:a]c
520:a[^]b]c:adc
530:ab|cd:abc
540:ab|cd:abcd
550:()ef:def
560:()*:-
572:*a:-
582:^*:-
592:$*:-
602:(*)b:-
611:$b:b
622:a\:-
630:a\(b:a(b
640:a\(*b:ab
650:a\(*b:a((b
661:a\x:a\x
671:abc):-
682:(abc:-
690:((a)):abc
700:(a)b(c):abc
710:a+b+c:aabbabc
720:a**:-
730:a*?:-
740:(a*)*:-
750:(a*)+:-
760:(a|)*:-
770:(a*|b)*:-
780:(a+|b)*:ab
790:(a+|b)+:ab
800:(a+|b)?:ab
810:[^ab]*:cde
820:(^)*:-
830:(ab|)*:-
842:)(:-
851:abc:
861:abc:
870:a*:
880:([abc])*d:abbbcd
890:([abc])*bcd:abcd
900:a|b|c|d|e:e
910:(a|b|c|d|e)f:ef
920:((a*|b))*:-
930:abcd*efg:abcdefg
940:ab*:xabyabbbz
950:ab*:xayabbbz
960:(ab|cd)e:abcde
970:[abhgefdc]ij:hij
981:^(ab|cd)e:abcde
990:(abc|)ef:abcdef
1000:(a|b)c*d:abcd
1010:(ab|ab*)bc:abc
1020:a([bc]*)c*:abc
1030:a([bc]*)(c*d):abcd
1040:a([bc]+)(c*d):abcd
1050:a([bc]*)(c+d):abcd
1060:a[bcd]*dcdcde:adcdcde
1071:a[bcd]+dcdcde:adcdcde
1080:(ab|a)b*c:abc
1090:((a)(b)c)(d):abcd
1100:[A-Za-z_][A-Za-z0-9_]*:alpha
1110:^a(bc+|b[eh])g|.h$:abh
1120:(bc+d$|ef*g.|h?i(j|k)):effgz
1130:(bc+d$|ef*g.|h?i(j|k)):ij
1141:(bc+d$|ef*g.|h?i(j|k)):effg
1151:(bc+d$|ef*g.|h?i(j|k)):bcdd
1160:(bc+d$|ef*g.|h?i(j|k)):reffgz
1171:((((((((((a)))))))))):-
1180:(((((((((a))))))))):a
1191:multiple words of text:uh-uh
1200:multiple words:multiple words, yeah
1210:(.*)c(.*):abcde
1221:\((.*),:(.*)\)
1231:[k]:ab
1240:abcd:abcd
1250:a(bc)d:abcd
1260:a[-]?c:ac
1270:(....).*\1:beriberi
1280:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Qaddafi
1290:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mo'ammar Gadhafi
1300:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Kaddafi
1310:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Qadhafi
1320:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Moammar El Kadhafi
1330:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Gadafi
1340:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mu'ammar al-Qadafi
1350:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Moamer El Kazzafi
1360:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Moamar al-Gaddafi
1370:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mu'ammar Al Qathafi
1380:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Al Qathafi
1390:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mo'ammar el-Gadhafi
1400:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Moamar El Kadhafi
1410:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar al-Qadhafi
1420:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mu'ammar al-Qadhdhafi
1430:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mu'ammar Qadafi
1440:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Moamar Gaddafi
1450:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mu'ammar Qadhdhafi
1460:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Khaddafi
1470:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar al-Khaddafi
1480:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mu'amar al-Kadafi
1490:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Ghaddafy
1500:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Ghadafi
1510:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Ghaddafi
1520:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muamar Kaddafi
1530:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Quathafi
1540:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muammar Gheddafi
1550:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Muamar Al-Kaddafi
1560:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Moammar Khadafy
1570:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Moammar Qudhafi
1580:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mu'ammar al-Qaddafi
1590:M[ou]'?am+[ae]r .*([AEae]l[- ])?[GKQ]h?[aeu]+([dtz][dhz]?)+af[iy]:Mulazim Awwal Mu'ammar Muhammad Abu Minyar al-Qadhafi
1600:[[:digit:]]+:01234
1611:[[:alpha:]]+:01234
1620:^[[:digit:]]*$:01234
1631:^[[:digit:]]*$:01234a
1640:^[[:alnum:]]*$:01234a
1650:^[[:xdigit:]]*$:01234a
1661:^[[:xdigit:]]*$:01234g
1670:^[[:alnum:][:space:]]*$:Hello world