/[pcre]/code/trunk/testdata/testinput1
ViewVC logotype

Contents of /code/trunk/testdata/testinput1

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1510 - (show annotations) (download)
Wed Nov 5 15:08:03 2014 UTC (6 weeks ago) by ph10
File size: 99494 byte(s)
Fix bug when there are unset groups prior to (*ACCEPT) within a capturing 
group.

1 /-- This set of tests is for features that are compatible with all versions of
2 Perl >= 5.10, in non-UTF-8 mode. It should run clean for the 8-bit, 16-bit,
3 and 32-bit PCRE libraries. --/
4
5 < forbid 89?=ABCDEFfGILMNPTUWXZ<
6
7 /the quick brown fox/
8 the quick brown fox
9 The quick brown FOX
10 What do you know about the quick brown fox?
11 What do you know about THE QUICK BROWN FOX?
12
13 /The quick brown fox/i
14 the quick brown fox
15 The quick brown FOX
16 What do you know about the quick brown fox?
17 What do you know about THE QUICK BROWN FOX?
18
19 /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
20 abcd\t\n\r\f\a\e9;\$\\?caxyz
21
22 /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
23 abxyzpqrrrabbxyyyypqAzz
24 abxyzpqrrrabbxyyyypqAzz
25 aabxyzpqrrrabbxyyyypqAzz
26 aaabxyzpqrrrabbxyyyypqAzz
27 aaaabxyzpqrrrabbxyyyypqAzz
28 abcxyzpqrrrabbxyyyypqAzz
29 aabcxyzpqrrrabbxyyyypqAzz
30 aaabcxyzpqrrrabbxyyyypAzz
31 aaabcxyzpqrrrabbxyyyypqAzz
32 aaabcxyzpqrrrabbxyyyypqqAzz
33 aaabcxyzpqrrrabbxyyyypqqqAzz
34 aaabcxyzpqrrrabbxyyyypqqqqAzz
35 aaabcxyzpqrrrabbxyyyypqqqqqAzz
36 aaabcxyzpqrrrabbxyyyypqqqqqqAzz
37 aaaabcxyzpqrrrabbxyyyypqAzz
38 abxyzzpqrrrabbxyyyypqAzz
39 aabxyzzzpqrrrabbxyyyypqAzz
40 aaabxyzzzzpqrrrabbxyyyypqAzz
41 aaaabxyzzzzpqrrrabbxyyyypqAzz
42 abcxyzzpqrrrabbxyyyypqAzz
43 aabcxyzzzpqrrrabbxyyyypqAzz
44 aaabcxyzzzzpqrrrabbxyyyypqAzz
45 aaaabcxyzzzzpqrrrabbxyyyypqAzz
46 aaaabcxyzzzzpqrrrabbbxyyyypqAzz
47 aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
48 aaabcxyzpqrrrabbxyyyypABzz
49 aaabcxyzpqrrrabbxyyyypABBzz
50 >>>aaabxyzpqrrrabbxyyyypqAzz
51 >aaaabxyzpqrrrabbxyyyypqAzz
52 >>>>abcxyzpqrrrabbxyyyypqAzz
53 *** Failers
54 abxyzpqrrabbxyyyypqAzz
55 abxyzpqrrrrabbxyyyypqAzz
56 abxyzpqrrrabxyyyypqAzz
57 aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
58 aaaabcxyzzzzpqrrrabbbxyyypqAzz
59 aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
60
61 /^(abc){1,2}zz/
62 abczz
63 abcabczz
64 *** Failers
65 zz
66 abcabcabczz
67 >>abczz
68
69 /^(b+?|a){1,2}?c/
70 bc
71 bbc
72 bbbc
73 bac
74 bbac
75 aac
76 abbbbbbbbbbbc
77 bbbbbbbbbbbac
78 *** Failers
79 aaac
80 abbbbbbbbbbbac
81
82 /^(b+|a){1,2}c/
83 bc
84 bbc
85 bbbc
86 bac
87 bbac
88 aac
89 abbbbbbbbbbbc
90 bbbbbbbbbbbac
91 *** Failers
92 aaac
93 abbbbbbbbbbbac
94
95 /^(b+|a){1,2}?bc/
96 bbc
97
98 /^(b*|ba){1,2}?bc/
99 babc
100 bbabc
101 bababc
102 *** Failers
103 bababbc
104 babababc
105
106 /^(ba|b*){1,2}?bc/
107 babc
108 bbabc
109 bababc
110 *** Failers
111 bababbc
112 babababc
113
114 /^\ca\cA\c[;\c:/
115 \x01\x01\e;z
116
117 /^[ab\]cde]/
118 athing
119 bthing
120 ]thing
121 cthing
122 dthing
123 ething
124 *** Failers
125 fthing
126 [thing
127 \\thing
128
129 /^[]cde]/
130 ]thing
131 cthing
132 dthing
133 ething
134 *** Failers
135 athing
136 fthing
137
138 /^[^ab\]cde]/
139 fthing
140 [thing
141 \\thing
142 *** Failers
143 athing
144 bthing
145 ]thing
146 cthing
147 dthing
148 ething
149
150 /^[^]cde]/
151 athing
152 fthing
153 *** Failers
154 ]thing
155 cthing
156 dthing
157 ething
158
159 /^\/
160
161
162 /^/
163
164
165 /^[0-9]+$/
166 0
167 1
168 2
169 3
170 4
171 5
172 6
173 7
174 8
175 9
176 10
177 100
178 *** Failers
179 abc
180
181 /^.*nter/
182 enter
183 inter
184 uponter
185
186 /^xxx[0-9]+$/
187 xxx0
188 xxx1234
189 *** Failers
190 xxx
191
192 /^.+[0-9][0-9][0-9]$/
193 x123
194 xx123
195 123456
196 *** Failers
197 123
198 x1234
199
200 /^.+?[0-9][0-9][0-9]$/
201 x123
202 xx123
203 123456
204 *** Failers
205 123
206 x1234
207
208 /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
209 abc!pqr=apquxz.ixr.zzz.ac.uk
210 *** Failers
211 !pqr=apquxz.ixr.zzz.ac.uk
212 abc!=apquxz.ixr.zzz.ac.uk
213 abc!pqr=apquxz:ixr.zzz.ac.uk
214 abc!pqr=apquxz.ixr.zzz.ac.ukk
215
216 /:/
217 Well, we need a colon: somewhere
218 *** Fail if we don't
219
220 /([\da-f:]+)$/i
221 0abc
222 abc
223 fed
224 E
225 ::
226 5f03:12C0::932e
227 fed def
228 Any old stuff
229 *** Failers
230 0zzz
231 gzzz
232 fed\x20
233 Any old rubbish
234
235 /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
236 .1.2.3
237 A.12.123.0
238 *** Failers
239 .1.2.3333
240 1.2.3
241 1234.2.3
242
243 /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
244 1 IN SOA non-sp1 non-sp2(
245 1 IN SOA non-sp1 non-sp2 (
246 *** Failers
247 1IN SOA non-sp1 non-sp2(
248
249 /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
250 a.
251 Z.
252 2.
253 ab-c.pq-r.
254 sxk.zzz.ac.uk.
255 x-.y-.
256 *** Failers
257 -abc.peq.
258
259 /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
260 *.a
261 *.b0-a
262 *.c3-b.c
263 *.c-a.b-c
264 *** Failers
265 *.0
266 *.a-
267 *.a-b.c-
268 *.c-a.0-c
269
270 /^(?=ab(de))(abd)(e)/
271 abde
272
273 /^(?!(ab)de|x)(abd)(f)/
274 abdf
275
276 /^(?=(ab(cd)))(ab)/
277 abcd
278
279 /^[\da-f](\.[\da-f])*$/i
280 a.b.c.d
281 A.B.C.D
282 a.b.c.1.2.3.C
283
284 /^\".*\"\s*(;.*)?$/
285 \"1234\"
286 \"abcd\" ;
287 \"\" ; rhubarb
288 *** Failers
289 \"1234\" : things
290
291 /^$/
292 \
293 *** Failers
294
295 / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
296 ab c
297 *** Failers
298 abc
299 ab cde
300
301 /(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
302 ab c
303 *** Failers
304 abc
305 ab cde
306
307 /^ a\ b[c ]d $/x
308 a bcd
309 a b d
310 *** Failers
311 abcd
312 ab d
313
314 /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
315 abcdefhijklm
316
317 /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
318 abcdefhijklm
319
320 /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
321 a+ Z0+\x08\n\x1d\x12
322
323 /^[.^$|()*+?{,}]+/
324 .^\$(*+)|{?,?}
325
326 /^a*\w/
327 z
328 az
329 aaaz
330 a
331 aa
332 aaaa
333 a+
334 aa+
335
336 /^a*?\w/
337 z
338 az
339 aaaz
340 a
341 aa
342 aaaa
343 a+
344 aa+
345
346 /^a+\w/
347 az
348 aaaz
349 aa
350 aaaa
351 aa+
352
353 /^a+?\w/
354 az
355 aaaz
356 aa
357 aaaa
358 aa+
359
360 /^\d{8}\w{2,}/
361 1234567890
362 12345678ab
363 12345678__
364 *** Failers
365 1234567
366
367 /^[aeiou\d]{4,5}$/
368 uoie
369 1234
370 12345
371 aaaaa
372 *** Failers
373 123456
374
375 /^[aeiou\d]{4,5}?/
376 uoie
377 1234
378 12345
379 aaaaa
380 123456
381
382 /\A(abc|def)=(\1){2,3}\Z/
383 abc=abcabc
384 def=defdefdef
385 *** Failers
386 abc=defdef
387
388 /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
389 abcdefghijkcda2
390 abcdefghijkkkkcda2
391
392 /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
393 cataract cataract23
394 catatonic catatonic23
395 caterpillar caterpillar23
396
397
398 /^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]/
399 From abcd Mon Sep 01 12:33:02 1997
400
401 /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
402 From abcd Mon Sep 01 12:33:02 1997
403 From abcd Mon Sep 1 12:33:02 1997
404 *** Failers
405 From abcd Sep 01 12:33:02 1997
406
407 /^12.34/s
408 12\n34
409 12\r34
410
411 /\w+(?=\t)/
412 the quick brown\t fox
413
414 /foo(?!bar)(.*)/
415 foobar is foolish see?
416
417 /(?:(?!foo)...|^.{0,2})bar(.*)/
418 foobar crowbar etc
419 barrel
420 2barrel
421 A barrel
422
423 /^(\D*)(?=\d)(?!123)/
424 abc456
425 *** Failers
426 abc123
427
428 /^1234(?# test newlines
429 inside)/
430 1234
431
432 /^1234 #comment in extended re
433 /x
434 1234
435
436 /#rhubarb
437 abcd/x
438 abcd
439
440 /^abcd#rhubarb/x
441 abcd
442
443 /^(a)\1{2,3}(.)/
444 aaab
445 aaaab
446 aaaaab
447 aaaaaab
448
449 /(?!^)abc/
450 the abc
451 *** Failers
452 abc
453
454 /(?=^)abc/
455 abc
456 *** Failers
457 the abc
458
459 /^[ab]{1,3}(ab*|b)/
460 aabbbbb
461
462 /^[ab]{1,3}?(ab*|b)/
463 aabbbbb
464
465 /^[ab]{1,3}?(ab*?|b)/
466 aabbbbb
467
468 /^[ab]{1,3}(ab*?|b)/
469 aabbbbb
470
471 / (?: [\040\t] | \(
472 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
473 \) )* # optional leading comment
474 (?: (?:
475 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
476 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
477 |
478 " (?: # opening quote...
479 [^\\\x80-\xff\n\015"] # Anything except backslash and quote
480 | # or
481 \\ [^\x80-\xff] # Escaped something (something != CR)
482 )* " # closing quote
483 ) # initial word
484 (?: (?: [\040\t] | \(
485 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
486 \) )* \. (?: [\040\t] | \(
487 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
488 \) )* (?:
489 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
490 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
491 |
492 " (?: # opening quote...
493 [^\\\x80-\xff\n\015"] # Anything except backslash and quote
494 | # or
495 \\ [^\x80-\xff] # Escaped something (something != CR)
496 )* " # closing quote
497 ) )* # further okay, if led by a period
498 (?: [\040\t] | \(
499 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
500 \) )* @ (?: [\040\t] | \(
501 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
502 \) )* (?:
503 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
504 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
505 | \[ # [
506 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
507 \] # ]
508 ) # initial subdomain
509 (?: #
510 (?: [\040\t] | \(
511 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
512 \) )* \. # if led by a period...
513 (?: [\040\t] | \(
514 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
515 \) )* (?:
516 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
517 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
518 | \[ # [
519 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
520 \] # ]
521 ) # ...further okay
522 )*
523 # address
524 | # or
525 (?:
526 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
527 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
528 |
529 " (?: # opening quote...
530 [^\\\x80-\xff\n\015"] # Anything except backslash and quote
531 | # or
532 \\ [^\x80-\xff] # Escaped something (something != CR)
533 )* " # closing quote
534 ) # one word, optionally followed by....
535 (?:
536 [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
537 \(
538 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
539 \) | # comments, or...
540
541 " (?: # opening quote...
542 [^\\\x80-\xff\n\015"] # Anything except backslash and quote
543 | # or
544 \\ [^\x80-\xff] # Escaped something (something != CR)
545 )* " # closing quote
546 # quoted strings
547 )*
548 < (?: [\040\t] | \(
549 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
550 \) )* # leading <
551 (?: @ (?: [\040\t] | \(
552 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
553 \) )* (?:
554 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
555 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
556 | \[ # [
557 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
558 \] # ]
559 ) # initial subdomain
560 (?: #
561 (?: [\040\t] | \(
562 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
563 \) )* \. # if led by a period...
564 (?: [\040\t] | \(
565 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
566 \) )* (?:
567 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
568 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
569 | \[ # [
570 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
571 \] # ]
572 ) # ...further okay
573 )*
574
575 (?: (?: [\040\t] | \(
576 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
577 \) )* , (?: [\040\t] | \(
578 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
579 \) )* @ (?: [\040\t] | \(
580 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
581 \) )* (?:
582 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
583 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
584 | \[ # [
585 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
586 \] # ]
587 ) # initial subdomain
588 (?: #
589 (?: [\040\t] | \(
590 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
591 \) )* \. # if led by a period...
592 (?: [\040\t] | \(
593 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
594 \) )* (?:
595 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
596 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
597 | \[ # [
598 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
599 \] # ]
600 ) # ...further okay
601 )*
602 )* # further okay, if led by comma
603 : # closing colon
604 (?: [\040\t] | \(
605 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
606 \) )* )? # optional route
607 (?:
608 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
609 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
610 |
611 " (?: # opening quote...
612 [^\\\x80-\xff\n\015"] # Anything except backslash and quote
613 | # or
614 \\ [^\x80-\xff] # Escaped something (something != CR)
615 )* " # closing quote
616 ) # initial word
617 (?: (?: [\040\t] | \(
618 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
619 \) )* \. (?: [\040\t] | \(
620 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
621 \) )* (?:
622 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
623 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
624 |
625 " (?: # opening quote...
626 [^\\\x80-\xff\n\015"] # Anything except backslash and quote
627 | # or
628 \\ [^\x80-\xff] # Escaped something (something != CR)
629 )* " # closing quote
630 ) )* # further okay, if led by a period
631 (?: [\040\t] | \(
632 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
633 \) )* @ (?: [\040\t] | \(
634 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
635 \) )* (?:
636 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
637 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
638 | \[ # [
639 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
640 \] # ]
641 ) # initial subdomain
642 (?: #
643 (?: [\040\t] | \(
644 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
645 \) )* \. # if led by a period...
646 (?: [\040\t] | \(
647 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
648 \) )* (?:
649 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
650 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
651 | \[ # [
652 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
653 \] # ]
654 ) # ...further okay
655 )*
656 # address spec
657 (?: [\040\t] | \(
658 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
659 \) )* > # trailing >
660 # name and address
661 ) (?: [\040\t] | \(
662 (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
663 \) )* # optional trailing comment
664 /x
665 Alan Other <user\@dom.ain>
666 <user\@dom.ain>
667 user\@dom.ain
668 \"A. Other\" <user.1234\@dom.ain> (a comment)
669 A. Other <user.1234\@dom.ain> (a comment)
670 \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
671 A missing angle <user\@some.where
672 *** Failers
673 The quick brown fox
674
675 /[\040\t]* # Nab whitespace.
676 (?:
677 \( # (
678 [^\\\x80-\xff\n\015()] * # normal*
679 (?: # (
680 (?: \\ [^\x80-\xff] |
681 \( # (
682 [^\\\x80-\xff\n\015()] * # normal*
683 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
684 \) # )
685 ) # special
686 [^\\\x80-\xff\n\015()] * # normal*
687 )* # )*
688 \) # )
689 [\040\t]* )* # If comment found, allow more spaces.
690 # optional leading comment
691 (?:
692 (?:
693 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
694 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
695 # Atom
696 | # or
697 " # "
698 [^\\\x80-\xff\n\015"] * # normal
699 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
700 " # "
701 # Quoted string
702 )
703 [\040\t]* # Nab whitespace.
704 (?:
705 \( # (
706 [^\\\x80-\xff\n\015()] * # normal*
707 (?: # (
708 (?: \\ [^\x80-\xff] |
709 \( # (
710 [^\\\x80-\xff\n\015()] * # normal*
711 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
712 \) # )
713 ) # special
714 [^\\\x80-\xff\n\015()] * # normal*
715 )* # )*
716 \) # )
717 [\040\t]* )* # If comment found, allow more spaces.
718 (?:
719 \.
720 [\040\t]* # Nab whitespace.
721 (?:
722 \( # (
723 [^\\\x80-\xff\n\015()] * # normal*
724 (?: # (
725 (?: \\ [^\x80-\xff] |
726 \( # (
727 [^\\\x80-\xff\n\015()] * # normal*
728 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
729 \) # )
730 ) # special
731 [^\\\x80-\xff\n\015()] * # normal*
732 )* # )*
733 \) # )
734 [\040\t]* )* # If comment found, allow more spaces.
735 (?:
736 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
737 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
738 # Atom
739 | # or
740 " # "
741 [^\\\x80-\xff\n\015"] * # normal
742 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
743 " # "
744 # Quoted string
745 )
746 [\040\t]* # Nab whitespace.
747 (?:
748 \( # (
749 [^\\\x80-\xff\n\015()] * # normal*
750 (?: # (
751 (?: \\ [^\x80-\xff] |
752 \( # (
753 [^\\\x80-\xff\n\015()] * # normal*
754 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
755 \) # )
756 ) # special
757 [^\\\x80-\xff\n\015()] * # normal*
758 )* # )*
759 \) # )
760 [\040\t]* )* # If comment found, allow more spaces.
761 # additional words
762 )*
763 @
764 [\040\t]* # Nab whitespace.
765 (?:
766 \( # (
767 [^\\\x80-\xff\n\015()] * # normal*
768 (?: # (
769 (?: \\ [^\x80-\xff] |
770 \( # (
771 [^\\\x80-\xff\n\015()] * # normal*
772 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
773 \) # )
774 ) # special
775 [^\\\x80-\xff\n\015()] * # normal*
776 )* # )*
777 \) # )
778 [\040\t]* )* # If comment found, allow more spaces.
779 (?:
780 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
781 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
782 |
783 \[ # [
784 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
785 \] # ]
786 )
787 [\040\t]* # Nab whitespace.
788 (?:
789 \( # (
790 [^\\\x80-\xff\n\015()] * # normal*
791 (?: # (
792 (?: \\ [^\x80-\xff] |
793 \( # (
794 [^\\\x80-\xff\n\015()] * # normal*
795 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
796 \) # )
797 ) # special
798 [^\\\x80-\xff\n\015()] * # normal*
799 )* # )*
800 \) # )
801 [\040\t]* )* # If comment found, allow more spaces.
802 # optional trailing comments
803 (?:
804 \.
805 [\040\t]* # Nab whitespace.
806 (?:
807 \( # (
808 [^\\\x80-\xff\n\015()] * # normal*
809 (?: # (
810 (?: \\ [^\x80-\xff] |
811 \( # (
812 [^\\\x80-\xff\n\015()] * # normal*
813 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
814 \) # )
815 ) # special
816 [^\\\x80-\xff\n\015()] * # normal*
817 )* # )*
818 \) # )
819 [\040\t]* )* # If comment found, allow more spaces.
820 (?:
821 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
822 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
823 |
824 \[ # [
825 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
826 \] # ]
827 )
828 [\040\t]* # Nab whitespace.
829 (?:
830 \( # (
831 [^\\\x80-\xff\n\015()] * # normal*
832 (?: # (
833 (?: \\ [^\x80-\xff] |
834 \( # (
835 [^\\\x80-\xff\n\015()] * # normal*
836 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
837 \) # )
838 ) # special
839 [^\\\x80-\xff\n\015()] * # normal*
840 )* # )*
841 \) # )
842 [\040\t]* )* # If comment found, allow more spaces.
843 # optional trailing comments
844 )*
845 # address
846 | # or
847 (?:
848 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
849 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
850 # Atom
851 | # or
852 " # "
853 [^\\\x80-\xff\n\015"] * # normal
854 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
855 " # "
856 # Quoted string
857 )
858 # leading word
859 [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
860 (?:
861 (?:
862 \( # (
863 [^\\\x80-\xff\n\015()] * # normal*
864 (?: # (
865 (?: \\ [^\x80-\xff] |
866 \( # (
867 [^\\\x80-\xff\n\015()] * # normal*
868 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
869 \) # )
870 ) # special
871 [^\\\x80-\xff\n\015()] * # normal*
872 )* # )*
873 \) # )
874 |
875 " # "
876 [^\\\x80-\xff\n\015"] * # normal
877 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
878 " # "
879 ) # "special" comment or quoted string
880 [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
881 )*
882 <
883 [\040\t]* # Nab whitespace.
884 (?:
885 \( # (
886 [^\\\x80-\xff\n\015()] * # normal*
887 (?: # (
888 (?: \\ [^\x80-\xff] |
889 \( # (
890 [^\\\x80-\xff\n\015()] * # normal*
891 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
892 \) # )
893 ) # special
894 [^\\\x80-\xff\n\015()] * # normal*
895 )* # )*
896 \) # )
897 [\040\t]* )* # If comment found, allow more spaces.
898 # <
899 (?:
900 @
901 [\040\t]* # Nab whitespace.
902 (?:
903 \( # (
904 [^\\\x80-\xff\n\015()] * # normal*
905 (?: # (
906 (?: \\ [^\x80-\xff] |
907 \( # (
908 [^\\\x80-\xff\n\015()] * # normal*
909 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
910 \) # )
911 ) # special
912 [^\\\x80-\xff\n\015()] * # normal*
913 )* # )*
914 \) # )
915 [\040\t]* )* # If comment found, allow more spaces.
916 (?:
917 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
918 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
919 |
920 \[ # [
921 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
922 \] # ]
923 )
924 [\040\t]* # Nab whitespace.
925 (?:
926 \( # (
927 [^\\\x80-\xff\n\015()] * # normal*
928 (?: # (
929 (?: \\ [^\x80-\xff] |
930 \( # (
931 [^\\\x80-\xff\n\015()] * # normal*
932 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
933 \) # )
934 ) # special
935 [^\\\x80-\xff\n\015()] * # normal*
936 )* # )*
937 \) # )
938 [\040\t]* )* # If comment found, allow more spaces.
939 # optional trailing comments
940 (?:
941 \.
942 [\040\t]* # Nab whitespace.
943 (?:
944 \( # (
945 [^\\\x80-\xff\n\015()] * # normal*
946 (?: # (
947 (?: \\ [^\x80-\xff] |
948 \( # (
949 [^\\\x80-\xff\n\015()] * # normal*
950 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
951 \) # )
952 ) # special
953 [^\\\x80-\xff\n\015()] * # normal*
954 )* # )*
955 \) # )
956 [\040\t]* )* # If comment found, allow more spaces.
957 (?:
958 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
959 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
960 |
961 \[ # [
962 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
963 \] # ]
964 )
965 [\040\t]* # Nab whitespace.
966 (?:
967 \( # (
968 [^\\\x80-\xff\n\015()] * # normal*
969 (?: # (
970 (?: \\ [^\x80-\xff] |
971 \( # (
972 [^\\\x80-\xff\n\015()] * # normal*
973 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
974 \) # )
975 ) # special
976 [^\\\x80-\xff\n\015()] * # normal*
977 )* # )*
978 \) # )
979 [\040\t]* )* # If comment found, allow more spaces.
980 # optional trailing comments
981 )*
982 (?: ,
983 [\040\t]* # Nab whitespace.
984 (?:
985 \( # (
986 [^\\\x80-\xff\n\015()] * # normal*
987 (?: # (
988 (?: \\ [^\x80-\xff] |
989 \( # (
990 [^\\\x80-\xff\n\015()] * # normal*
991 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
992 \) # )
993 ) # special
994 [^\\\x80-\xff\n\015()] * # normal*
995 )* # )*
996 \) # )
997 [\040\t]* )* # If comment found, allow more spaces.
998 @
999 [\040\t]* # Nab whitespace.
1000 (?:
1001 \( # (
1002 [^\\\x80-\xff\n\015()] * # normal*
1003 (?: # (
1004 (?: \\ [^\x80-\xff] |
1005 \( # (
1006 [^\\\x80-\xff\n\015()] * # normal*
1007 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1008 \) # )
1009 ) # special
1010 [^\\\x80-\xff\n\015()] * # normal*
1011 )* # )*
1012 \) # )
1013 [\040\t]* )* # If comment found, allow more spaces.
1014 (?:
1015 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1016 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1017 |
1018 \[ # [
1019 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1020 \] # ]
1021 )
1022 [\040\t]* # Nab whitespace.
1023 (?:
1024 \( # (
1025 [^\\\x80-\xff\n\015()] * # normal*
1026 (?: # (
1027 (?: \\ [^\x80-\xff] |
1028 \( # (
1029 [^\\\x80-\xff\n\015()] * # normal*
1030 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1031 \) # )
1032 ) # special
1033 [^\\\x80-\xff\n\015()] * # normal*
1034 )* # )*
1035 \) # )
1036 [\040\t]* )* # If comment found, allow more spaces.
1037 # optional trailing comments
1038 (?:
1039 \.
1040 [\040\t]* # Nab whitespace.
1041 (?:
1042 \( # (
1043 [^\\\x80-\xff\n\015()] * # normal*
1044 (?: # (
1045 (?: \\ [^\x80-\xff] |
1046 \( # (
1047 [^\\\x80-\xff\n\015()] * # normal*
1048 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1049 \) # )
1050 ) # special
1051 [^\\\x80-\xff\n\015()] * # normal*
1052 )* # )*
1053 \) # )
1054 [\040\t]* )* # If comment found, allow more spaces.
1055 (?:
1056 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1057 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1058 |
1059 \[ # [
1060 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1061 \] # ]
1062 )
1063 [\040\t]* # Nab whitespace.
1064 (?:
1065 \( # (
1066 [^\\\x80-\xff\n\015()] * # normal*
1067 (?: # (
1068 (?: \\ [^\x80-\xff] |
1069 \( # (
1070 [^\\\x80-\xff\n\015()] * # normal*
1071 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1072 \) # )
1073 ) # special
1074 [^\\\x80-\xff\n\015()] * # normal*
1075 )* # )*
1076 \) # )
1077 [\040\t]* )* # If comment found, allow more spaces.
1078 # optional trailing comments
1079 )*
1080 )* # additional domains
1081 :
1082 [\040\t]* # Nab whitespace.
1083 (?:
1084 \( # (
1085 [^\\\x80-\xff\n\015()] * # normal*
1086 (?: # (
1087 (?: \\ [^\x80-\xff] |
1088 \( # (
1089 [^\\\x80-\xff\n\015()] * # normal*
1090 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1091 \) # )
1092 ) # special
1093 [^\\\x80-\xff\n\015()] * # normal*
1094 )* # )*
1095 \) # )
1096 [\040\t]* )* # If comment found, allow more spaces.
1097 # optional trailing comments
1098 )? # optional route
1099 (?:
1100 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1101 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1102 # Atom
1103 | # or
1104 " # "
1105 [^\\\x80-\xff\n\015"] * # normal
1106 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1107 " # "
1108 # Quoted string
1109 )
1110 [\040\t]* # Nab whitespace.
1111 (?:
1112 \( # (
1113 [^\\\x80-\xff\n\015()] * # normal*
1114 (?: # (
1115 (?: \\ [^\x80-\xff] |
1116 \( # (
1117 [^\\\x80-\xff\n\015()] * # normal*
1118 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1119 \) # )
1120 ) # special
1121 [^\\\x80-\xff\n\015()] * # normal*
1122 )* # )*
1123 \) # )
1124 [\040\t]* )* # If comment found, allow more spaces.
1125 (?:
1126 \.
1127 [\040\t]* # Nab whitespace.
1128 (?:
1129 \( # (
1130 [^\\\x80-\xff\n\015()] * # normal*
1131 (?: # (
1132 (?: \\ [^\x80-\xff] |
1133 \( # (
1134 [^\\\x80-\xff\n\015()] * # normal*
1135 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1136 \) # )
1137 ) # special
1138 [^\\\x80-\xff\n\015()] * # normal*
1139 )* # )*
1140 \) # )
1141 [\040\t]* )* # If comment found, allow more spaces.
1142 (?:
1143 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1144 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1145 # Atom
1146 | # or
1147 " # "
1148 [^\\\x80-\xff\n\015"] * # normal
1149 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1150 " # "
1151 # Quoted string
1152 )
1153 [\040\t]* # Nab whitespace.
1154 (?:
1155 \( # (
1156 [^\\\x80-\xff\n\015()] * # normal*
1157 (?: # (
1158 (?: \\ [^\x80-\xff] |
1159 \( # (
1160 [^\\\x80-\xff\n\015()] * # normal*
1161 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1162 \) # )
1163 ) # special
1164 [^\\\x80-\xff\n\015()] * # normal*
1165 )* # )*
1166 \) # )
1167 [\040\t]* )* # If comment found, allow more spaces.
1168 # additional words
1169 )*
1170 @
1171 [\040\t]* # Nab whitespace.
1172 (?:
1173 \( # (
1174 [^\\\x80-\xff\n\015()] * # normal*
1175 (?: # (
1176 (?: \\ [^\x80-\xff] |
1177 \( # (
1178 [^\\\x80-\xff\n\015()] * # normal*
1179 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1180 \) # )
1181 ) # special
1182 [^\\\x80-\xff\n\015()] * # normal*
1183 )* # )*
1184 \) # )
1185 [\040\t]* )* # If comment found, allow more spaces.
1186 (?:
1187 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1188 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1189 |
1190 \[ # [
1191 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1192 \] # ]
1193 )
1194 [\040\t]* # Nab whitespace.
1195 (?:
1196 \( # (
1197 [^\\\x80-\xff\n\015()] * # normal*
1198 (?: # (
1199 (?: \\ [^\x80-\xff] |
1200 \( # (
1201 [^\\\x80-\xff\n\015()] * # normal*
1202 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1203 \) # )
1204 ) # special
1205 [^\\\x80-\xff\n\015()] * # normal*
1206 )* # )*
1207 \) # )
1208 [\040\t]* )* # If comment found, allow more spaces.
1209 # optional trailing comments
1210 (?:
1211 \.
1212 [\040\t]* # Nab whitespace.
1213 (?:
1214 \( # (
1215 [^\\\x80-\xff\n\015()] * # normal*
1216 (?: # (
1217 (?: \\ [^\x80-\xff] |
1218 \( # (
1219 [^\\\x80-\xff\n\015()] * # normal*
1220 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1221 \) # )
1222 ) # special
1223 [^\\\x80-\xff\n\015()] * # normal*
1224 )* # )*
1225 \) # )
1226 [\040\t]* )* # If comment found, allow more spaces.
1227 (?:
1228 [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1229 (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1230 |
1231 \[ # [
1232 (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1233 \] # ]
1234 )
1235 [\040\t]* # Nab whitespace.
1236 (?:
1237 \( # (
1238 [^\\\x80-\xff\n\015()] * # normal*
1239 (?: # (
1240 (?: \\ [^\x80-\xff] |
1241 \( # (
1242 [^\\\x80-\xff\n\015()] * # normal*
1243 (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1244 \) # )
1245 ) # special
1246 [^\\\x80-\xff\n\015()] * # normal*
1247 )* # )*
1248 \) # )
1249 [\040\t]* )* # If comment found, allow more spaces.
1250 # optional trailing comments
1251 )*
1252 # address spec
1253 > # >
1254 # name and address
1255 )
1256 /x
1257 Alan Other <user\@dom.ain>
1258 <user\@dom.ain>
1259 user\@dom.ain
1260 \"A. Other\" <user.1234\@dom.ain> (a comment)
1261 A. Other <user.1234\@dom.ain> (a comment)
1262 \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1263 A missing angle <user\@some.where
1264 *** Failers
1265 The quick brown fox
1266
1267 /abc\0def\00pqr\000xyz\0000AB/
1268 abc\0def\00pqr\000xyz\0000AB
1269 abc456 abc\0def\00pqr\000xyz\0000ABCDE
1270
1271 /abc\x0def\x00pqr\x000xyz\x0000AB/
1272 abc\x0def\x00pqr\x000xyz\x0000AB
1273 abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
1274
1275 /^[\000-\037]/
1276 \0A
1277 \01B
1278 \037C
1279
1280 /\0*/
1281 \0\0\0\0
1282
1283 /A\x0{2,3}Z/
1284 The A\x0\x0Z
1285 An A\0\x0\0Z
1286 *** Failers
1287 A\0Z
1288 A\0\x0\0\x0Z
1289
1290 /^(cow|)\1(bell)/
1291 cowcowbell
1292 bell
1293 *** Failers
1294 cowbell
1295
1296 /^\s/
1297 \040abc
1298 \x0cabc
1299 \nabc
1300 \rabc
1301 \tabc
1302 *** Failers
1303 abc
1304
1305 /^a b
1306 c/x
1307 abc
1308
1309 /^(a|)\1*b/
1310 ab
1311 aaaab
1312 b
1313 *** Failers
1314 acb
1315
1316 /^(a|)\1+b/
1317 aab
1318 aaaab
1319 b
1320 *** Failers
1321 ab
1322
1323 /^(a|)\1?b/
1324 ab
1325 aab
1326 b
1327 *** Failers
1328 acb
1329
1330 /^(a|)\1{2}b/
1331 aaab
1332 b
1333 *** Failers
1334 ab
1335 aab
1336 aaaab
1337
1338 /^(a|)\1{2,3}b/
1339 aaab
1340 aaaab
1341 b
1342 *** Failers
1343 ab
1344 aab
1345 aaaaab
1346
1347 /ab{1,3}bc/
1348 abbbbc
1349 abbbc
1350 abbc
1351 *** Failers
1352 abc
1353 abbbbbc
1354
1355 /([^.]*)\.([^:]*):[T ]+(.*)/
1356 track1.title:TBlah blah blah
1357
1358 /([^.]*)\.([^:]*):[T ]+(.*)/i
1359 track1.title:TBlah blah blah
1360
1361 /([^.]*)\.([^:]*):[t ]+(.*)/i
1362 track1.title:TBlah blah blah
1363
1364 /^[W-c]+$/
1365 WXY_^abc
1366 *** Failers
1367 wxy
1368
1369 /^[W-c]+$/i
1370 WXY_^abc
1371 wxy_^ABC
1372
1373 /^[\x3f-\x5F]+$/i
1374 WXY_^abc
1375 wxy_^ABC
1376
1377 /^abc$/m
1378 abc
1379 qqq\nabc
1380 abc\nzzz
1381 qqq\nabc\nzzz
1382
1383 /^abc$/
1384 abc
1385 *** Failers
1386 qqq\nabc
1387 abc\nzzz
1388 qqq\nabc\nzzz
1389
1390 /\Aabc\Z/m
1391 abc
1392 abc\n
1393 *** Failers
1394 qqq\nabc
1395 abc\nzzz
1396 qqq\nabc\nzzz
1397
1398 /\A(.)*\Z/s
1399 abc\ndef
1400
1401 /\A(.)*\Z/m
1402 *** Failers
1403 abc\ndef
1404
1405 /(?:b)|(?::+)/
1406 b::c
1407 c::b
1408
1409 /[-az]+/
1410 az-
1411 *** Failers
1412 b
1413
1414 /[az-]+/
1415 za-
1416 *** Failers
1417 b
1418
1419 /[a\-z]+/
1420 a-z
1421 *** Failers
1422 b
1423
1424 /[a-z]+/
1425 abcdxyz
1426
1427 /[\d-]+/
1428 12-34
1429 *** Failers
1430 aaa
1431
1432 /[\d-z]+/
1433 12-34z
1434 *** Failers
1435 aaa
1436
1437 /\x5c/
1438 \\
1439
1440 /\x20Z/
1441 the Zoo
1442 *** Failers
1443 Zulu
1444
1445 /(abc)\1/i
1446 abcabc
1447 ABCabc
1448 abcABC
1449
1450 /ab{3cd/
1451 ab{3cd
1452
1453 /ab{3,cd/
1454 ab{3,cd
1455
1456 /ab{3,4a}cd/
1457 ab{3,4a}cd
1458
1459 /{4,5a}bc/
1460 {4,5a}bc
1461
1462 /abc$/
1463 abc
1464 abc\n
1465 *** Failers
1466 abc\ndef
1467
1468 /(abc)\123/
1469 abc\x53
1470
1471 /(abc)\223/
1472 abc\x93
1473
1474 /(abc)\323/
1475 abc\xd3
1476
1477 /(abc)\100/
1478 abc\x40
1479 abc\100
1480
1481 /(abc)\1000/
1482 abc\x400
1483 abc\x40\x30
1484 abc\1000
1485 abc\100\x30
1486 abc\100\060
1487 abc\100\60
1488
1489 /^A\8B\9C$/
1490 A8B9C
1491 *** Failers
1492 A\08B\09C
1493
1494 /^(A)(B)(C)(D)(E)(F)(G)(H)(I)\8\9$/
1495 ABCDEFGHIHI
1496
1497 /^[A\8B\9C]+$/
1498 A8B9C
1499 *** Failers
1500 A8B9C\x00
1501
1502 /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
1503 abcdefghijkllS
1504
1505 /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
1506 abcdefghijk\12S
1507
1508 /ab\idef/
1509 abidef
1510
1511 /a{0}bc/
1512 bc
1513
1514 /(a|(bc)){0,0}?xyz/
1515 xyz
1516
1517 /abc[\10]de/
1518 abc\010de
1519
1520 /abc[\1]de/
1521 abc\1de
1522
1523 /(abc)[\1]de/
1524 abc\1de
1525
1526 /(?s)a.b/
1527 a\nb
1528
1529 /^([^a])([^\b])([^c]*)([^d]{3,4})/
1530 baNOTccccd
1531 baNOTcccd
1532 baNOTccd
1533 bacccd
1534 *** Failers
1535 anything
1536 b\bc
1537 baccd
1538
1539 /[^a]/
1540 Abc
1541
1542 /[^a]/i
1543 Abc
1544
1545 /[^a]+/
1546 AAAaAbc
1547
1548 /[^a]+/i
1549 AAAaAbc
1550
1551 /[^a]+/
1552 bbb\nccc
1553
1554 /[^k]$/
1555 abc
1556 *** Failers
1557 abk
1558
1559 /[^k]{2,3}$/
1560 abc
1561 kbc
1562 kabc
1563 *** Failers
1564 abk
1565 akb
1566 akk
1567
1568 /^\d{8,}\@.+[^k]$/
1569 12345678\@a.b.c.d
1570 123456789\@x.y.z
1571 *** Failers
1572 12345678\@x.y.uk
1573 1234567\@a.b.c.d
1574
1575 /(a)\1{8,}/
1576 aaaaaaaaa
1577 aaaaaaaaaa
1578 *** Failers
1579 aaaaaaa
1580
1581 /[^a]/
1582 aaaabcd
1583 aaAabcd
1584
1585 /[^a]/i
1586 aaaabcd
1587 aaAabcd
1588
1589 /[^az]/
1590 aaaabcd
1591 aaAabcd
1592
1593 /[^az]/i
1594 aaaabcd
1595 aaAabcd
1596
1597 /\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
1598 \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
1599
1600 /P[^*]TAIRE[^*]{1,6}?LL/
1601 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1602
1603 /P[^*]TAIRE[^*]{1,}?LL/
1604 xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1605
1606 /(\.\d\d[1-9]?)\d+/
1607 1.230003938
1608 1.875000282
1609 1.235
1610
1611 /(\.\d\d((?=0)|\d(?=\d)))/
1612 1.230003938
1613 1.875000282
1614 *** Failers
1615 1.235
1616
1617 /a(?)b/
1618 ab
1619
1620 /\b(foo)\s+(\w+)/i
1621 Food is on the foo table
1622
1623 /foo(.*)bar/
1624 The food is under the bar in the barn.
1625
1626 /foo(.*?)bar/
1627 The food is under the bar in the barn.
1628
1629 /(.*)(\d*)/
1630 I have 2 numbers: 53147
1631
1632 /(.*)(\d+)/
1633 I have 2 numbers: 53147
1634
1635 /(.*?)(\d*)/
1636 I have 2 numbers: 53147
1637
1638 /(.*?)(\d+)/
1639 I have 2 numbers: 53147
1640
1641 /(.*)(\d+)$/
1642 I have 2 numbers: 53147
1643
1644 /(.*?)(\d+)$/
1645 I have 2 numbers: 53147
1646
1647 /(.*)\b(\d+)$/
1648 I have 2 numbers: 53147
1649
1650 /(.*\D)(\d+)$/
1651 I have 2 numbers: 53147
1652
1653 /^\D*(?!123)/
1654 ABC123
1655
1656 /^(\D*)(?=\d)(?!123)/
1657 ABC445
1658 *** Failers
1659 ABC123
1660
1661 /^[W-]46]/
1662 W46]789
1663 -46]789
1664 *** Failers
1665 Wall
1666 Zebra
1667 42
1668 [abcd]
1669 ]abcd[
1670
1671 /^[W-\]46]/
1672 W46]789
1673 Wall
1674 Zebra
1675 Xylophone
1676 42
1677 [abcd]
1678 ]abcd[
1679 \\backslash
1680 *** Failers
1681 -46]789
1682 well
1683
1684 /\d\d\/\d\d\/\d\d\d\d/
1685 01/01/2000
1686
1687 /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
1688 word cat dog elephant mussel cow horse canary baboon snake shark otherword
1689 word cat dog elephant mussel cow horse canary baboon snake shark
1690
1691 /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
1692 word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
1693
1694 /^(a){0,0}/
1695 bcd
1696 abc
1697 aab
1698
1699 /^(a){0,1}/
1700 bcd
1701 abc
1702 aab
1703
1704 /^(a){0,2}/
1705 bcd
1706 abc
1707 aab
1708
1709 /^(a){0,3}/
1710 bcd
1711 abc
1712 aab
1713 aaa
1714
1715 /^(a){0,}/
1716 bcd
1717 abc
1718 aab
1719 aaa
1720 aaaaaaaa
1721
1722 /^(a){1,1}/
1723 bcd
1724 abc
1725 aab
1726
1727 /^(a){1,2}/
1728 bcd
1729 abc
1730 aab
1731
1732 /^(a){1,3}/
1733 bcd
1734 abc
1735 aab
1736 aaa
1737
1738 /^(a){1,}/
1739 bcd
1740 abc
1741 aab
1742 aaa
1743 aaaaaaaa
1744
1745 /.*\.gif/
1746 borfle\nbib.gif\nno
1747
1748 /.{0,}\.gif/
1749 borfle\nbib.gif\nno
1750
1751 /.*\.gif/m
1752 borfle\nbib.gif\nno
1753
1754 /.*\.gif/s
1755 borfle\nbib.gif\nno
1756
1757 /.*\.gif/ms
1758 borfle\nbib.gif\nno
1759
1760 /.*$/
1761 borfle\nbib.gif\nno
1762
1763 /.*$/m
1764 borfle\nbib.gif\nno
1765
1766 /.*$/s
1767 borfle\nbib.gif\nno
1768
1769 /.*$/ms
1770 borfle\nbib.gif\nno
1771
1772 /.*$/
1773 borfle\nbib.gif\nno\n
1774
1775 /.*$/m
1776 borfle\nbib.gif\nno\n
1777
1778 /.*$/s
1779 borfle\nbib.gif\nno\n
1780
1781 /.*$/ms
1782 borfle\nbib.gif\nno\n
1783
1784 /(.*X|^B)/
1785 abcde\n1234Xyz
1786 BarFoo
1787 *** Failers
1788 abcde\nBar
1789
1790 /(.*X|^B)/m
1791 abcde\n1234Xyz
1792 BarFoo
1793 abcde\nBar
1794
1795 /(.*X|^B)/s
1796 abcde\n1234Xyz
1797 BarFoo
1798 *** Failers
1799 abcde\nBar
1800
1801 /(.*X|^B)/ms
1802 abcde\n1234Xyz
1803 BarFoo
1804 abcde\nBar
1805
1806 /(?s)(.*X|^B)/
1807 abcde\n1234Xyz
1808 BarFoo
1809 *** Failers
1810 abcde\nBar
1811
1812 /(?s:.*X|^B)/
1813 abcde\n1234Xyz
1814 BarFoo
1815 *** Failers
1816 abcde\nBar
1817
1818 /^.*B/
1819 **** Failers
1820 abc\nB
1821
1822 /(?s)^.*B/
1823 abc\nB
1824
1825 /(?m)^.*B/
1826 abc\nB
1827
1828 /(?ms)^.*B/
1829 abc\nB
1830
1831 /(?ms)^B/
1832 abc\nB
1833
1834 /(?s)B$/
1835 B\n
1836
1837 /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
1838 123456654321
1839
1840 /^\d\d\d\d\d\d\d\d\d\d\d\d/
1841 123456654321
1842
1843 /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
1844 123456654321
1845
1846 /^[abc]{12}/
1847 abcabcabcabc
1848
1849 /^[a-c]{12}/
1850 abcabcabcabc
1851
1852 /^(a|b|c){12}/
1853 abcabcabcabc
1854
1855 /^[abcdefghijklmnopqrstuvwxy0123456789]/
1856 n
1857 *** Failers
1858 z
1859
1860 /abcde{0,0}/
1861 abcd
1862 *** Failers
1863 abce
1864
1865 /ab[cd]{0,0}e/
1866 abe
1867 *** Failers
1868 abcde
1869
1870 /ab(c){0,0}d/
1871 abd
1872 *** Failers
1873 abcd
1874
1875 /a(b*)/
1876 a
1877 ab
1878 abbbb
1879 *** Failers
1880 bbbbb
1881
1882 /ab\d{0}e/
1883 abe
1884 *** Failers
1885 ab1e
1886
1887 /"([^\\"]+|\\.)*"/
1888 the \"quick\" brown fox
1889 \"the \\\"quick\\\" brown fox\"
1890
1891 /.*?/g+
1892 abc
1893
1894 /\b/g+
1895 abc
1896
1897 /\b/+g
1898 abc
1899
1900 //g
1901 abc
1902
1903 /<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
1904 <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
1905
1906 /a[^a]b/
1907 acb
1908 a\nb
1909
1910 /a.b/
1911 acb
1912 *** Failers
1913 a\nb
1914
1915 /a[^a]b/s
1916 acb
1917 a\nb
1918
1919 /a.b/s
1920 acb
1921 a\nb
1922
1923 /^(b+?|a){1,2}?c/
1924 bac
1925 bbac
1926 bbbac
1927 bbbbac
1928 bbbbbac
1929
1930 /^(b+|a){1,2}?c/
1931 bac
1932 bbac
1933 bbbac
1934 bbbbac
1935 bbbbbac
1936
1937 /(?!\A)x/m
1938 x\nb\n
1939 a\bx\n
1940
1941 /\x0{ab}/
1942 \0{ab}
1943
1944 /(A|B)*?CD/
1945 CD
1946
1947 /(A|B)*CD/
1948 CD
1949
1950 /(AB)*?\1/
1951 ABABAB
1952
1953 /(AB)*\1/
1954 ABABAB
1955
1956 /(?<!bar)foo/
1957 foo
1958 catfood
1959 arfootle
1960 rfoosh
1961 *** Failers
1962 barfoo
1963 towbarfoo
1964
1965 /\w{3}(?<!bar)foo/
1966 catfood
1967 *** Failers
1968 foo
1969 barfoo
1970 towbarfoo
1971
1972 /(?<=(foo)a)bar/
1973 fooabar
1974 *** Failers
1975 bar
1976 foobbar
1977
1978 /\Aabc\z/m
1979 abc
1980 *** Failers
1981 abc\n
1982 qqq\nabc
1983 abc\nzzz
1984 qqq\nabc\nzzz
1985
1986 "(?>.*/)foo"
1987 /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
1988
1989 "(?>.*/)foo"
1990 /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
1991
1992 /(?>(\.\d\d[1-9]?))\d+/
1993 1.230003938
1994 1.875000282
1995 *** Failers
1996 1.235
1997
1998 /^((?>\w+)|(?>\s+))*$/
1999 now is the time for all good men to come to the aid of the party
2000 *** Failers
2001 this is not a line with only words and spaces!
2002
2003 /(\d+)(\w)/
2004 12345a
2005 12345+
2006
2007 /((?>\d+))(\w)/
2008 12345a
2009 *** Failers
2010 12345+
2011
2012 /(?>a+)b/
2013 aaab
2014
2015 /((?>a+)b)/
2016 aaab
2017
2018 /(?>(a+))b/
2019 aaab
2020
2021 /(?>b)+/
2022 aaabbbccc
2023
2024 /(?>a+|b+|c+)*c/
2025 aaabbbbccccd
2026
2027 /((?>[^()]+)|\([^()]*\))+/
2028 ((abc(ade)ufh()()x
2029
2030 /\(((?>[^()]+)|\([^()]+\))+\)/
2031 (abc)
2032 (abc(def)xyz)
2033 *** Failers
2034 ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2035
2036 /a(?-i)b/i
2037 ab
2038 Ab
2039 *** Failers
2040 aB
2041 AB
2042
2043 /(a (?x)b c)d e/
2044 a bcd e
2045 *** Failers
2046 a b cd e
2047 abcd e
2048 a bcde
2049
2050 /(a b(?x)c d (?-x)e f)/
2051 a bcde f
2052 *** Failers
2053 abcdef
2054
2055 /(a(?i)b)c/
2056 abc
2057 aBc
2058 *** Failers
2059 abC
2060 aBC
2061 Abc
2062 ABc
2063 ABC
2064 AbC
2065
2066 /a(?i:b)c/
2067 abc
2068 aBc
2069 *** Failers
2070 ABC
2071 abC
2072 aBC
2073
2074 /a(?i:b)*c/
2075 aBc
2076 aBBc
2077 *** Failers
2078 aBC
2079 aBBC
2080
2081 /a(?=b(?i)c)\w\wd/
2082 abcd
2083 abCd
2084 *** Failers
2085 aBCd
2086 abcD
2087
2088 /(?s-i:more.*than).*million/i
2089 more than million
2090 more than MILLION
2091 more \n than Million
2092 *** Failers
2093 MORE THAN MILLION
2094 more \n than \n million
2095
2096 /(?:(?s-i)more.*than).*million/i
2097 more than million
2098 more than MILLION
2099 more \n than Million
2100 *** Failers
2101 MORE THAN MILLION
2102 more \n than \n million
2103
2104 /(?>a(?i)b+)+c/
2105 abc
2106 aBbc
2107 aBBc
2108 *** Failers
2109 Abc
2110 abAb
2111 abbC
2112
2113 /(?=a(?i)b)\w\wc/
2114 abc
2115 aBc
2116 *** Failers
2117 Ab
2118 abC
2119 aBC
2120
2121 /(?<=a(?i)b)(\w\w)c/
2122 abxxc
2123 aBxxc
2124 *** Failers
2125 Abxxc
2126 ABxxc
2127 abxxC
2128
2129 /(?:(a)|b)(?(1)A|B)/
2130 aA
2131 bB
2132 *** Failers
2133 aB
2134 bA
2135
2136 /^(a)?(?(1)a|b)+$/
2137 aa
2138 b
2139 bb
2140 *** Failers
2141 ab
2142
2143 /^(?(?=abc)\w{3}:|\d\d)$/
2144 abc:
2145 12
2146 *** Failers
2147 123
2148 xyz
2149
2150 /^(?(?!abc)\d\d|\w{3}:)$/
2151 abc:
2152 12
2153 *** Failers
2154 123
2155 xyz
2156
2157 /(?(?<=foo)bar|cat)/
2158 foobar
2159 cat
2160 fcat
2161 focat
2162 *** Failers
2163 foocat
2164
2165 /(?(?<!foo)cat|bar)/
2166 foobar
2167 cat
2168 fcat
2169 focat
2170 *** Failers
2171 foocat
2172
2173 /( \( )? [^()]+ (?(1) \) |) /x
2174 abcd
2175 (abcd)
2176 the quick (abcd) fox
2177 (abcd
2178
2179 /( \( )? [^()]+ (?(1) \) ) /x
2180 abcd
2181 (abcd)
2182 the quick (abcd) fox
2183 (abcd
2184
2185 /^(?(2)a|(1)(2))+$/
2186 12
2187 12a
2188 12aa
2189 *** Failers
2190 1234
2191
2192 /((?i)blah)\s+\1/
2193 blah blah
2194 BLAH BLAH
2195 Blah Blah
2196 blaH blaH
2197 *** Failers
2198 blah BLAH
2199 Blah blah
2200 blaH blah
2201
2202 /((?i)blah)\s+(?i:\1)/
2203 blah blah
2204 BLAH BLAH
2205 Blah Blah
2206 blaH blaH
2207 blah BLAH
2208 Blah blah
2209 blaH blah
2210
2211 /(?>a*)*/
2212 a
2213 aa
2214 aaaa
2215
2216 /(abc|)+/
2217 abc
2218 abcabc
2219 abcabcabc
2220 xyz
2221
2222 /([a]*)*/
2223 a
2224 aaaaa
2225
2226 /([ab]*)*/
2227 a
2228 b
2229 ababab
2230 aaaabcde
2231 bbbb
2232
2233 /([^a]*)*/
2234 b
2235 bbbb
2236 aaa
2237
2238 /([^ab]*)*/
2239 cccc
2240 abab
2241
2242 /([a]*?)*/
2243 a
2244 aaaa
2245
2246 /([ab]*?)*/
2247 a
2248 b
2249 abab
2250 baba
2251
2252 /([^a]*?)*/
2253 b
2254 bbbb
2255 aaa
2256
2257 /([^ab]*?)*/
2258 c
2259 cccc
2260 baba
2261
2262 /(?>a*)*/
2263 a
2264 aaabcde
2265
2266 /((?>a*))*/
2267 aaaaa
2268 aabbaa
2269
2270 /((?>a*?))*/
2271 aaaaa
2272 aabbaa
2273
2274 /(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
2275 12-sep-98
2276 12-09-98
2277 *** Failers
2278 sep-12-98
2279
2280 /(?<=(foo))bar\1/
2281 foobarfoo
2282 foobarfootling
2283 *** Failers
2284 foobar
2285 barfoo
2286
2287 /(?i:saturday|sunday)/
2288 saturday
2289 sunday
2290 Saturday
2291 Sunday
2292 SATURDAY
2293 SUNDAY
2294 SunDay
2295
2296 /(a(?i)bc|BB)x/
2297 abcx
2298 aBCx
2299 bbx
2300 BBx
2301 *** Failers
2302 abcX
2303 aBCX
2304 bbX
2305 BBX
2306
2307 /^([ab](?i)[cd]|[ef])/
2308 ac
2309 aC
2310 bD
2311 elephant
2312 Europe
2313 frog
2314 France
2315 *** Failers
2316 Africa
2317
2318 /^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
2319 ab
2320 aBd
2321 xy
2322 xY
2323 zebra
2324 Zambesi
2325 *** Failers
2326 aCD
2327 XY
2328
2329 /(?<=foo\n)^bar/m
2330 foo\nbar
2331 *** Failers
2332 bar
2333 baz\nbar
2334
2335 /(?<=(?<!foo)bar)baz/
2336 barbaz
2337 barbarbaz
2338 koobarbaz
2339 *** Failers
2340 baz
2341 foobarbaz
2342
2343 /The cases of aaaa and aaaaaa are missed out below because Perl does things/
2344 /differently. We know that odd, and maybe incorrect, things happen with/
2345 /recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
2346
2347 /^(a\1?){4}$/
2348 a
2349 aa
2350 aaa
2351 aaaaa
2352 aaaaaaa
2353 aaaaaaaa
2354 aaaaaaaaa
2355 aaaaaaaaaa
2356 aaaaaaaaaaa
2357 aaaaaaaaaaaa
2358 aaaaaaaaaaaaa
2359 aaaaaaaaaaaaaa
2360 aaaaaaaaaaaaaaa
2361 aaaaaaaaaaaaaaaa
2362
2363 /^(a\1?)(a\1?)(a\2?)(a\3?)$/
2364 a
2365 aa
2366 aaa
2367 aaaa
2368 aaaaa
2369 aaaaaa
2370 aaaaaaa
2371 aaaaaaaa
2372 aaaaaaaaa
2373 aaaaaaaaaa
2374 aaaaaaaaaaa
2375 aaaaaaaaaaaa
2376 aaaaaaaaaaaaa
2377 aaaaaaaaaaaaaa
2378 aaaaaaaaaaaaaaa
2379 aaaaaaaaaaaaaaaa
2380
2381 /The following tests are taken from the Perl 5.005 test suite; some of them/
2382 /are compatible with 5.004, but I'd rather not have to sort them out./
2383
2384 /abc/
2385 abc
2386 xabcy
2387 ababc
2388 *** Failers
2389 xbc
2390 axc
2391 abx
2392
2393 /ab*c/
2394 abc
2395
2396 /ab*bc/
2397 abc
2398 abbc
2399 abbbbc
2400
2401 /.{1}/
2402 abbbbc
2403
2404 /.{3,4}/
2405 abbbbc
2406
2407 /ab{0,}bc/
2408 abbbbc
2409
2410 /ab+bc/
2411 abbc
2412 *** Failers
2413 abc
2414 abq
2415
2416 /ab{1,}bc/
2417
2418 /ab+bc/
2419 abbbbc
2420
2421 /ab{1,}bc/
2422 abbbbc
2423
2424 /ab{1,3}bc/
2425 abbbbc
2426
2427 /ab{3,4}bc/
2428 abbbbc
2429
2430 /ab{4,5}bc/
2431 *** Failers
2432 abq
2433 abbbbc
2434
2435 /ab?bc/
2436 abbc
2437 abc
2438
2439 /ab{0,1}bc/
2440 abc
2441
2442 /ab?bc/
2443
2444 /ab?c/
2445 abc
2446
2447 /ab{0,1}c/
2448 abc
2449
2450 /^abc$/
2451 abc
2452 *** Failers
2453 abbbbc
2454 abcc
2455
2456 /^abc/
2457 abcc
2458
2459 /^abc$/
2460
2461 /abc$/
2462 aabc
2463 *** Failers
2464 aabc
2465 aabcd
2466
2467 /^/
2468 abc
2469
2470 /$/
2471 abc
2472
2473 /a.c/
2474 abc
2475 axc
2476
2477 /a.*c/
2478 axyzc
2479
2480 /a[bc]d/
2481 abd
2482 *** Failers
2483 axyzd
2484 abc
2485
2486 /a[b-d]e/
2487 ace
2488
2489 /a[b-d]/
2490 aac
2491
2492 /a[-b]/
2493 a-
2494
2495 /a[b-]/
2496 a-
2497
2498 /a]/
2499 a]
2500
2501 /a[]]b/
2502 a]b
2503
2504 /a[^bc]d/
2505 aed
2506 *** Failers
2507 abd
2508 abd
2509
2510 /a[^-b]c/
2511 adc
2512
2513 /a[^]b]c/
2514 adc
2515 *** Failers
2516 a-c
2517 a]c
2518
2519 /\ba\b/
2520 a-
2521 -a
2522 -a-
2523
2524 /\by\b/
2525 *** Failers
2526 xy
2527 yz
2528 xyz
2529
2530 /\Ba\B/
2531 *** Failers
2532 a-
2533 -a
2534 -a-
2535
2536 /\By\b/
2537 xy
2538
2539 /\by\B/
2540 yz
2541
2542 /\By\B/
2543 xyz
2544
2545 /\w/
2546 a
2547
2548 /\W/
2549 -
2550 *** Failers
2551 -
2552 a
2553
2554 /a\sb/
2555 a b
2556
2557 /a\Sb/
2558 a-b
2559 *** Failers
2560 a-b
2561 a b
2562
2563 /\d/
2564 1
2565
2566 /\D/
2567 -
2568 *** Failers
2569 -
2570 1
2571
2572 /[\w]/
2573 a
2574
2575 /[\W]/
2576 -
2577 *** Failers
2578 -
2579 a
2580
2581 /a[\s]b/
2582 a b
2583
2584 /a[\S]b/
2585 a-b
2586 *** Failers
2587 a-b
2588 a b
2589
2590 /[\d]/
2591 1
2592
2593 /[\D]/
2594 -
2595 *** Failers
2596 -
2597 1
2598
2599 /ab|cd/
2600 abc
2601 abcd
2602
2603 /()ef/
2604 def
2605
2606 /$b/
2607
2608 /a\(b/
2609 a(b
2610
2611 /a\(*b/
2612 ab
2613 a((b
2614
2615 /a\\b/
2616 a\b
2617
2618 /((a))/
2619 abc
2620
2621 /(a)b(c)/
2622 abc
2623
2624 /a+b+c/
2625 aabbabc
2626
2627 /a{1,}b{1,}c/
2628 aabbabc
2629
2630 /a.+?c/
2631 abcabc
2632
2633 /(a+|b)*/
2634 ab
2635
2636 /(a+|b){0,}/
2637 ab
2638
2639 /(a+|b)+/
2640 ab
2641
2642 /(a+|b){1,}/
2643 ab
2644
2645 /(a+|b)?/
2646 ab
2647
2648 /(a+|b){0,1}/
2649 ab
2650
2651 /[^ab]*/
2652 cde
2653
2654 /abc/
2655 *** Failers
2656 b
2657
2658
2659 /a*/
2660
2661
2662 /([abc])*d/
2663 abbbcd
2664
2665 /([abc])*bcd/
2666 abcd
2667
2668 /a|b|c|d|e/
2669 e
2670
2671 /(a|b|c|d|e)f/
2672 ef
2673
2674 /abcd*efg/
2675 abcdefg
2676
2677 /ab*/
2678 xabyabbbz
2679 xayabbbz
2680
2681 /(ab|cd)e/
2682 abcde
2683
2684 /[abhgefdc]ij/
2685 hij
2686
2687 /^(ab|cd)e/
2688
2689 /(abc|)ef/
2690 abcdef
2691
2692 /(a|b)c*d/
2693 abcd
2694
2695 /(ab|ab*)bc/
2696 abc
2697
2698 /a([bc]*)c*/
2699 abc
2700
2701 /a([bc]*)(c*d)/
2702 abcd
2703
2704 /a([bc]+)(c*d)/
2705 abcd
2706
2707 /a([bc]*)(c+d)/
2708 abcd
2709
2710 /a[bcd]*dcdcde/
2711 adcdcde
2712
2713 /a[bcd]+dcdcde/
2714 *** Failers
2715 abcde
2716 adcdcde
2717
2718 /(ab|a)b*c/
2719 abc
2720
2721 /((a)(b)c)(d)/
2722 abcd
2723
2724 /[a-zA-Z_][a-zA-Z0-9_]*/
2725 alpha
2726
2727 /^a(bc+|b[eh])g|.h$/
2728 abh
2729
2730 /(bc+d$|ef*g.|h?i(j|k))/
2731 effgz
2732 ij
2733 reffgz
2734 *** Failers
2735 effg
2736 bcdd
2737
2738 /((((((((((a))))))))))/
2739 a
2740
2741 /((((((((((a))))))))))\10/
2742 aa
2743
2744 /(((((((((a)))))))))/
2745 a
2746
2747 /multiple words of text/
2748 *** Failers
2749 aa
2750 uh-uh
2751
2752 /multiple words/
2753 multiple words, yeah
2754
2755 /(.*)c(.*)/
2756 abcde
2757
2758 /\((.*), (.*)\)/
2759 (a, b)
2760
2761 /[k]/
2762
2763 /abcd/
2764 abcd
2765
2766 /a(bc)d/
2767 abcd
2768
2769 /a[-]?c/
2770 ac
2771
2772 /(abc)\1/
2773 abcabc
2774
2775 /([a-c]*)\1/
2776 abcabc
2777
2778 /(a)|\1/
2779 a
2780 *** Failers
2781 ab
2782 x
2783
2784 /(([a-c])b*?\2)*/
2785 ababbbcbc
2786
2787 /(([a-c])b*?\2){3}/
2788 ababbbcbc
2789
2790 /((\3|b)\2(a)x)+/
2791 aaaxabaxbaaxbbax
2792
2793 /((\3|b)\2(a)){2,}/
2794 bbaababbabaaaaabbaaaabba
2795
2796 /abc/i
2797 ABC
2798 XABCY
2799 ABABC
2800 *** Failers
2801 aaxabxbaxbbx
2802 XBC
2803 AXC
2804 ABX
2805
2806 /ab*c/i
2807 ABC
2808
2809 /ab*bc/i
2810 ABC
2811 ABBC
2812
2813 /ab*?bc/i
2814 ABBBBC
2815
2816 /ab{0,}?bc/i
2817 ABBBBC
2818
2819 /ab+?bc/i
2820 ABBC
2821
2822 /ab+bc/i
2823 *** Failers
2824 ABC
2825 ABQ
2826
2827 /ab{1,}bc/i
2828
2829 /ab+bc/i
2830 ABBBBC
2831
2832 /ab{1,}?bc/i
2833 ABBBBC
2834
2835 /ab{1,3}?bc/i
2836 ABBBBC
2837
2838 /ab{3,4}?bc/i
2839 ABBBBC
2840
2841 /ab{4,5}?bc/i
2842 *** Failers
2843 ABQ
2844 ABBBBC
2845
2846 /ab??bc/i
2847 ABBC
2848 ABC
2849
2850 /ab{0,1}?bc/i
2851 ABC
2852
2853 /ab??bc/i
2854
2855 /ab??c/i
2856 ABC
2857
2858 /ab{0,1}?c/i
2859 ABC
2860
2861 /^abc$/i
2862 ABC
2863 *** Failers
2864 ABBBBC
2865 ABCC
2866
2867 /^abc/i
2868 ABCC
2869
2870 /^abc$/i
2871
2872 /abc$/i
2873 AABC
2874
2875 /^/i
2876 ABC
2877
2878 /$/i
2879 ABC
2880
2881 /a.c/i
2882 ABC
2883 AXC
2884
2885 /a.*?c/i
2886 AXYZC
2887
2888 /a.*c/i
2889 *** Failers
2890 AABC
2891 AXYZD
2892
2893 /a[bc]d/i
2894 ABD
2895
2896 /a[b-d]e/i
2897 ACE
2898 *** Failers
2899 ABC
2900 ABD
2901
2902 /a[b-d]/i
2903 AAC
2904
2905 /a[-b]/i
2906 A-
2907
2908 /a[b-]/i
2909 A-
2910
2911 /a]/i
2912 A]
2913
2914 /a[]]b/i
2915 A]B
2916
2917 /a[^bc]d/i
2918 AED
2919
2920 /a[^-b]c/i
2921 ADC
2922 *** Failers
2923 ABD
2924 A-C
2925
2926 /a[^]b]c/i
2927 ADC
2928
2929 /ab|cd/i
2930 ABC
2931 ABCD
2932
2933 /()ef/i
2934 DEF
2935
2936 /$b/i
2937 *** Failers
2938 A]C
2939 B
2940
2941 /a\(b/i
2942 A(B
2943
2944 /a\(*b/i
2945 AB
2946 A((B
2947
2948 /a\\b/i
2949 A\B
2950
2951 /((a))/i
2952 ABC
2953
2954 /(a)b(c)/i
2955 ABC
2956
2957 /a+b+c/i
2958 AABBABC
2959
2960 /a{1,}b{1,}c/i
2961 AABBABC
2962
2963 /a.+?c/i
2964 ABCABC
2965
2966 /a.*?c/i
2967 ABCABC
2968
2969 /a.{0,5}?c/i
2970 ABCABC
2971
2972 /(a+|b)*/i
2973 AB
2974
2975 /(a+|b){0,}/i
2976 AB
2977
2978 /(a+|b)+/i
2979 AB
2980
2981 /(a+|b){1,}/i
2982 AB
2983
2984 /(a+|b)?/i
2985 AB
2986
2987 /(a+|b){0,1}/i
2988 AB
2989
2990 /(a+|b){0,1}?/i
2991 AB
2992
2993 /[^ab]*/i
2994 CDE
2995
2996 /abc/i
2997
2998 /a*/i
2999
3000
3001 /([abc])*d/i
3002 ABBBCD
3003
3004 /([abc])*bcd/i
3005 ABCD
3006
3007 /a|b|c|d|e/i
3008 E
3009
3010 /(a|b|c|d|e)f/i
3011 EF
3012
3013 /abcd*efg/i
3014 ABCDEFG
3015
3016 /ab*/i
3017 XABYABBBZ
3018 XAYABBBZ
3019
3020 /(ab|cd)e/i
3021 ABCDE
3022
3023 /[abhgefdc]ij/i
3024 HIJ
3025
3026 /^(ab|cd)e/i
3027 ABCDE
3028
3029 /(abc|)ef/i
3030 ABCDEF
3031
3032 /(a|b)c*d/i
3033 ABCD
3034
3035 /(ab|ab*)bc/i
3036 ABC
3037
3038 /a([bc]*)c*/i
3039 ABC
3040
3041 /a([bc]*)(c*d)/i
3042 ABCD
3043
3044 /a([bc]+)(c*d)/i
3045 ABCD
3046
3047 /a([bc]*)(c+d)/i
3048 ABCD
3049
3050 /a[bcd]*dcdcde/i
3051 ADCDCDE
3052
3053 /a[bcd]+dcdcde/i
3054
3055 /(ab|a)b*c/i
3056 ABC
3057
3058 /((a)(b)c)(d)/i
3059 ABCD
3060
3061 /[a-zA-Z_][a-zA-Z0-9_]*/i
3062 ALPHA
3063
3064 /^a(bc+|b[eh])g|.h$/i
3065 ABH
3066
3067 /(bc+d$|ef*g.|h?i(j|k))/i
3068 EFFGZ
3069 IJ
3070 REFFGZ
3071 *** Failers
3072 ADCDCDE
3073 EFFG
3074 BCDD
3075
3076 /((((((((((a))))))))))/i
3077 A
3078
3079 /((((((((((a))))))))))\10/i
3080 AA
3081
3082 /(((((((((a)))))))))/i
3083 A
3084
3085 /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
3086 A
3087
3088 /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
3089 C
3090
3091 /multiple words of text/i
3092 *** Failers
3093 AA
3094 UH-UH
3095
3096 /multiple words/i
3097 MULTIPLE WORDS, YEAH
3098
3099 /(.*)c(.*)/i
3100 ABCDE
3101
3102 /\((.*), (.*)\)/i
3103 (A, B)
3104
3105 /[k]/i
3106
3107 /abcd/i
3108 ABCD
3109
3110 /a(bc)d/i
3111 ABCD
3112
3113 /a[-]?c/i
3114 AC
3115
3116 /(abc)\1/i
3117 ABCABC
3118
3119 /([a-c]*)\1/i
3120 ABCABC
3121
3122 /a(?!b)./
3123 abad
3124
3125 /a(?=d)./
3126 abad
3127
3128 /a(?=c|d)./
3129 abad
3130
3131 /a(?:b|c|d)(.)/
3132 ace
3133
3134 /a(?:b|c|d)*(.)/
3135 ace
3136
3137 /a(?:b|c|d)+?(.)/
3138 ace
3139 acdbcdbe
3140
3141 /a(?:b|c|d)+(.)/
3142 acdbcdbe
3143
3144 /a(?:b|c|d){2}(.)/
3145 acdbcdbe
3146
3147 /a(?:b|c|d){4,5}(.)/
3148 acdbcdbe
3149
3150 /a(?:b|c|d){4,5}?(.)/
3151 acdbcdbe
3152
3153 /((foo)|(bar))*/
3154 foobar
3155
3156 /a(?:b|c|d){6,7}(.)/
3157 acdbcdbe
3158
3159 /a(?:b|c|d){6,7}?(.)/
3160 acdbcdbe
3161
3162 /a(?:b|c|d){5,6}(.)/
3163 acdbcdbe
3164
3165 /a(?:b|c|d){5,6}?(.)/
3166 acdbcdbe
3167
3168 /a(?:b|c|d){5,7}(.)/
3169 acdbcdbe
3170
3171 /a(?:b|c|d){5,7}?(.)/
3172 acdbcdbe
3173
3174 /a(?:b|(c|e){1,2}?|d)+?(.)/
3175 ace
3176
3177 /^(.+)?B/
3178 AB
3179
3180 /^([^a-z])|(\^)$/
3181 .
3182
3183 /^[<>]&/
3184 <&OUT
3185
3186 /^(a\1?){4}$/
3187 aaaaaaaaaa
3188 *** Failers
3189 AB
3190 aaaaaaaaa
3191 aaaaaaaaaaa
3192
3193 /^(a(?(1)\1)){4}$/
3194 aaaaaaaaaa
3195 *** Failers
3196 aaaaaaaaa
3197 aaaaaaaaaaa
3198
3199 /(?:(f)(o)(o)|(b)(a)(r))*/
3200 foobar
3201
3202 /(?<=a)b/
3203 ab
3204 *** Failers
3205 cb
3206 b
3207
3208 /(?<!c)b/
3209 ab
3210 b
3211 b
3212
3213 /(?:..)*a/
3214 aba
3215
3216 /(?:..)*?a/
3217 aba
3218
3219 /^(?:b|a(?=(.)))*\1/
3220 abc
3221
3222 /^(){3,5}/
3223 abc
3224
3225 /^(a+)*ax/
3226 aax
3227
3228 /^((a|b)+)*ax/
3229 aax
3230
3231 /^((a|bc)+)*ax/
3232 aax
3233
3234 /(a|x)*ab/
3235 cab
3236
3237 /(a)*ab/
3238 cab
3239
3240 /(?:(?i)a)b/
3241 ab
3242
3243 /((?i)a)b/
3244 ab
3245
3246 /(?:(?i)a)b/
3247 Ab
3248
3249 /((?i)a)b/
3250 Ab
3251
3252 /(?:(?i)a)b/
3253 *** Failers
3254 cb
3255 aB
3256
3257 /((?i)a)b/
3258
3259 /(?i:a)b/
3260 ab
3261
3262 /((?i:a))b/
3263 ab
3264
3265 /(?i:a)b/
3266 Ab
3267
3268 /((?i:a))b/
3269 Ab
3270
3271 /(?i:a)b/
3272 *** Failers
3273 aB
3274 aB
3275
3276 /((?i:a))b/
3277
3278 /(?:(?-i)a)b/i
3279 ab
3280
3281 /((?-i)a)b/i
3282 ab
3283
3284 /(?:(?-i)a)b/i
3285 aB
3286
3287 /((?-i)a)b/i
3288 aB
3289
3290 /(?:(?-i)a)b/i
3291 *** Failers
3292 aB
3293 Ab
3294
3295 /((?-i)a)b/i
3296
3297 /(?:(?-i)a)b/i
3298 aB
3299
3300 /((?-i)a)b/i
3301 aB
3302
3303 /(?:(?-i)a)b/i
3304 *** Failers
3305 Ab
3306 AB
3307
3308 /((?-i)a)b/i
3309
3310 /(?-i:a)b/i
3311 ab
3312
3313 /((?-i:a))b/i
3314 ab
3315
3316 /(?-i:a)b/i
3317 aB
3318
3319 /((?-i:a))b/i
3320 aB
3321
3322 /(?-i:a)b/i
3323 *** Failers
3324 AB
3325 Ab
3326
3327 /((?-i:a))b/i
3328
3329 /(?-i:a)b/i
3330 aB
3331
3332 /((?-i:a))b/i
3333 aB
3334
3335 /(?-i:a)b/i
3336 *** Failers
3337 Ab
3338 AB
3339
3340 /((?-i:a))b/i
3341
3342 /((?-i:a.))b/i
3343 *** Failers
3344 AB
3345 a\nB
3346
3347 /((?s-i:a.))b/i
3348 a\nB
3349
3350 /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
3351 cabbbb
3352
3353 /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
3354 caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
3355
3356 /(ab)\d\1/i
3357 Ab4ab
3358 ab4Ab
3359
3360 /foo\w*\d{4}baz/
3361 foobar1234baz
3362
3363 /x(~~)*(?:(?:F)?)?/
3364 x~~
3365
3366 /^a(?#xxx){3}c/
3367 aaac
3368
3369 /^a (?#xxx) (?#yyy) {3}c/x
3370 aaac
3371
3372 /(?<![cd])b/
3373 *** Failers
3374 B\nB
3375 dbcb
3376
3377 /(?<![cd])[ab]/
3378 dbaacb
3379
3380 /(?<!(c|d))b/
3381
3382 /(?<!(c|d))[ab]/
3383 dbaacb
3384
3385 /(?<!cd)[ab]/
3386 cdaccb
3387
3388 /^(?:a?b?)*$/
3389 \
3390 a
3391 ab
3392 aaa
3393 *** Failers
3394 dbcb
3395 a--
3396 aa--
3397
3398 /((?s)^a(.))((?m)^b$)/
3399 a\nb\nc\n
3400
3401 /((?m)^b$)/
3402 a\nb\nc\n
3403
3404 /(?m)^b/
3405 a\nb\n
3406
3407 /(?m)^(b)/
3408 a\nb\n
3409
3410 /((?m)^b)/
3411 a\nb\n
3412
3413 /\n((?m)^b)/
3414 a\nb\n
3415
3416 /((?s).)c(?!.)/
3417 a\nb\nc\n
3418 a\nb\nc\n
3419
3420 /((?s)b.)c(?!.)/
3421 a\nb\nc\n
3422 a\nb\nc\n
3423
3424 /^b/
3425
3426 /()^b/
3427 *** Failers
3428 a\nb\nc\n
3429 a\nb\nc\n
3430
3431 /((?m)^b)/
3432 a\nb\nc\n
3433
3434 /(x)?(?(1)a|b)/
3435 *** Failers
3436 a
3437 a
3438
3439 /(x)?(?(1)b|a)/
3440 a
3441
3442 /()?(?(1)b|a)/
3443 a
3444
3445 /()(?(1)b|a)/
3446
3447 /()?(?(1)a|b)/
3448 a
3449
3450 /^(\()?blah(?(1)(\)))$/
3451 (blah)
3452 blah
3453 *** Failers
3454 a
3455 blah)
3456 (blah
3457
3458 /^(\(+)?blah(?(1)(\)))$/
3459 (blah)
3460 blah
3461 *** Failers
3462 blah)
3463 (blah
3464
3465 /(?(?!a)a|b)/
3466
3467 /(?(?!a)b|a)/
3468 a
3469
3470 /(?(?=a)b|a)/
3471 *** Failers
3472 a
3473 a
3474
3475 /(?(?=a)a|b)/
3476 a
3477
3478 /(?=(a+?))(\1ab)/
3479 aaab
3480
3481 /^(?=(a+?))\1ab/
3482
3483 /(\w+:)+/
3484 one:
3485
3486 /$(?<=^(a))/
3487 a
3488
3489 /(?=(a+?))(\1ab)/
3490 aaab
3491
3492 /^(?=(a+?))\1ab/
3493 *** Failers
3494 aaab
3495 aaab
3496
3497 /([\w:]+::)?(\w+)$/
3498 abcd
3499 xy:z:::abcd
3500
3501 /^[^bcd]*(c+)/
3502 aexycd
3503
3504 /(a*)b+/
3505 caab
3506
3507 /([\w:]+::)?(\w+)$/
3508 abcd
3509 xy:z:::abcd
3510 *** Failers
3511 abcd:
3512 abcd:
3513
3514 /^[^bcd]*(c+)/
3515 aexycd
3516
3517 /(>a+)ab/
3518
3519 /(?>a+)b/
3520 aaab
3521
3522 /([[:]+)/
3523 a:[b]:
3524
3525 /([[=]+)/
3526 a=[b]=
3527
3528 /([[.]+)/
3529 a.[b].
3530
3531 /((?>a+)b)/
3532 aaab
3533
3534 /(?>(a+))b/
3535 aaab
3536
3537 /((?>[^()]+)|\([^()]*\))+/
3538 ((abc(ade)ufh()()x
3539
3540 /a\Z/
3541 *** Failers
3542 aaab
3543 a\nb\n
3544
3545 /b\Z/
3546 a\nb\n
3547
3548 /b\z/
3549
3550 /b\Z/
3551 a\nb
3552
3553 /b\z/
3554 a\nb
3555 *** Failers
3556
3557 /^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
3558 a
3559 abc
3560 a-b
3561 0-9
3562 a.b
3563 5.6.7
3564 the.quick.brown.fox
3565 a100.b200.300c
3566 12-ab.1245
3567 *** Failers
3568 \
3569 .a
3570 -a
3571 a-
3572 a.
3573 a_b
3574 a.-
3575 a..
3576 ab..bc
3577 the.quick.brown.fox-
3578 the.quick.brown.fox.
3579 the.quick.brown.fox_
3580 the.quick.brown.fox+
3581
3582 /(?>.*)(?<=(abcd|wxyz))/
3583 alphabetabcd
3584 endingwxyz
3585 *** Failers
3586 a rather long string that doesn't end with one of them
3587
3588 /word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
3589 word cat dog elephant mussel cow horse canary baboon snake shark otherword
3590 word cat dog elephant mussel cow horse canary baboon snake shark
3591
3592 /word (?>[a-zA-Z0-9]+ ){0,30}otherword/
3593 word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
3594
3595 /(?<=\d{3}(?!999))foo/
3596 999foo
3597 123999foo
3598 *** Failers
3599 123abcfoo
3600
3601 /(?<=(?!...999)\d{3})foo/
3602 999foo
3603 123999foo
3604 *** Failers
3605 123abcfoo
3606
3607 /(?<=\d{3}(?!999)...)foo/
3608 123abcfoo
3609 123456foo
3610 *** Failers
3611 123999foo
3612
3613 /(?<=\d{3}...)(?<!999)foo/
3614 123abcfoo
3615 123456foo
3616 *** Failers
3617 123999foo
3618
3619 /<a[\s]+href[\s]*=[\s]* # find <a href=
3620 ([\"\'])? # find single or double quote
3621 (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
3622 # quote, otherwise match up to next space
3623 /isx
3624 <a href=abcd xyz
3625 <a href=\"abcd xyz pqr\" cats
3626 <a href=\'abcd xyz pqr\' cats
3627
3628 /<a\s+href\s*=\s* # find <a href=
3629 (["'])? # find single or double quote
3630 (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
3631 # quote, otherwise match up to next space
3632 /isx
3633 <a href=abcd xyz
3634 <a href=\"abcd xyz pqr\" cats
3635 <a href = \'abcd xyz pqr\' cats
3636
3637 /<a\s+href(?>\s*)=(?>\s*) # find <a href=
3638 (["'])? # find single or double quote
3639 (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
3640 # quote, otherwise match up to next space
3641 /isx
3642 <a href=abcd xyz
3643 <a href=\"abcd xyz pqr\" cats
3644 <a href = \'abcd xyz pqr\' cats
3645
3646 /((Z)+|A)*/
3647 ZABCDEFG
3648
3649 /(Z()|A)*/
3650 ZABCDEFG
3651
3652 /(Z(())|A)*/
3653 ZABCDEFG
3654
3655 /((?>Z)+|A)*/
3656 ZABCDEFG
3657
3658 /((?>)+|A)*/
3659 ZABCDEFG
3660
3661 /a*/g
3662 abbab
3663
3664 /^[\d-a]/
3665 abcde
3666 -things
3667 0digit
3668 *** Failers
3669 bcdef
3670
3671 /[[:space:]]+/
3672 > \x09\x0a\x0c\x0d\x0b<
3673
3674 /[[:blank:]]+/
3675 > \x09\x0a\x0c\x0d\x0b<
3676
3677 /[\s]+/
3678 > \x09\x0a\x0c\x0d\x0b<
3679
3680 /\s+/
3681 > \x09\x0a\x0c\x0d\x0b<
3682
3683 /a b/x
3684 ab
3685
3686 /(?!\A)x/m
3687 a\nxb\n
3688
3689 /(?!^)x/m
3690 a\nxb\n
3691
3692 /abc\Qabc\Eabc/
3693 abcabcabc
3694
3695 /abc\Q(*+|\Eabc/
3696 abc(*+|abc
3697
3698 / abc\Q abc\Eabc/x
3699 abc abcabc
3700 *** Failers
3701 abcabcabc
3702
3703 /abc#comment
3704 \Q#not comment
3705 literal\E/x
3706 abc#not comment\n literal
3707
3708 /abc#comment
3709 \Q#not comment
3710 literal/x
3711 abc#not comment\n literal
3712
3713 /abc#comment
3714 \Q#not comment
3715 literal\E #more comment
3716 /x
3717 abc#not comment\n literal
3718
3719 /abc#comment
3720 \Q#not comment
3721 literal\E #more comment/x
3722 abc#not comment\n literal
3723
3724 /\Qabc\$xyz\E/
3725 abc\\\$xyz
3726
3727 /\Qabc\E\$\Qxyz\E/
3728 abc\$xyz
3729
3730 /\Gabc/
3731 abc
3732 *** Failers
3733 xyzabc
3734
3735 /\Gabc./g
3736 abc1abc2xyzabc3
3737
3738 /abc./g
3739 abc1abc2xyzabc3
3740
3741 /a(?x: b c )d/
3742 XabcdY
3743 *** Failers
3744 Xa b c d Y
3745
3746 /((?x)x y z | a b c)/
3747 XabcY
3748 AxyzB
3749
3750 /(?i)AB(?-i)C/
3751 XabCY
3752 *** Failers
3753 XabcY
3754
3755 /((?i)AB(?-i)C|D)E/
3756 abCE
3757 DE
3758 *** Failers
3759 abcE
3760 abCe
3761 dE
3762 De
3763
3764 /(.*)\d+\1/
3765 abc123abc
3766 abc123bc
3767
3768 /(.*)\d+\1/s
3769 abc123abc
3770 abc123bc
3771
3772 /((.*))\d+\1/
3773 abc123abc
3774 abc123bc
3775
3776 /-- This tests for an IPv6 address in the form where it can have up to
3777 eight components, one and only one of which is empty. This must be
3778 an internal component. --/
3779
3780 /^(?!:) # colon disallowed at start
3781 (?: # start of item
3782 (?: [0-9a-f]{1,4} | # 1-4 hex digits or
3783 (?(1)0 | () ) ) # if null previously matched, fail; else null
3784 : # followed by colon
3785 ){1,7} # end item; 1-7 of them required
3786 [0-9a-f]{1,4} $ # final hex number at end of string
3787 (?(1)|.) # check that there was an empty component
3788 /xi
3789 a123::a123
3790 a123:b342::abcd
3791 a123:b342::324e:abcd
3792 a123:ddde:b342::324e:abcd
3793 a123:ddde:b342::324e:dcba:abcd
3794 a123:ddde:9999:b342::324e:dcba:abcd
3795 *** Failers
3796 1:2:3:4:5:6:7:8
3797 a123:bce:ddde:9999:b342::324e:dcba:abcd
3798 a123::9999:b342::324e:dcba:abcd
3799 abcde:2:3:4:5:6:7:8
3800 ::1
3801 abcd:fee0:123::
3802 :1
3803 1:
3804
3805 /[z\Qa-d]\E]/
3806 z
3807 a
3808 -
3809 d
3810 ]
3811 *** Failers
3812 b
3813
3814 /[\z\C]/
3815 z
3816 C
3817
3818 /\M/
3819 M
3820
3821 /(a+)*b/
3822 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3823
3824 /(?i)reg(?:ul(?:[a]|ae)r|ex)/
3825 REGular
3826 regulaer
3827 Regex
3828 regulr
3829
3830 /[--]+/
3831
3832
3833
3834
3835
3836 /(?<=Z)X./
3837 \x84XAZXB
3838
3839 /ab cd (?x) de fg/
3840 ab cd defg
3841
3842 /ab cd(?x) de fg/
3843 ab cddefg
3844 ** Failers
3845 abcddefg
3846
3847 /(?<![^f]oo)(bar)/
3848 foobarX
3849 ** Failers
3850 boobarX
3851
3852 /(?<![^f])X/
3853 offX
3854 ** Failers
3855 onyX
3856
3857 /(?<=[^f])X/
3858 onyX
3859 ** Failers
3860 offX
3861
3862 /^/mg
3863 a\nb\nc\n
3864 \
3865
3866 /(?<=C\n)^/mg
3867 A\nC\nC\n
3868
3869 /(?:(?(1)a|b)(X))+/
3870 bXaX
3871
3872 /(?:(?(1)\1a|b)(X|Y))+/
3873 bXXaYYaY
3874 bXYaXXaX
3875
3876 /()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
3877 bXXaYYaY
3878
3879 /[[,abc,]+]/
3880 abc]
3881 a,b]
3882 [a,b,c]
3883
3884 /(?-x: )/x
3885 A\x20B
3886
3887 "(?x)(?-x: \s*#\s*)"
3888 A # B
3889 ** Failers
3890 #
3891
3892 "(?x-is)(?:(?-ixs) \s*#\s*) include"
3893 A #include
3894 ** Failers
3895 A#include
3896 A #Include
3897
3898 /a*b*\w/
3899 aaabbbb
3900 aaaa
3901 a
3902
3903 /a*b?\w/
3904 aaabbbb
3905 aaaa
3906 a
3907
3908 /a*b{0,4}\w/
3909 aaabbbb
3910 aaaa
3911 a
3912
3913 /a*b{0,}\w/
3914 aaabbbb
3915 aaaa
3916 a
3917
3918 /a*\d*\w/
3919 0a
3920 a
3921
3922 /a*b *\w/x
3923 a
3924
3925 /a*b#comment
3926 *\w/x
3927 a
3928
3929 /a* b *\w/x
3930 a
3931
3932 /^\w+=.*(\\\n.*)*/
3933 abc=xyz\\\npqr
3934
3935 /(?=(\w+))\1:/
3936 abcd:
3937
3938 /^(?=(\w+))\1:/
3939 abcd:
3940
3941 /^\Eabc/
3942 abc
3943
3944 /^[\Eabc]/
3945 a
3946 ** Failers
3947 E
3948
3949 /^[a-\Ec]/
3950 b
3951 ** Failers
3952 -
3953 E
3954
3955 /^[a\E\E-\Ec]/
3956 b
3957 ** Failers
3958 -
3959 E
3960
3961 /^[\E\Qa\E-\Qz\E]+/
3962 b
3963 ** Failers
3964 -
3965
3966 /^[a\Q]bc\E]/
3967 a
3968 ]
3969 c
3970
3971 /^[a-\Q\E]/
3972 a
3973 -
3974
3975 /^(a()*)*/
3976 aaaa
3977
3978 /^(?:a(?:(?:))*)*/
3979 aaaa
3980
3981 /^(a()+)+/
3982 aaaa
3983
3984 /^(?:a(?:(?:))+)+/
3985 aaaa
3986
3987 /(a){0,3}(?(1)b|(c|))*D/
3988 abbD
3989 ccccD
3990 D
3991
3992 /(a|)*\d/
3993 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3994 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
3995
3996 /(?>a|)*\d/
3997 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3998 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
3999
4000 /(?:a|)*\d/
4001 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4002 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
4003
4004 /\Z/g
4005 abc\n
4006
4007 /^(?s)(?>.*)(?<!\n)/
4008 abc
4009 abc\n
4010
4011 /^(?![^\n]*\n\z)/
4012 abc
4013 abc\n
4014
4015 /\z(?<!\n)/
4016 abc
4017 abc\n
4018
4019 /(.*(.)?)*/
4020 abcd
4021
4022 /( (A | (?(1)0|) )* )/x
4023 abcd
4024
4025 /( ( (?(1)0|) )* )/x
4026 abcd
4027
4028 /( (?(1)0|)* )/x
4029 abcd
4030
4031 /[[:abcd:xyz]]/
4032 a]
4033 :]
4034
4035 /[abc[:x\]pqr]/
4036 a
4037 [
4038 :
4039 ]
4040 p
4041
4042 /.*[op][xyz]/
4043 fooabcfoo
4044
4045 /(?(?=.*b)b|^)/
4046 adc
4047 abc
4048
4049 /(?(?=^.*b)b|^)/
4050 adc
4051 abc
4052
4053 /(?(?=.*b)b|^)*/
4054 adc
4055 abc
4056
4057 /(?(?=.*b)b|^)+/
4058 adc
4059 abc
4060
4061 /(?(?=b).*b|^d)/
4062 abc
4063
4064 /(?(?=.*b).*b|^d)/
4065 abc
4066
4067 /^%((?(?=[a])[^%])|b)*%$/
4068 %ab%
4069
4070 /(?i)a(?-i)b|c/
4071 XabX
4072 XAbX
4073 CcC
4074 ** Failers
4075 XABX
4076
4077 /[\x00-\xff\s]+/
4078 \x0a\x0b\x0c\x0d
4079
4080 /^\c/
4081 ?
4082
4083 /(abc)\1/i
4084 abc
4085
4086 /(abc)\1/
4087 abc
4088
4089 /[^a]*/i
4090 12abc
4091 12ABC
4092
4093 /[^a]*+/i
4094 12abc
4095 12ABC
4096
4097 /[^a]*?X/i
4098 ** Failers
4099 12abc
4100 12ABC
4101
4102 /[^a]+?X/i
4103 ** Failers
4104 12abc
4105 12ABC
4106
4107 /[^a]?X/i
4108 12aXbcX
4109 12AXBCX
4110 BCX
4111
4112 /[^a]??X/i
4113 12aXbcX
4114 12AXBCX
4115 BCX
4116
4117 /[^a]?+X/i
4118 12aXbcX
4119 12AXBCX
4120 BCX
4121
4122 /[^a]{2,3}/i
4123 abcdef
4124 ABCDEF
4125
4126 /[^a]{2,3}?/i
4127 abcdef
4128 ABCDEF
4129
4130 /[^a]{2,3}+/i
4131 abcdef
4132 ABCDEF
4133
4134 /((a|)+)+Z/
4135 Z
4136
4137 /(a)b|(a)c/
4138 ac
4139
4140 /(?>(a))b|(a)c/
4141 ac
4142
4143 /(?=(a))ab|(a)c/
4144 ac
4145
4146 /((?>(a))b|(a)c)/
4147 ac
4148
4149 /((?>(a))b|(a)c)++/
4150 ac
4151
4152 /(?:(?>(a))b|(a)c)++/
4153 ac
4154
4155 /(?=(?>(a))b|(a)c)(..)/
4156 ac
4157
4158 /(?>(?>(a))b|(a)c)/
4159 ac
4160
4161 /(?:(?>([ab])))+a=/+
4162 =ba=
4163
4164 /(?>([ab]))+a=/+
4165 =ba=
4166
4167 /((?>(a+)b)+(aabab))/
4168 aaaabaaabaabab
4169
4170 /(?>a+|ab)+?c/
4171 aabc
4172
4173 /(?>a+|ab)+c/
4174 aabc
4175
4176 /(?:a+|ab)+c/
4177 aabc
4178
4179 /(?(?=(a))a)/
4180 a
4181
4182 /(?(?=(a))a)(b)/
4183 ab
4184
4185 /^(?:a|ab)++c/
4186 aaaabc
4187
4188 /^(?>a|ab)++c/
4189 aaaabc
4190
4191 /^(?:a|ab)+c/
4192 aaaabc
4193
4194 /(?=abc){3}abc/+
4195 abcabcabc
4196 ** Failers
4197 xyz
4198
4199 /(?=abc)+abc/+
4200 abcabcabc
4201 ** Failers
4202 xyz
4203
4204 /(?=abc)++abc/+
4205 abcabcabc
4206 ** Failers
4207 xyz
4208
4209 /(?=abc){0}xyz/
4210 xyz
4211
4212 /(?=abc){1}xyz/
4213 ** Failers
4214 xyz
4215
4216 /(?=(a))?./
4217 ab
4218 bc
4219
4220 /(?=(a))??./
4221 ab
4222 bc
4223
4224 /^(?=(?1))?[az]([abc])d/
4225 abd
4226 zcdxx
4227
4228 /^(?!a){0}\w+/
4229 aaaaa
4230
4231 /(?<=(abc))?xyz/
4232 abcxyz
4233 pqrxyz
4234
4235 /^[\g<a>]+/
4236 ggg<<<aaa>>>
4237 ** Failers
4238 \\ga
4239
4240 /^[\ga]+/
4241 gggagagaxyz
4242
4243 /^[:a[:digit:]]+/
4244 aaaa444:::Z
4245
4246 /^[:a[:digit:]:b]+/
4247 aaaa444:::bbbZ
4248
4249 /[:a]xxx[b:]/
4250 :xxx:
4251
4252 /(?<=a{2})b/i
4253 xaabc
4254 ** Failers
4255 xabc
4256
4257 /(?<!a{2})b/i
4258 xabc
4259 ** Failers
4260 xaabc
4261
4262 /(?<=a\h)c/
4263 xa c
4264
4265 /(?<=[^a]{2})b/
4266 axxbc
4267 aAAbc
4268 ** Failers
4269 xaabc
4270
4271 /(?<=[^a]{2})b/i
4272 axxbc
4273 ** Failers
4274 aAAbc
4275 xaabc
4276
4277 /(?<=a\H)c/
4278 abc
4279
4280 /(?<=a\V)c/
4281 abc
4282
4283 /(?<=a\v)c/
4284 a\nc
4285
4286 /(?(?=c)c|d)++Y/
4287 XcccddYX
4288
4289 /(?(?=c)c|d)*+Y/
4290 XcccddYX
4291
4292 /^(a{2,3}){2,}+a/
4293 aaaaaaa
4294 ** Failers
4295 aaaaaa
4296 aaaaaaaaa
4297
4298 /^(a{2,3})++a/
4299 ** Failers
4300 aaaaaa
4301
4302 /^(a{2,3})*+a/
4303 ** Failers
4304 aaaaaa
4305
4306 /ab\Cde/
4307 abXde
4308
4309 /(?<=ab\Cde)X/
4310 abZdeX
4311
4312 /a[\CD]b/
4313 aCb
4314 aDb
4315
4316 /a[\C-X]b/
4317 aJb
4318
4319 /\H\h\V\v/
4320 X X\x0a
4321 X\x09X\x0b
4322 ** Failers
4323 \xa0 X\x0a
4324
4325 /\H*\h+\V?\v{3,4}/
4326 \x09\x20\xa0X\x0a\x0b\x0c\x0d\x0a
4327 \x09\x20\xa0\x0a\x0b\x0c\x0d\x0a
4328 \x09\x20\xa0\x0a\x0b\x0c
4329 ** Failers
4330 \x09\x20\xa0\x0a\x0b
4331
4332 /\H{3,4}/
4333 XY ABCDE
4334 XY PQR ST
4335
4336 /.\h{3,4}./
4337 XY AB PQRS
4338
4339 /\h*X\h?\H+Y\H?Z/
4340 >XNNNYZ
4341 > X NYQZ
4342 ** Failers
4343 >XYZ
4344 > X NY Z
4345
4346 /\v*X\v?Y\v+Z\V*\x0a\V+\x0b\V{2,3}\x0c/
4347 >XY\x0aZ\x0aA\x0bNN\x0c
4348 >\x0a\x0dX\x0aY\x0a\x0bZZZ\x0aAAA\x0bNNN\x0c
4349
4350 /(foo)\Kbar/
4351 foobar
4352
4353 /(foo)(\Kbar|baz)/
4354 foobar
4355 foobaz
4356
4357 /(foo\Kbar)baz/
4358 foobarbaz
4359
4360 /abc\K|def\K/g+
4361 Xabcdefghi
4362
4363 /ab\Kc|de\Kf/g+
4364 Xabcdefghi
4365
4366 /(?=C)/g+
4367 ABCDECBA
4368
4369 /^abc\K/+
4370 abcdef
4371 ** Failers
4372 defabcxyz
4373
4374 /^(a(b))\1\g1\g{1}\g-1\g{-1}\g{-02}Z/
4375 ababababbbabZXXXX
4376
4377 /(?<A>tom|bon)-\g{A}/
4378 tom-tom
4379 bon-bon
4380
4381 /(^(a|b\g{-1}))/
4382 bacxxx
4383
4384 /(?|(abc)|(xyz))\1/
4385 abcabc
4386 xyzxyz
4387 ** Failers
4388 abcxyz
4389 xyzabc
4390
4391 /(?|(abc)|(xyz))(?1)/
4392 abcabc
4393 xyzabc
4394 ** Failers
4395 xyzxyz
4396
4397 /^X(?5)(a)(?|(b)|(q))(c)(d)(Y)/
4398 XYabcdY
4399
4400 /^X(?7)(a)(?|(b|(r)(s))|(q))(c)(d)(Y)/
4401 XYabcdY
4402
4403 /^X(?7)(a)(?|(b|(?|(r)|(t))(s))|(q))(c)(d)(Y)/
4404 XYabcdY
4405
4406 /(?'abc'\w+):\k<abc>{2}/
4407 a:aaxyz
4408 ab:ababxyz
4409 ** Failers
4410 a:axyz
4411 ab:abxyz
4412
4413 /(?'abc'\w+):\g{abc}{2}/
4414 a:aaxyz
4415 ab:ababxyz
4416 ** Failers
4417 a:axyz
4418 ab:abxyz
4419
4420 /^(?<ab>a)? (?(<ab>)b|c) (?('ab')d|e)/x
4421 abd
4422 ce
4423
4424 /^(a.)\g-1Z/
4425 aXaXZ
4426
4427 /^(a.)\g{-1}Z/
4428 aXaXZ
4429
4430 /^(?(DEFINE) (?<A> a) (?<B> b) ) (?&A) (?&B) /x
4431 abcd
4432
4433 /(?<NAME>(?&NAME_PAT))\s+(?<ADDR>(?&ADDRESS_PAT))
4434 (?(DEFINE)
4435 (?<NAME_PAT>[a-z]+)
4436 (?<ADDRESS_PAT>\d+)
4437 )/x
4438 metcalfe 33
4439
4440 /(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))\b(?&byte)(\.(?&byte)){3}/
4441 1.2.3.4
4442 131.111.10.206
4443 10.0.0.0
4444 ** Failers
4445 10.6
4446 455.3.4.5
4447
4448 /\b(?&byte)(\.(?&byte)){3}(?(DEFINE)(?<byte>2[0-4]\d|25[0-5]|1\d\d|[1-9]?\d))/
4449 1.2.3.4
4450 131.111.10.206
4451 10.0.0.0
4452 ** Failers
4453 10.6
4454 455.3.4.5
4455
4456 /^(\w++|\s++)*$/
4457 now is the time for all good men to come to the aid of the party
4458 *** Failers
4459 this is not a line with only words and spaces!
4460
4461 /(\d++)(\w)/
4462 12345a
4463 *** Failers
4464 12345+
4465
4466 /a++b/
4467 aaab
4468
4469 /(a++b)/
4470 aaab
4471
4472 /(a++)b/
4473 aaab
4474
4475 /([^()]++|\([^()]*\))+/
4476 ((abc(ade)ufh()()x
4477
4478 /\(([^()]++|\([^()]+\))+\)/
4479 (abc)
4480 (abc(def)xyz)
4481 *** Failers
4482 ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4483
4484 /^([^()]|\((?1)*\))*$/
4485 abc
4486 a(b)c
4487 a(b(c))d
4488 *** Failers)
4489 a(b(c)d
4490
4491 /^>abc>([^()]|\((?1)*\))*<xyz<$/
4492 >abc>123<xyz<
4493 >abc>1(2)3<xyz<
4494 >abc>(1(2)3)<xyz<
4495
4496 /^(?:((.)(?1)\2|)|((.)(?3)\4|.))$/i
4497 1221
4498 Satanoscillatemymetallicsonatas
4499 AmanaplanacanalPanama
4500 AblewasIereIsawElba
4501 *** Failers
4502 Thequickbrownfox
4503
4504 /^(\d+|\((?1)([+*-])(?1)\)|-(?1))$/
4505 12
4506 (((2+2)*-3)-7)
4507 -12
4508 *** Failers
4509 ((2+2)*-3)-7)
4510
4511 /^(x(y|(?1){2})z)/
4512 xyz
4513 xxyzxyzz
4514 *** Failers
4515 xxyzz
4516 xxyzxyzxyzz
4517
4518 /((< (?: (?(R) \d++ | [^<>]*+) | (?2)) * >))/x
4519 <>
4520 <abcd>
4521 <abc <123> hij>
4522 <abc <def> hij>
4523 <abc<>def>
4524 <abc<>
4525 *** Failers
4526 <abc
4527
4528 /^a+(*FAIL)/
4529 aaaaaa
4530
4531 /a+b?c+(*FAIL)/
4532 aaabccc
4533
4534 /a+b?(*PRUNE)c+(*FAIL)/
4535 aaabccc
4536
4537 /a+b?(*COMMIT)c+(*FAIL)/
4538 aaabccc
4539
4540 /a+b?(*SKIP)c+(*FAIL)/
4541 aaabcccaaabccc
4542
4543 /^(?:aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
4544 aaaxxxxxx
4545 aaa++++++
4546 bbbxxxxx
4547 bbb+++++
4548 cccxxxx
4549 ccc++++
4550 dddddddd
4551
4552 /^(aaa(*THEN)\w{6}|bbb(*THEN)\w{5}|ccc(*THEN)\w{4}|\w{3})/
4553 aaaxxxxxx
4554 aaa++++++
4555 bbbxxxxx
4556 bbb+++++
4557 cccxxxx
4558 ccc++++
4559 dddddddd
4560
4561 /a+b?(*THEN)c+(*FAIL)/
4562 aaabccc
4563
4564 /(A (A|B(*ACCEPT)|C) D)(E)/x
4565 AB
4566 ABX
4567 AADE
4568 ACDE
4569 ** Failers
4570 AD
4571
4572 /^\W*+(?:((.)\W*+(?1)\W*+\2|)|((.)\W*+(?3)\W*+\4|\W*+.\W*+))\W*+$/i
4573 1221
4574 Satan, oscillate my metallic sonatas!
4575 A man, a plan, a canal: Panama!
4576 Able was I ere I saw Elba.
4577 *** Failers
4578 The quick brown fox
4579
4580 /^((.)(?1)\2|.)$/
4581 a
4582 aba
4583 aabaa
4584 abcdcba
4585 pqaabaaqp
4586 ablewasiereisawelba
4587 rhubarb
4588 the quick brown fox
4589
4590 /(a)(?<=b(?1))/
4591 baz
4592 ** Failers
4593 caz
4594
4595 /(?<=b(?1))(a)/
4596 zbaaz
4597 ** Failers
4598 aaa
4599
4600 /(?<X>a)(?<=b(?&X))/
4601 baz
4602
4603 /^(?|(abc)|(def))\1/
4604 abcabc
4605 defdef
4606 ** Failers
4607 abcdef
4608 defabc
4609
4610 /^(?|(abc)|(def))(?1)/
4611 abcabc
4612 defabc
4613 ** Failers
4614 defdef
4615 abcdef
4616
4617 /(?:a(?<quote> (?<apostrophe>')|(?<realquote>")) |b(?<quote> (?<apostrophe>')|(?<realquote>")) ) (?('quote')[a-z]+|[0-9]+)/xJ
4618 a\"aaaaa
4619 b\"aaaaa
4620 ** Failers
4621 b\"11111
4622
4623 /(?:(?1)|B)(A(*F)|C)/
4624 ABCD
4625 CCD
4626 ** Failers
4627 CAD
4628
4629 /^(?:(?1)|B)(A(*F)|C)/
4630 CCD
4631 BCD
4632 ** Failers
4633 ABCD
4634 CAD
4635 BAD
4636
4637 /(?:(?1)|B)(A(*ACCEPT)XX|C)D/
4638 AAD
4639 ACD
4640 BAD
4641 BCD
4642 BAX
4643 ** Failers
4644 ACX
4645 ABC
4646
4647 /(?(DEFINE)(A))B(?1)C/
4648 BAC
4649
4650 /(?(DEFINE)((A)\2))B(?1)C/
4651 BAAC
4652
4653 /(?<pn> \( ( [^()]++ | (?&pn) )* \) )/x
4654 (ab(cd)ef)
4655
4656 /^(?=a(*SKIP)b|ac)/
4657 ** Failers
4658 ac
4659
4660 /^(?=a(*PRUNE)b)/
4661 ab
4662 ** Failers
4663 ac
4664
4665 /^(?=a(*ACCEPT)b)/
4666 ac
4667
4668 /(?>a\Kb)/
4669 ab
4670
4671 /((?>a\Kb))/
4672 ab
4673
4674 /(a\Kb)/
4675 ab
4676
4677 /^a\Kcz|ac/
4678 ac
4679
4680 /(?>a\Kbz|ab)/
4681 ab
4682
4683 /^(?&t)(?(DEFINE)(?<t>a\Kb))$/
4684 ab
4685
4686 /^([^()]|\((?1)*\))*$/
4687 a(b)c
4688 a(b(c)d)e
4689
4690 /(?P<L1>(?P<L2>0)(?P>L1)|(?P>L2))/
4691 0
4692 00
4693 0000
4694
4695 /(?P<L1>(?P<L2>0)|(?P>L2)(?P>L1))/
4696 0
4697 00
4698 0000
4699
4700 /--- This one does fail, as expected, in Perl. It needs the complex item at the
4701 end of the pattern. A single letter instead of (B|D) makes it not fail,
4702 which I think is a Perl bug. --- /
4703
4704 /A(*COMMIT)(B|D)/
4705 ACABX
4706
4707 /--- Check the use of names for failure ---/
4708
4709 /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
4710 ** Failers
4711 AC
4712 CB
4713
4714 /--- Force no study, otherwise mark is not seen. The studied version is in
4715 test 2 because it isn't Perl-compatible. ---/
4716
4717 /(*MARK:A)(*SKIP:B)(C|X)/KSS
4718 C
4719 D
4720
4721 /^(A(*THEN:A)B|C(*THEN:B)D)/K
4722 ** Failers
4723 CB
4724
4725 /^(?:A(*THEN:A)B|C(*THEN:B)D)/K
4726 CB
4727
4728 /^(?>A(*THEN:A)B|C(*THEN:B)D)/K
4729 CB
4730
4731 /--- This should succeed, as the skip causes bump to offset 1 (the mark). Note
4732 that we have to have something complicated such as (B|Z) at the end because,
4733 for Perl, a simple character somehow causes an unwanted optimization to mess
4734 with the handling of backtracking verbs. ---/
4735
4736 /A(*MARK:A)A+(*SKIP:A)(B|Z) | AC/xK
4737 AAAC
4738
4739 /--- Test skipping over a non-matching mark. ---/
4740
4741 /A(*MARK:A)A+(*MARK:B)(*SKIP:A)(B|Z) | AC/xK
4742 AAAC
4743
4744 /--- Check shorthand for MARK ---/
4745
4746 /A(*:A)A+(*SKIP:A)(B|Z) | AC/xK
4747 AAAC
4748
4749 /--- Don't loop! Force no study, otherwise mark is not seen. ---/
4750
4751 /(*:A)A+(*SKIP:A)(B|Z)/KSS
4752 AAAC
4753
4754 /--- This should succeed, as a non-existent skip name disables the skip ---/
4755
4756 /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
4757 AAAC
4758
4759 /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC(*:B)/xK
4760 AAAC
4761
4762 /--- COMMIT at the start of a pattern should act like an anchor. Again,
4763 however, we need the complication for Perl. ---/
4764
4765 /(*COMMIT)(A|P)(B|P)(C|P)/
4766 ABCDEFG
4767 ** Failers
4768 DEFGABC
4769
4770 /--- COMMIT inside an atomic group can't stop backtracking over the group. ---/
4771
4772 /(\w+)(?>b(*COMMIT))\w{2}/
4773 abbb
4774
4775 /(\w+)b(*COMMIT)\w{2}/
4776 abbb
4777
4778 /--- Check opening parens in comment when seeking forward reference. ---/
4779
4780 /(?&t)(?#()(?(DEFINE)(?<t>a))/
4781 bac
4782
4783 /--- COMMIT should override THEN ---/
4784
4785 /(?>(*COMMIT)(?>yes|no)(*THEN)(*F))?/
4786 yes
4787
4788 /(?>(*COMMIT)(yes|no)(*THEN)(*F))?/
4789 yes
4790
4791 /b?(*SKIP)c/
4792 bc
4793 abc
4794
4795 /(*SKIP)bc/
4796 a
4797
4798 /(*SKIP)b/
4799 a
4800
4801 /(?P<abn>(?P=abn)xxx|)+/
4802 xxx
4803
4804 /(?i:([^b]))(?1)/
4805 aa
4806 aA
4807 ** Failers
4808 ab
4809 aB
4810 Ba
4811 ba
4812
4813 /^(?&t)*+(?(DEFINE)(?<t>a))\w$/
4814 aaaaaaX
4815 ** Failers
4816 aaaaaa
4817
4818 /^(?&t)*(?(DEFINE)(?<t>a))\w$/
4819 aaaaaaX
4820 aaaaaa
4821
4822 /^(a)*+(\w)/
4823 aaaaX
4824 YZ
4825 ** Failers
4826 aaaa
4827
4828 /^(?:a)*+(\w)/
4829 aaaaX
4830 YZ
4831 ** Failers
4832 aaaa
4833
4834 /^(a)++(\w)/
4835 aaaaX
4836 ** Failers
4837 aaaa
4838 YZ
4839
4840 /^(?:a)++(\w)/
4841 aaaaX
4842 ** Failers
4843 aaaa
4844 YZ
4845
4846 /^(a)?+(\w)/
4847 aaaaX
4848 YZ
4849
4850 /^(?:a)?+(\w)/
4851 aaaaX
4852 YZ
4853
4854 /^(a){2,}+(\w)/
4855 aaaaX
4856 ** Failers
4857 aaa
4858 YZ
4859
4860 /^(?:a){2,}+(\w)/
4861 aaaaX
4862 ** Failers
4863 aaa
4864 YZ
4865
4866 /(a|)*(?1)b/
4867 b
4868 ab
4869 aab
4870
4871 /(a)++(?1)b/
4872 ** Failers
4873 ab
4874 aab
4875
4876 /(a)*+(?1)b/
4877 ** Failers
4878 ab
4879 aab
4880
4881 /(?1)(?:(b)){0}/
4882 b
4883
4884 /(foo ( \( ((?:(?> [^()]+ )|(?2))*) \) ) )/x
4885 foo(bar(baz)+baz(bop))
4886
4887 /(A (A|B(*ACCEPT)|C) D)(E)/x
4888 AB
4889
4890 /\A.*?(a|bc)/
4891 ba
4892
4893 /\A.*?(?:a|bc)++/
4894 ba
4895
4896 /\A.*?(a|bc)++/
4897 ba
4898
4899 /\A.*?(?:a|bc|d)/
4900 ba
4901
4902 /(?:(b))++/
4903 beetle
4904
4905 /(?(?=(a(*ACCEPT)z))a)/
4906 a
4907
4908 /^(a)(?1)+ab/
4909 aaaab
4910
4911 /^(a)(?1)++ab/
4912 aaaab
4913
4914 /^(?=a(*:M))aZ/K
4915 aZbc
4916
4917 /^(?!(*:M)b)aZ/K
4918 aZbc
4919
4920 /(?(DEFINE)(a))?b(?1)/
4921 backgammon
4922
4923 /^\N+/
4924 abc\ndef
4925
4926 /^\N{1,}/
4927 abc\ndef
4928
4929 /(?(R)a+|(?R)b)/
4930 aaaabcde
4931
4932 /(?(R)a+|((?R))b)/
4933 aaaabcde
4934
4935 /((?(R)a+|(?1)b))/
4936 aaaabcde
4937
4938 /((?(R1)a+|(?1)b))/
4939 aaaabcde
4940
4941 /((?(R)a|(?1)))*/
4942 aaa
4943
4944 /((?(R)a|(?1)))+/
4945 aaa
4946
4947 /a(*:any
4948 name)/K
4949 abc
4950
4951 /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
4952 a
4953 ba
4954 bba
4955
4956 /--- Checking revised (*THEN) handling ---/
4957
4958 /--- Capture ---/
4959
4960 /^.*? (a(*THEN)b) c/x
4961 aabc
4962
4963 /^.*? (a(*THEN)b|(*F)) c/x
4964 aabc
4965
4966 /^.*? ( (a(*THEN)b) | (*F) ) c/x
4967 aabc
4968
4969 /^.*? ( (a(*THEN)b) ) c/x
4970 aabc
4971
4972 /--- Non-capture ---/
4973
4974 /^.*? (?:a(*THEN)b) c/x
4975 aabc
4976
4977 /^.*? (?:a(*THEN)b|(*F)) c/x
4978 aabc
4979
4980 /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
4981 aabc
4982
4983 /^.*? (?: (?:a(*THEN)b) ) c/x
4984 aabc
4985
4986 /--- Atomic ---/
4987
4988 /^.*? (?>a(*THEN)b) c/x
4989 aabc
4990
4991 /^.*? (?>a(*THEN)b|(*F)) c/x
4992 aabc
4993
4994 /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
4995 aabc
4996
4997 /^.*? (?> (?>a(*THEN)b) ) c/x
4998 aabc
4999
5000 /--- Possessive capture ---/
5001
5002 /^.*? (a(*THEN)b)++ c/x
5003 aabc
5004
5005 /^.*? (a(*THEN)b|(*F))++ c/x
5006 aabc
5007
5008 /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
5009 aabc
5010
5011 /^.*? ( (a(*THEN)b)++ )++ c/x
5012 aabc
5013
5014 /--- Possessive non-capture ---/
5015
5016 /^.*? (?:a(*THEN)b)++ c/x
5017 aabc
5018
5019 /^.*? (?:a(*THEN)b|(*F))++ c/x
5020 aabc
5021
5022 /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
5023 aabc
5024
5025 /^.*? (?: (?:a(*THEN)b)++ )++ c/x
5026 aabc
5027
5028 /--- Condition assertion ---/
5029
5030 /^(?(?=a(*THEN)b)ab|ac)/
5031 ac
5032
5033 /--- Condition ---/
5034
5035 /^.*?(?(?=a)a|b(*THEN)c)/
5036 ba
5037
5038 /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
5039 ba
5040
5041 /^.*?(?(?=a)a(*THEN)b|c)/
5042 ac
5043
5044 /--- Assertion ---/
5045
5046 /^.*(?=a(*THEN)b)/
5047 aabc
5048
5049 /------------------------------/
5050
5051 /(?>a(*:m))/imsxSK
5052 a
5053
5054 /(?>(a)(*:m))/imsxSK
5055 a
5056
5057 /(?<=a(*ACCEPT)b)c/
5058 xacd
5059
5060 /(?<=(a(*ACCEPT)b))c/
5061 xacd
5062
5063 /(?<=(a(*COMMIT)b))c/
5064 xabcd
5065 ** Failers
5066 xacd
5067
5068 /(?<!a(*FAIL)b)c/
5069 xcd
5070 acd
5071
5072 /(?<=a(*:N)b)c/K
5073 xabcd
5074
5075 /(?<=a(*PRUNE)b)c/
5076 xabcd
5077
5078 /(?<=a(*SKIP)b)c/
5079 xabcd
5080
5081 /(?<=a(*THEN)b)c/
5082 xabcd
5083
5084 /(a)(?2){2}(.)/
5085 abcd
5086
5087 /(*MARK:A)(*PRUNE:B)(C|X)/KS
5088 C
5089 D
5090
5091 /(*MARK:A)(*PRUNE:B)(C|X)/KSS
5092 C
5093 D
5094
5095 /(*MARK:A)(*THEN:B)(C|X)/KS
5096 C
5097 D
5098
5099 /(*MARK:A)(*THEN:B)(C|X)/KSY
5100 C
5101 D
5102
5103 /(*MARK:A)(*THEN:B)(C|X)/KSS
5104 C
5105 D
5106
5107 /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
5108
5109 /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
5110 AAAC
5111
5112 /--- Same --/
5113
5114 /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
5115 AAAC
5116
5117 /A(*:A)A+(*SKIP)(B|Z) | AC/xK
5118 AAAC
5119
5120 /--- This should fail, as a null name is the same as no name ---/
5121
5122 /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
5123 AAAC
5124
5125 /--- A check on what happens after hitting a mark and them bumping along to
5126 something that does not even start. Perl reports tags after the failures here,
5127 though it does not when the individual letters are made into something
5128 more complicated. ---/
5129
5130 /A(*:A)B|XX(*:B)Y/K
5131 AABC
5132 XXYZ
5133 ** Failers
5134 XAQQ
5135 XAQQXZZ
5136 AXQQQ
5137 AXXQQQ
5138
5139 /^(A(*THEN:A)B|C(*THEN:B)D)/K
5140 AB
5141 CD
5142 ** Failers
5143 AC
5144 CB
5145
5146 /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
5147 AB
5148 CD
5149 ** Failers
5150 AC
5151 CB
5152
5153 /--- An empty name does not pass back an empty string. It is the same as if no
5154 name were given. ---/
5155
5156 /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
5157 AB
5158 CD
5159
5160 /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
5161
5162 /A(*PRUNE:A)B/K
5163 ACAB
5164
5165 /--- Mark names can be duplicated ---/
5166
5167 /A(*:A)B|X(*:A)Y/K
5168 AABC
5169 XXYZ
5170
5171 /b(*:m)f|a(*:n)w/K
5172 aw
5173 ** Failers
5174 abc
5175
5176 /b(*:m)f|aw/K
5177 abaw
5178 ** Failers
5179 abc
5180 abax
5181
5182 /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
5183 AAAC
5184
5185 /a(*PRUNE:X)bc|qq/KY
5186 ** Failers
5187 axy
5188
5189 /a(*THEN:X)bc|qq/KY
5190 ** Failers
5191 axy
5192
5193 /(?=a(*MARK:A)b)..x/K
5194 abxy
5195 ** Failers
5196 abpq
5197
5198 /(?=a(*MARK:A)b)..(*:Y)x/K
5199 abxy
5200 ** Failers
5201 abpq
5202
5203 /(?=a(*PRUNE:A)b)..x/K
5204 abxy
5205 ** Failers
5206 abpq
5207
5208 /(?=a(*PRUNE:A)b)..(*:Y)x/K
5209 abxy
5210 ** Failers
5211 abpq
5212
5213 /(?=a(*THEN:A)b)..x/K
5214 abxy
5215 ** Failers
5216 abpq
5217
5218 /(?=a(*THEN:A)b)..(*:Y)x/K
5219 abxy
5220 ** Failers
5221 abpq
5222
5223 /(another)?(\1?)test/
5224 hello world test
5225
5226 /(another)?(\1+)test/
5227 hello world test
5228
5229 /(a(*COMMIT)b){0}a(?1)|aac/
5230 aac
5231
5232 /((?:a?)*)*c/
5233 aac
5234
5235 /((?>a?)*)*c/
5236 aac
5237
5238 /(?>.*?a)(?<=ba)/
5239 aba
5240
5241 /(?:.*?a)(?<=ba)/
5242 aba
5243
5244 /.*?a(*PRUNE)b/
5245 aab
5246
5247 /.*?a(*PRUNE)b/s
5248 aab
5249
5250 /^a(*PRUNE)b/s
5251 aab
5252
5253 /.*?a(*SKIP)b/
5254 aab
5255
5256 /(?>.*?a)b/s
5257 aab
5258
5259 /(?>.*?a)b/
5260 aab
5261
5262 /(?>^a)b/s
5263 aab
5264
5265 /(?>.*?)(?<=(abcd)|(wxyz))/
5266 alphabetabcd
5267 endingwxyz
5268
5269 /(?>.*)(?<=(abcd)|(wxyz))/
5270 alphabetabcd
5271 endingwxyz
5272
5273 "(?>.*)foo"
5274 abcdfooxyz
5275
5276 "(?>.*?)foo"
5277 abcdfooxyz
5278
5279 /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
5280 ac
5281
5282 /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
5283 ac
5284
5285 /(?<=(*SKIP)ac)a/
5286 aa
5287
5288 /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
5289 AAAC
5290
5291 /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
5292 acacd
5293
5294 /A(*SKIP:m)x|A(*SKIP:n)x|AB/K
5295 AB
5296
5297 /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
5298 acacd
5299
5300 /-- Tests that try to figure out how Perl works. My hypothesis is that the
5301 first verb that is backtracked onto is the one that acts. This seems to be
5302 the case almost all the time, but there is one exception that is perhaps a
5303 bug. --/
5304
5305 /-- This matches "aaaac"; each PRUNE advances one character until the subject
5306 no longer starts with 5 'a's. --/
5307
5308 /aaaaa(*PRUNE)b|a+c/
5309 aaaaaac
5310
5311 /-- Putting SKIP in front of PRUNE makes no difference, as it is never
5312 backtracked onto, whether or not it has a label. --/
5313
5314 /aaaaa(*SKIP)(*PRUNE)b|a+c/
5315 aaaaaac
5316
5317 /aaaaa(*SKIP:N)(*PRUNE)b|a+c/
5318 aaaaaac
5319
5320 /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
5321 aaaaaac
5322
5323 /-- Putting THEN in front makes no difference. */
5324
5325 /aaaaa(*THEN)(*PRUNE)b|a+c/
5326 aaaaaac
5327
5328 /-- However, putting COMMIT in front of the prune changes it to "no match". I
5329 think this is inconsistent and possibly a bug. For the moment, running this
5330 test is moved out of the Perl-compatible file. --/
5331
5332 /aaaaa(*COMMIT)(*PRUNE)b|a+c/
5333
5334
5335 /---- OK, lets play the same game again using SKIP instead of PRUNE. ----/
5336
5337 /-- This matches "ac" because SKIP forces the next match to start on the
5338 sixth "a". --/
5339
5340 /aaaaa(*SKIP)b|a+c/
5341 aaaaaac
5342
5343 /-- Putting PRUNE in front makes no difference. --/
5344
5345 /aaaaa(*PRUNE)(*SKIP)b|a+c/
5346 aaaaaac
5347
5348 /-- Putting THEN in front makes no difference. --/
5349
5350 /aaaaa(*THEN)(*SKIP)b|a+c/
5351 aaaaaac
5352
5353 /-- In this case, neither does COMMIT. This still matches "ac". --/
5354
5355 /aaaaa(*COMMIT)(*SKIP)b|a+c/
5356 aaaaaac
5357
5358 /-- This gives "no match", as expected. --/
5359
5360 /aaaaa(*COMMIT)b|a+c/
5361 aaaaaac
5362
5363
5364 /------ Tests using THEN ------/
5365
5366 /-- This matches "aaaaaac", as expected. --/
5367
5368 /aaaaa(*THEN)b|a+c/
5369 aaaaaac
5370
5371 /-- Putting SKIP in front makes no difference. --/
5372
5373 /aaaaa(*SKIP)(*THEN)b|a+c/
5374 aaaaaac
5375
5376 /-- Putting PRUNE in front makes no difference. --/
5377
5378 /aaaaa(*PRUNE)(*THEN)b|a+c/
5379 aaaaaac
5380
5381 /-- Putting COMMIT in front makes no difference. --/
5382
5383 /aaaaa(*COMMIT)(*THEN)b|a+c/
5384 aaaaaac
5385
5386 /-- End of "priority" tests --/
5387
5388 /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
5389 aaaaaa
5390
5391 /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5392 aaaaaa
5393
5394 /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
5395 aaaaaa
5396
5397 /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5398 aaaaaa
5399
5400 /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
5401 aaaac
5402
5403 /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
5404 aaaac
5405
5406 /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
5407 aaaac
5408
5409 /aaa(*MARK:A)a(*SKIP:A)b|a+c/
5410 aaaac
5411
5412 /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
5413 aaaaaac
5414
5415 /.?(a|b(*THEN)c)/
5416 ba
5417
5418 /(a(*COMMIT)b)c|abd/
5419 abc
5420 abd
5421
5422 /(?=a(*COMMIT)b)abc|abd/
5423 abc
5424 abd
5425
5426 /(?>a(*COMMIT)b)c|abd/
5427 abc
5428 abd
5429
5430 /a(?=b(*COMMIT)c)[^d]|abd/
5431 abd
5432 abc
5433
5434 /a(?=bc).|abd/
5435 abd
5436 abc
5437
5438 /a(?>b(*COMMIT)c)d|abd/
5439 abceabd
5440
5441 /a(?>bc)d|abd/
5442 abceabd
5443
5444 /(?>a(*COMMIT)b)c|abd/
5445 abd
5446
5447 /(?>a(*COMMIT)c)d|abd/
5448 abd
5449
5450 /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
5451 ac
5452
5453 /-- These tests were formerly in test 2, but changes in PCRE and Perl have
5454 made them compatible. --/
5455
5456 /^(a)?(?(1)a|b)+$/
5457 *** Failers
5458 a
5459
5460 /(?=a\Kb)ab/
5461 ab
5462
5463 /(?!a\Kb)ac/
5464 ac
5465
5466 /^abc(?<=b\Kc)d/
5467 abcd
5468
5469 /^abc(?<!b\Kq)d/
5470 abcd
5471
5472
5473 /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
5474 AAAC
5475
5476 /^((abc|abcx)(*THEN)y|abcd)/
5477 abcd
5478 *** Failers
5479 abcxy
5480
5481 /^((yes|no)(*THEN)(*F))?/
5482 yes
5483
5484 /(A (.*) C? (*THEN) | A D) (*FAIL)/x
5485 AbcdCBefgBhiBqz
5486
5487 /(A (.*) C? (*THEN) | A D) z/x
5488 AbcdCBefgBhiBqz
5489
5490 /(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
5491 AbcdCBefgBhiBqz
5492
5493 /(A (.*) C? (*THEN) | A D) \s* z/x
5494 AbcdCBefgBhiBqz
5495
5496 /(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
5497 AbcdCBefgBhiBqz
5498
5499 /(A (.*) (?:C|) (*THEN) | A D) z/x
5500 AbcdCBefgBhiBqz
5501
5502 /(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
5503 AbcdCBefgBhiBqz
5504
5505 /(A (.*) C{0,6} (*THEN) | A D) z/x
5506 AbcdCBefgBhiBqz
5507
5508 /(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
5509 AbcdCEBefgBhiBqz
5510
5511 /(A (.*) (CE){0,6} (*THEN) | A D) z/x
5512 AbcdCEBefgBhiBqz
5513
5514 /(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
5515 AbcdCBefgBhiBqz
5516
5517 /(A (.*) (CE*){0,6} (*THEN) | A D) z/x
5518 AbcdCBefgBhiBqz
5519
5520 /(?=a(*COMMIT)b|ac)ac|ac/
5521 ac
5522
5523 /(?=a(*COMMIT)b|(ac)) ac | (a)c/x
5524 ac
5525
5526 /--------/
5527
5528 /(?(?!b(*THEN)a)bn|bnn)/
5529 bnn
5530
5531 /(?!b(*SKIP)a)bn|bnn/
5532 bnn
5533
5534 /(?(?!b(*SKIP)a)bn|bnn)/
5535 bnn
5536
5537 /(?!b(*PRUNE)a)bn|bnn/
5538 bnn
5539
5540 /(?(?!b(*PRUNE)a)bn|bnn)/
5541 bnn
5542
5543 /(?!b(*COMMIT)a)bn|bnn/
5544 bnn
5545
5546 /(?(?!b(*COMMIT)a)bn|bnn)/
5547 bnn
5548
5549 /(?=b(*SKIP)a)bn|bnn/
5550 bnn
5551
5552 /(?=b(*THEN)a)bn|bnn/
5553 bnn
5554
5555 /^(?!a(*SKIP)b)/
5556 ac
5557
5558 /^(?!a(*SKIP)b)../
5559 acd
5560
5561 /(?!a(*SKIP)b)../
5562 acd
5563
5564 /^(?(?!a(*SKIP)b))/
5565 ac
5566
5567 /^(?!a(*PRUNE)b)../
5568 acd
5569
5570 /(?!a(*PRUNE)b)../
5571 acd
5572
5573 /(?!a(*COMMIT)b)ac|cd/
5574 ac
5575
5576 /\A.*?(?:a|bc)/
5577 ba
5578
5579 /^(A(*THEN)B|C(*THEN)D)/
5580 CD
5581
5582 /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5583 abc
5584
5585 /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5586 abc
5587
5588 /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5589 abc
5590
5591 /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5592 abc
5593
5594 /^\d*\w{4}/
5595 1234
5596 123
5597
5598 /^[^b]*\w{4}/
5599 aaaa
5600 aaa
5601
5602 /^[^b]*\w{4}/i
5603 aaaa
5604 aaa
5605
5606 /^a*\w{4}/
5607 aaaa
5608 aaa
5609
5610 /^a*\w{4}/i
5611 aaaa
5612 aaa
5613
5614 /(?(?=ab)ab)/+
5615 ca
5616 cd
5617
5618 /(?:(?<n>foo)|(?<n>bar))\k<n>/J
5619 foofoo
5620 barbar
5621
5622 /(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/J
5623 AfooA
5624 AbarA
5625 ** Failers
5626 Afoofoo
5627 Abarbar
5628
5629 /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
5630 1 IN SOA non-sp1 non-sp2(
5631
5632 /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/xJ
5633 Ax
5634 BAxy
5635
5636 /^A\xZ/
5637 A\0Z
5638
5639 /^A\o{123}B/
5640 A\123B
5641
5642 / ^ a + + b $ /x
5643 aaaab
5644
5645 / ^ a + #comment
5646 + b $ /x
5647 aaaab
5648
5649 / ^ a + #comment
5650 #comment
5651 + b $ /x
5652 aaaab
5653
5654 / ^ (?> a + ) b $ /x
5655 aaaab
5656
5657 / ^ ( a + ) + + \w $ /x
5658 aaaab
5659
5660 /(?:a\Kb)*+/+
5661 ababc
5662
5663 /(?>a\Kb)*/+
5664 ababc
5665
5666 /(?:a\Kb)*/+
5667 ababc
5668
5669 /(a\Kb)*+/+
5670 ababc
5671
5672 /(a\Kb)*/+
5673 ababc
5674
5675 /(?:x|(?:(xx|yy)+|x|x|x|x|x)|a|a|a)bc/
5676 acb
5677
5678 '\A(?:[^\"]++|\"(?:[^\"]*+|\"\")*+\")++'
5679 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5680
5681 '\A(?:[^\"]++|\"(?:[^\"]++|\"\")*+\")++'
5682 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5683
5684 '\A(?:[^\"]++|\"(?:[^\"]++|\"\")++\")++'
5685 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5686
5687 '\A([^\"1]++|[\"2]([^\"3]*+|[\"4][\"5])*+[\"6])++'
5688 NON QUOTED \"QUOT\"\"ED\" AFTER \"NOT MATCHED
5689
5690 /^\w+(?>\s*)(?<=\w)/
5691 test test
5692
5693 /(?P<same>a)(?P<same>b)/gJ
5694 abbaba
5695
5696 /(?P<same>a)(?P<same>b)(?P=same)/gJ
5697 abbaba
5698
5699 /(?P=same)?(?P<same>a)(?P<same>b)/gJ
5700 abbaba
5701
5702 /(?:(?P=same)?(?:(?P<same>a)|(?P<same>b))(?P=same))+/gJ
5703 bbbaaabaabb
5704
5705 /(?:(?P=same)?(?:(?P=same)(?P<same>a)(?P=same)|(?P=same)?(?P<same>b)(?P=same)){2}(?P=same)(?P<same>c)(?P=same)){2}(?P<same>z)?/gJ
5706 bbbaaaccccaaabbbcc
5707
5708 /(?P<Name>a)?(?P<Name2>b)?(?(<Name>)c|d)*l/
5709 acl
5710 bdl
5711 adl
5712 bcl
5713
5714 /\sabc/
5715 \x{0b}abc
5716
5717 /[\Qa]\E]+/
5718 aa]]
5719
5720 /[\Q]a\E]+/
5721 aa]]
5722
5723 /(?:((abcd))|(((?:(?:(?:(?:abc|(?:abcdef))))b)abcdefghi)abc)|((*ACCEPT)))/
5724 1234abcd
5725
5726 /-- End of testinput1 --/

Properties

Name Value
svn:keywords "Author Date Id Revision Url"

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12