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

Contents of /code/trunk/testdata/testinput1

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1399 - (show annotations) (download)
Tue Nov 12 16:03:01 2013 UTC (5 months, 1 week ago) by ph10
File size: 98378 byte(s)
Wrong modifier messages in pcretest to go to stdout; update which modifiers are 
forbidden in Perl-compatible tests.

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{\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 /a(*:any
4942 name)/K
4943 abc
4944
4945 /(?>(?&t)c|(?&t))(?(DEFINE)(?<t>a|b(*PRUNE)c))/
4946 a
4947 ba
4948 bba
4949
4950 /--- Checking revised (*THEN) handling ---/
4951
4952 /--- Capture ---/
4953
4954 /^.*? (a(*THEN)b) c/x
4955 aabc
4956
4957 /^.*? (a(*THEN)b|(*F)) c/x
4958 aabc
4959
4960 /^.*? ( (a(*THEN)b) | (*F) ) c/x
4961 aabc
4962
4963 /^.*? ( (a(*THEN)b) ) c/x
4964 aabc
4965
4966 /--- Non-capture ---/
4967
4968 /^.*? (?:a(*THEN)b) c/x
4969 aabc
4970
4971 /^.*? (?:a(*THEN)b|(*F)) c/x
4972 aabc
4973
4974 /^.*? (?: (?:a(*THEN)b) | (*F) ) c/x
4975 aabc
4976
4977 /^.*? (?: (?:a(*THEN)b) ) c/x
4978 aabc
4979
4980 /--- Atomic ---/
4981
4982 /^.*? (?>a(*THEN)b) c/x
4983 aabc
4984
4985 /^.*? (?>a(*THEN)b|(*F)) c/x
4986 aabc
4987
4988 /^.*? (?> (?>a(*THEN)b) | (*F) ) c/x
4989 aabc
4990
4991 /^.*? (?> (?>a(*THEN)b) ) c/x
4992 aabc
4993
4994 /--- Possessive capture ---/
4995
4996 /^.*? (a(*THEN)b)++ c/x
4997 aabc
4998
4999 /^.*? (a(*THEN)b|(*F))++ c/x
5000 aabc
5001
5002 /^.*? ( (a(*THEN)b)++ | (*F) )++ c/x
5003 aabc
5004
5005 /^.*? ( (a(*THEN)b)++ )++ c/x
5006 aabc
5007
5008 /--- Possessive non-capture ---/
5009
5010 /^.*? (?:a(*THEN)b)++ c/x
5011 aabc
5012
5013 /^.*? (?:a(*THEN)b|(*F))++ c/x
5014 aabc
5015
5016 /^.*? (?: (?:a(*THEN)b)++ | (*F) )++ c/x
5017 aabc
5018
5019 /^.*? (?: (?:a(*THEN)b)++ )++ c/x
5020 aabc
5021
5022 /--- Condition assertion ---/
5023
5024 /^(?(?=a(*THEN)b)ab|ac)/
5025 ac
5026
5027 /--- Condition ---/
5028
5029 /^.*?(?(?=a)a|b(*THEN)c)/
5030 ba
5031
5032 /^.*?(?:(?(?=a)a|b(*THEN)c)|d)/
5033 ba
5034
5035 /^.*?(?(?=a)a(*THEN)b|c)/
5036 ac
5037
5038 /--- Assertion ---/
5039
5040 /^.*(?=a(*THEN)b)/
5041 aabc
5042
5043 /------------------------------/
5044
5045 /(?>a(*:m))/imsxSK
5046 a
5047
5048 /(?>(a)(*:m))/imsxSK
5049 a
5050
5051 /(?<=a(*ACCEPT)b)c/
5052 xacd
5053
5054 /(?<=(a(*ACCEPT)b))c/
5055 xacd
5056
5057 /(?<=(a(*COMMIT)b))c/
5058 xabcd
5059 ** Failers
5060 xacd
5061
5062 /(?<!a(*FAIL)b)c/
5063 xcd
5064 acd
5065
5066 /(?<=a(*:N)b)c/K
5067 xabcd
5068
5069 /(?<=a(*PRUNE)b)c/
5070 xabcd
5071
5072 /(?<=a(*SKIP)b)c/
5073 xabcd
5074
5075 /(?<=a(*THEN)b)c/
5076 xabcd
5077
5078 /(a)(?2){2}(.)/
5079 abcd
5080
5081 /(*MARK:A)(*PRUNE:B)(C|X)/KS
5082 C
5083 D
5084
5085 /(*MARK:A)(*PRUNE:B)(C|X)/KSS
5086 C
5087 D
5088
5089 /(*MARK:A)(*THEN:B)(C|X)/KS
5090 C
5091 D
5092
5093 /(*MARK:A)(*THEN:B)(C|X)/KSY
5094 C
5095 D
5096
5097 /(*MARK:A)(*THEN:B)(C|X)/KSS
5098 C
5099 D
5100
5101 /--- This should fail, as the skip causes a bump to offset 3 (the skip) ---/
5102
5103 /A(*MARK:A)A+(*SKIP)(B|Z) | AC/xK
5104 AAAC
5105
5106 /--- Same --/
5107
5108 /A(*MARK:A)A+(*MARK:B)(*SKIP:B)(B|Z) | AC/xK
5109 AAAC
5110
5111 /A(*:A)A+(*SKIP)(B|Z) | AC/xK
5112 AAAC
5113
5114 /--- This should fail, as a null name is the same as no name ---/
5115
5116 /A(*MARK:A)A+(*SKIP:)(B|Z) | AC/xK
5117 AAAC
5118
5119 /--- A check on what happens after hitting a mark and them bumping along to
5120 something that does not even start. Perl reports tags after the failures here,
5121 though it does not when the individual letters are made into something
5122 more complicated. ---/
5123
5124 /A(*:A)B|XX(*:B)Y/K
5125 AABC
5126 XXYZ
5127 ** Failers
5128 XAQQ
5129 XAQQXZZ
5130 AXQQQ
5131 AXXQQQ
5132
5133 /^(A(*THEN:A)B|C(*THEN:B)D)/K
5134 AB
5135 CD
5136 ** Failers
5137 AC
5138 CB
5139
5140 /^(A(*PRUNE:A)B|C(*PRUNE:B)D)/K
5141 AB
5142 CD
5143 ** Failers
5144 AC
5145 CB
5146
5147 /--- An empty name does not pass back an empty string. It is the same as if no
5148 name were given. ---/
5149
5150 /^(A(*PRUNE:)B|C(*PRUNE:B)D)/K
5151 AB
5152 CD
5153
5154 /--- PRUNE goes to next bumpalong; COMMIT does not. ---/
5155
5156 /A(*PRUNE:A)B/K
5157 ACAB
5158
5159 /--- Mark names can be duplicated ---/
5160
5161 /A(*:A)B|X(*:A)Y/K
5162 AABC
5163 XXYZ
5164
5165 /b(*:m)f|a(*:n)w/K
5166 aw
5167 ** Failers
5168 abc
5169
5170 /b(*:m)f|aw/K
5171 abaw
5172 ** Failers
5173 abc
5174 abax
5175
5176 /A(*MARK:A)A+(*SKIP:B)(B|Z) | AAC/xK
5177 AAAC
5178
5179 /a(*PRUNE:X)bc|qq/KY
5180 ** Failers
5181 axy
5182
5183 /a(*THEN:X)bc|qq/KY
5184 ** Failers
5185 axy
5186
5187 /(?=a(*MARK:A)b)..x/K
5188 abxy
5189 ** Failers
5190 abpq
5191
5192 /(?=a(*MARK:A)b)..(*:Y)x/K
5193 abxy
5194 ** Failers
5195 abpq
5196
5197 /(?=a(*PRUNE:A)b)..x/K
5198 abxy
5199 ** Failers
5200 abpq
5201
5202 /(?=a(*PRUNE:A)b)..(*:Y)x/K
5203 abxy
5204 ** Failers
5205 abpq
5206
5207 /(?=a(*THEN:A)b)..x/K
5208 abxy
5209 ** Failers
5210 abpq
5211
5212 /(?=a(*THEN:A)b)..(*:Y)x/K
5213 abxy
5214 ** Failers
5215 abpq
5216
5217 /(another)?(\1?)test/
5218 hello world test
5219
5220 /(another)?(\1+)test/
5221 hello world test
5222
5223 /(a(*COMMIT)b){0}a(?1)|aac/
5224 aac
5225
5226 /((?:a?)*)*c/
5227 aac
5228
5229 /((?>a?)*)*c/
5230 aac
5231
5232 /(?>.*?a)(?<=ba)/
5233 aba
5234
5235 /(?:.*?a)(?<=ba)/
5236 aba
5237
5238 /.*?a(*PRUNE)b/
5239 aab
5240
5241 /.*?a(*PRUNE)b/s
5242 aab
5243
5244 /^a(*PRUNE)b/s
5245 aab
5246
5247 /.*?a(*SKIP)b/
5248 aab
5249
5250 /(?>.*?a)b/s
5251 aab
5252
5253 /(?>.*?a)b/
5254 aab
5255
5256 /(?>^a)b/s
5257 aab
5258
5259 /(?>.*?)(?<=(abcd)|(wxyz))/
5260 alphabetabcd
5261 endingwxyz
5262
5263 /(?>.*)(?<=(abcd)|(wxyz))/
5264 alphabetabcd
5265 endingwxyz
5266
5267 "(?>.*)foo"
5268 abcdfooxyz
5269
5270 "(?>.*?)foo"
5271 abcdfooxyz
5272
5273 /(?:(a(*PRUNE)b)){0}(?:(?1)|ac)/
5274 ac
5275
5276 /(?:(a(*SKIP)b)){0}(?:(?1)|ac)/
5277 ac
5278
5279 /(?<=(*SKIP)ac)a/
5280 aa
5281
5282 /A(*MARK:A)A+(*SKIP:B)(B|Z) | AC/xK
5283 AAAC
5284
5285 /a(*SKIP:m)x|ac(*:n)(*SKIP:n)d|ac/K
5286 acacd
5287
5288 /A(*SKIP:m)x|A(*SKIP:n)x|AB/K
5289 AB
5290
5291 /((*SKIP:r)d){0}a(*SKIP:m)x|ac(*:n)|ac/K
5292 acacd
5293
5294 /-- Tests that try to figure out how Perl works. My hypothesis is that the
5295 first verb that is backtracked onto is the one that acts. This seems to be
5296 the case almost all the time, but there is one exception that is perhaps a
5297 bug. --/
5298
5299 /-- This matches "aaaac"; each PRUNE advances one character until the subject
5300 no longer starts with 5 'a's. --/
5301
5302 /aaaaa(*PRUNE)b|a+c/
5303 aaaaaac
5304
5305 /-- Putting SKIP in front of PRUNE makes no difference, as it is never
5306 backtracked onto, whether or not it has a label. --/
5307
5308 /aaaaa(*SKIP)(*PRUNE)b|a+c/
5309 aaaaaac
5310
5311 /aaaaa(*SKIP:N)(*PRUNE)b|a+c/
5312 aaaaaac
5313
5314 /aaaa(*:N)a(*SKIP:N)(*PRUNE)b|a+c/
5315 aaaaaac
5316
5317 /-- Putting THEN in front makes no difference. */
5318
5319 /aaaaa(*THEN)(*PRUNE)b|a+c/
5320 aaaaaac
5321
5322 /-- However, putting COMMIT in front of the prune changes it to "no match". I
5323 think this is inconsistent and possibly a bug. For the moment, running this
5324 test is moved out of the Perl-compatible file. --/
5325
5326 /aaaaa(*COMMIT)(*PRUNE)b|a+c/
5327
5328
5329 /---- OK, lets play the same game again using SKIP instead of PRUNE. ----/
5330
5331 /-- This matches "ac" because SKIP forces the next match to start on the
5332 sixth "a". --/
5333
5334 /aaaaa(*SKIP)b|a+c/
5335 aaaaaac
5336
5337 /-- Putting PRUNE in front makes no difference. --/
5338
5339 /aaaaa(*PRUNE)(*SKIP)b|a+c/
5340 aaaaaac
5341
5342 /-- Putting THEN in front makes no difference. --/
5343
5344 /aaaaa(*THEN)(*SKIP)b|a+c/
5345 aaaaaac
5346
5347 /-- In this case, neither does COMMIT. This still matches "ac". --/
5348
5349 /aaaaa(*COMMIT)(*SKIP)b|a+c/
5350 aaaaaac
5351
5352 /-- This gives "no match", as expected. --/
5353
5354 /aaaaa(*COMMIT)b|a+c/
5355 aaaaaac
5356
5357
5358 /------ Tests using THEN ------/
5359
5360 /-- This matches "aaaaaac", as expected. --/
5361
5362 /aaaaa(*THEN)b|a+c/
5363 aaaaaac
5364
5365 /-- Putting SKIP in front makes no difference. --/
5366
5367 /aaaaa(*SKIP)(*THEN)b|a+c/
5368 aaaaaac
5369
5370 /-- Putting PRUNE in front makes no difference. --/
5371
5372 /aaaaa(*PRUNE)(*THEN)b|a+c/
5373 aaaaaac
5374
5375 /-- Putting COMMIT in front makes no difference. --/
5376
5377 /aaaaa(*COMMIT)(*THEN)b|a+c/
5378 aaaaaac
5379
5380 /-- End of "priority" tests --/
5381
5382 /aaaaa(*:m)(*PRUNE:m)(*SKIP:m)m|a+/
5383 aaaaaa
5384
5385 /aaaaa(*:m)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5386 aaaaaa
5387
5388 /aaaaa(*:n)(*PRUNE:m)(*SKIP:m)m|a+/
5389 aaaaaa
5390
5391 /aaaaa(*:n)(*MARK:m)(*PRUNE)(*SKIP:m)m|a+/
5392 aaaaaa
5393
5394 /a(*MARK:A)aa(*PRUNE:A)a(*SKIP:A)b|a+c/
5395 aaaac
5396
5397 /a(*MARK:A)aa(*MARK:A)a(*SKIP:A)b|a+c/
5398 aaaac
5399
5400 /aaa(*PRUNE:A)a(*SKIP:A)b|a+c/
5401 aaaac
5402
5403 /aaa(*MARK:A)a(*SKIP:A)b|a+c/
5404 aaaac
5405
5406 /a(*:m)a(*COMMIT)(*SKIP:m)b|a+c/K
5407 aaaaaac
5408
5409 /.?(a|b(*THEN)c)/
5410 ba
5411
5412 /(a(*COMMIT)b)c|abd/
5413 abc
5414 abd
5415
5416 /(?=a(*COMMIT)b)abc|abd/
5417 abc
5418 abd
5419
5420 /(?>a(*COMMIT)b)c|abd/
5421 abc
5422 abd
5423
5424 /a(?=b(*COMMIT)c)[^d]|abd/
5425 abd
5426 abc
5427
5428 /a(?=bc).|abd/
5429 abd
5430 abc
5431
5432 /a(?>b(*COMMIT)c)d|abd/
5433 abceabd
5434
5435 /a(?>bc)d|abd/
5436 abceabd
5437
5438 /(?>a(*COMMIT)b)c|abd/
5439 abd
5440
5441 /(?>a(*COMMIT)c)d|abd/
5442 abd
5443
5444 /((?=a(*COMMIT)b)ab|ac){0}(?:(?1)|a(c))/
5445 ac
5446
5447 /-- These tests were formerly in test 2, but changes in PCRE and Perl have
5448 made them compatible. --/
5449
5450 /^(a)?(?(1)a|b)+$/
5451 *** Failers
5452 a
5453
5454 /(?=a\Kb)ab/
5455 ab
5456
5457 /(?!a\Kb)ac/
5458 ac
5459
5460 /^abc(?<=b\Kc)d/
5461 abcd
5462
5463 /^abc(?<!b\Kq)d/
5464 abcd
5465
5466
5467 /A(*PRUNE:A)A+(*SKIP:A)(B|Z) | AC/xK
5468 AAAC
5469
5470 /^((abc|abcx)(*THEN)y|abcd)/
5471 abcd
5472 *** Failers
5473 abcxy
5474
5475 /^((yes|no)(*THEN)(*F))?/
5476 yes
5477
5478 /(A (.*) C? (*THEN) | A D) (*FAIL)/x
5479 AbcdCBefgBhiBqz
5480
5481 /(A (.*) C? (*THEN) | A D) z/x
5482 AbcdCBefgBhiBqz
5483
5484 /(A (.*) C? (*THEN) | A D) \s* (*FAIL)/x
5485 AbcdCBefgBhiBqz
5486
5487 /(A (.*) C? (*THEN) | A D) \s* z/x
5488 AbcdCBefgBhiBqz
5489
5490 /(A (.*) (?:C|) (*THEN) | A D) (*FAIL)/x
5491 AbcdCBefgBhiBqz
5492
5493 /(A (.*) (?:C|) (*THEN) | A D) z/x
5494 AbcdCBefgBhiBqz
5495
5496 /(A (.*) C{0,6} (*THEN) | A D) (*FAIL)/x
5497 AbcdCBefgBhiBqz
5498
5499 /(A (.*) C{0,6} (*THEN) | A D) z/x
5500 AbcdCBefgBhiBqz
5501
5502 /(A (.*) (CE){0,6} (*THEN) | A D) (*FAIL)/x
5503 AbcdCEBefgBhiBqz
5504
5505 /(A (.*) (CE){0,6} (*THEN) | A D) z/x
5506 AbcdCEBefgBhiBqz
5507
5508 /(A (.*) (CE*){0,6} (*THEN) | A D) (*FAIL)/x
5509 AbcdCBefgBhiBqz
5510
5511 /(A (.*) (CE*){0,6} (*THEN) | A D) z/x
5512 AbcdCBefgBhiBqz
5513
5514 /(?=a(*COMMIT)b|ac)ac|ac/
5515 ac
5516
5517 /(?=a(*COMMIT)b|(ac)) ac | (a)c/x
5518 ac
5519
5520 /--------/
5521
5522 /(?(?!b(*THEN)a)bn|bnn)/
5523 bnn
5524
5525 /(?!b(*SKIP)a)bn|bnn/
5526 bnn
5527
5528 /(?(?!b(*SKIP)a)bn|bnn)/
5529 bnn
5530
5531 /(?!b(*PRUNE)a)bn|bnn/
5532 bnn
5533
5534 /(?(?!b(*PRUNE)a)bn|bnn)/
5535 bnn
5536
5537 /(?!b(*COMMIT)a)bn|bnn/
5538 bnn
5539
5540 /(?(?!b(*COMMIT)a)bn|bnn)/
5541 bnn
5542
5543 /(?=b(*SKIP)a)bn|bnn/
5544 bnn
5545
5546 /(?=b(*THEN)a)bn|bnn/
5547 bnn
5548
5549 /^(?!a(*SKIP)b)/
5550 ac
5551
5552 /^(?!a(*SKIP)b)../
5553 acd
5554
5555 /(?!a(*SKIP)b)../
5556 acd
5557
5558 /^(?(?!a(*SKIP)b))/
5559 ac
5560
5561 /^(?!a(*PRUNE)b)../
5562 acd
5563
5564 /(?!a(*PRUNE)b)../
5565 acd
5566
5567 /(?!a(*COMMIT)b)ac|cd/
5568 ac
5569
5570 /\A.*?(?:a|bc)/
5571 ba
5572
5573 /^(A(*THEN)B|C(*THEN)D)/
5574 CD
5575
5576 /(*:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5577 abc
5578
5579 /(*PRUNE:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5580 abc
5581
5582 /(*SKIP:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5583 abc
5584
5585 /(*THEN:m(m)(?&y)(?(DEFINE)(?<y>b))/K
5586 abc
5587
5588 /^\d*\w{4}/
5589 1234
5590 123
5591
5592 /^[^b]*\w{4}/
5593 aaaa
5594 aaa
5595
5596 /^[^b]*\w{4}/i
5597 aaaa
5598 aaa
5599
5600 /^a*\w{4}/
5601 aaaa
5602 aaa
5603
5604 /^a*\w{4}/i
5605 aaaa
5606 aaa
5607
5608 /(?(?=ab)ab)/+
5609 ca
5610 cd
5611
5612 /(?:(?<n>foo)|(?<n>bar))\k<n>/J
5613 foofoo
5614 barbar
5615
5616 /(?<n>A)(?:(?<n>foo)|(?<n>bar))\k<n>/J
5617 AfooA
5618 AbarA
5619 ** Failers
5620 Afoofoo
5621 Abarbar
5622
5623 /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
5624 1 IN SOA non-sp1 non-sp2(
5625
5626 /^ (?:(?<A>A)|(?'B'B)(?<A>A)) (?('A')x) (?(<B>)y)$/xJ
5627 Ax
5628 BAxy
5629
5630 /^A\xZ/
5631 A\0Z
5632
5633 /^A\o{123}B/
5634 A\123B
5635
5636 / ^ a + + b $ /x
5637 aaaab
5638
5639 / ^ a + #comment
5640 + b $ /x
5641 aaaab
5642
5643 / ^ a + #comment
5644 #comment
5645 + b $ /x
5646 aaaab
5647
5648 / ^ (?> a + ) b $ /x
5649 aaaab
5650
5651 / ^ ( a + ) + + \w $ /x
5652 aaaab
5653
5654 /(?:a\Kb)*+/+
5655 ababc
5656
5657 /(?>a\Kb)*/+
5658 ababc
5659
5660 /(?:a\Kb)*/+
5661 ababc
5662
5663 /(a\Kb)*+/+
5664 ababc
5665
5666 /(a\Kb)*/+
5667 ababc
5668
5669 /-- End of testinput1 --/

Properties

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

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12