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

Contents of /code/trunk/testdata/testinput1

Parent Directory Parent Directory | Revision Log Revision Log


Revision 618 - (hide annotations) (download)
Sat Jul 16 17:24:16 2011 UTC (3 years, 3 months ago) by ph10
File size: 77495 byte(s)
Re-do atomic group processing to fix backtrack capture bugs. Recursion is also 
re-worked.

1 ph10 450 /-- This set of tests is for features that are compatible with all versions of
2     Perl 5, in non-UTF-8 mode. --/
3    
4 nigel 41 /the quick brown fox/
5     the quick brown fox
6     The quick brown FOX
7     What do you know about the quick brown fox?
8     What do you know about THE QUICK BROWN FOX?
9    
10     /The quick brown fox/i
11     the quick brown fox
12     The quick brown FOX
13     What do you know about the quick brown fox?
14     What do you know about THE QUICK BROWN FOX?
15    
16     /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
17     abcd\t\n\r\f\a\e9;\$\\?caxyz
18    
19     /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
20     abxyzpqrrrabbxyyyypqAzz
21     abxyzpqrrrabbxyyyypqAzz
22     aabxyzpqrrrabbxyyyypqAzz
23     aaabxyzpqrrrabbxyyyypqAzz
24     aaaabxyzpqrrrabbxyyyypqAzz
25     abcxyzpqrrrabbxyyyypqAzz
26     aabcxyzpqrrrabbxyyyypqAzz
27     aaabcxyzpqrrrabbxyyyypAzz
28     aaabcxyzpqrrrabbxyyyypqAzz
29     aaabcxyzpqrrrabbxyyyypqqAzz
30     aaabcxyzpqrrrabbxyyyypqqqAzz
31     aaabcxyzpqrrrabbxyyyypqqqqAzz
32     aaabcxyzpqrrrabbxyyyypqqqqqAzz
33     aaabcxyzpqrrrabbxyyyypqqqqqqAzz
34     aaaabcxyzpqrrrabbxyyyypqAzz
35     abxyzzpqrrrabbxyyyypqAzz
36     aabxyzzzpqrrrabbxyyyypqAzz
37     aaabxyzzzzpqrrrabbxyyyypqAzz
38     aaaabxyzzzzpqrrrabbxyyyypqAzz
39     abcxyzzpqrrrabbxyyyypqAzz
40     aabcxyzzzpqrrrabbxyyyypqAzz
41     aaabcxyzzzzpqrrrabbxyyyypqAzz
42     aaaabcxyzzzzpqrrrabbxyyyypqAzz
43     aaaabcxyzzzzpqrrrabbbxyyyypqAzz
44     aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
45     aaabcxyzpqrrrabbxyyyypABzz
46     aaabcxyzpqrrrabbxyyyypABBzz
47     >>>aaabxyzpqrrrabbxyyyypqAzz
48     >aaaabxyzpqrrrabbxyyyypqAzz
49     >>>>abcxyzpqrrrabbxyyyypqAzz
50     *** Failers
51     abxyzpqrrabbxyyyypqAzz
52     abxyzpqrrrrabbxyyyypqAzz
53     abxyzpqrrrabxyyyypqAzz
54     aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
55     aaaabcxyzzzzpqrrrabbbxyyypqAzz
56     aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
57    
58     /^(abc){1,2}zz/
59     abczz
60     abcabczz
61     *** Failers
62     zz
63     abcabcabczz
64     >>abczz
65    
66     /^(b+?|a){1,2}?c/
67     bc
68     bbc
69     bbbc
70     bac
71     bbac
72     aac
73     abbbbbbbbbbbc
74     bbbbbbbbbbbac
75     *** Failers
76     aaac
77     abbbbbbbbbbbac
78    
79     /^(b+|a){1,2}c/
80     bc
81     bbc
82     bbbc
83     bac
84     bbac
85     aac
86     abbbbbbbbbbbc
87     bbbbbbbbbbbac
88     *** Failers
89     aaac
90     abbbbbbbbbbbac
91    
92     /^(b+|a){1,2}?bc/
93     bbc
94    
95     /^(b*|ba){1,2}?bc/
96     babc
97     bbabc
98     bababc
99     *** Failers
100     bababbc
101     babababc
102    
103     /^(ba|b*){1,2}?bc/
104     babc
105     bbabc
106     bababc
107     *** Failers
108     bababbc
109     babababc
110    
111     /^\ca\cA\c[\c{\c:/
112     \x01\x01\e;z
113    
114     /^[ab\]cde]/
115     athing
116     bthing
117     ]thing
118     cthing
119     dthing
120     ething
121     *** Failers
122     fthing
123     [thing
124     \\thing
125    
126     /^[]cde]/
127     ]thing
128     cthing
129     dthing
130     ething
131     *** Failers
132     athing
133     fthing
134    
135     /^[^ab\]cde]/
136     fthing
137     [thing
138     \\thing
139     *** Failers
140     athing
141     bthing
142     ]thing
143     cthing
144     dthing
145     ething
146    
147     /^[^]cde]/
148     athing
149     fthing
150     *** Failers
151     ]thing
152     cthing
153     dthing
154     ething
155    
156     /^\/
157    
158    
159     /^/
160    
161    
162     /^[0-9]+$/
163     0
164     1
165     2
166     3
167     4
168     5
169     6
170     7
171     8
172     9
173     10
174     100
175     *** Failers
176     abc
177    
178     /^.*nter/
179     enter
180     inter
181     uponter
182    
183     /^xxx[0-9]+$/
184     xxx0
185     xxx1234
186     *** Failers
187     xxx
188    
189     /^.+[0-9][0-9][0-9]$/
190     x123
191     xx123
192     123456
193     *** Failers
194     123
195     x1234
196    
197     /^.+?[0-9][0-9][0-9]$/
198     x123
199     xx123
200     123456
201     *** Failers
202     123
203     x1234
204    
205     /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
206     abc!pqr=apquxz.ixr.zzz.ac.uk
207     *** Failers
208     !pqr=apquxz.ixr.zzz.ac.uk
209     abc!=apquxz.ixr.zzz.ac.uk
210     abc!pqr=apquxz:ixr.zzz.ac.uk
211     abc!pqr=apquxz.ixr.zzz.ac.ukk
212    
213     /:/
214     Well, we need a colon: somewhere
215     *** Fail if we don't
216    
217     /([\da-f:]+)$/i
218     0abc
219     abc
220     fed
221     E
222     ::
223     5f03:12C0::932e
224     fed def
225     Any old stuff
226     *** Failers
227     0zzz
228     gzzz
229     fed\x20
230     Any old rubbish
231    
232     /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
233     .1.2.3
234     A.12.123.0
235     *** Failers
236     .1.2.3333
237     1.2.3
238     1234.2.3
239    
240     /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
241     1 IN SOA non-sp1 non-sp2(
242     1 IN SOA non-sp1 non-sp2 (
243     *** Failers
244     1IN SOA non-sp1 non-sp2(
245    
246     /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
247     a.
248     Z.
249     2.
250     ab-c.pq-r.
251     sxk.zzz.ac.uk.
252     x-.y-.
253     *** Failers
254     -abc.peq.
255    
256     /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
257     *.a
258     *.b0-a
259     *.c3-b.c
260     *.c-a.b-c
261     *** Failers
262     *.0
263     *.a-
264     *.a-b.c-
265     *.c-a.0-c
266    
267     /^(?=ab(de))(abd)(e)/
268     abde
269    
270     /^(?!(ab)de|x)(abd)(f)/
271     abdf
272    
273     /^(?=(ab(cd)))(ab)/
274     abcd
275    
276     /^[\da-f](\.[\da-f])*$/i
277     a.b.c.d
278     A.B.C.D
279     a.b.c.1.2.3.C
280    
281     /^\".*\"\s*(;.*)?$/
282     \"1234\"
283     \"abcd\" ;
284     \"\" ; rhubarb
285     *** Failers
286     \"1234\" : things
287    
288     /^$/
289     \
290     *** Failers
291    
292     / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
293     ab c
294     *** Failers
295     abc
296     ab cde
297    
298     /(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
299     ab c
300     *** Failers
301     abc
302     ab cde
303    
304     /^ a\ b[c ]d $/x
305     a bcd
306     a b d
307     *** Failers
308     abcd
309     ab d
310    
311     /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
312     abcdefhijklm
313    
314     /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
315     abcdefhijklm
316    
317     /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
318     a+ Z0+\x08\n\x1d\x12
319    
320     /^[.^$|()*+?{,}]+/
321     .^\$(*+)|{?,?}
322    
323     /^a*\w/
324     z
325     az
326     aaaz
327     a
328     aa
329     aaaa
330     a+
331     aa+
332    
333     /^a*?\w/
334     z
335     az
336     aaaz
337     a
338     aa
339     aaaa
340     a+
341     aa+
342    
343     /^a+\w/
344     az
345     aaaz
346     aa
347     aaaa
348     aa+
349    
350     /^a+?\w/
351     az
352     aaaz
353     aa
354     aaaa
355     aa+
356    
357     /^\d{8}\w{2,}/
358     1234567890
359     12345678ab
360     12345678__
361     *** Failers
362     1234567
363    
364     /^[aeiou\d]{4,5}$/
365     uoie
366     1234
367     12345
368     aaaaa
369     *** Failers
370     123456
371    
372     /^[aeiou\d]{4,5}?/
373     uoie
374     1234
375     12345
376     aaaaa
377     123456
378    
379     /\A(abc|def)=(\1){2,3}\Z/
380     abc=abcabc
381     def=defdefdef
382     *** Failers
383     abc=defdef
384    
385     /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
386     abcdefghijkcda2
387     abcdefghijkkkkcda2
388    
389     /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
390     cataract cataract23
391     catatonic catatonic23
392     caterpillar caterpillar23
393    
394    
395     /^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]/
396     From abcd Mon Sep 01 12:33:02 1997
397    
398     /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
399     From abcd Mon Sep 01 12:33:02 1997
400     From abcd Mon Sep 1 12:33:02 1997
401     *** Failers
402     From abcd Sep 01 12:33:02 1997
403    
404     /^12.34/s
405     12\n34
406     12\r34
407    
408     /\w+(?=\t)/
409     the quick brown\t fox
410    
411     /foo(?!bar)(.*)/
412     foobar is foolish see?
413    
414     /(?:(?!foo)...|^.{0,2})bar(.*)/
415     foobar crowbar etc
416     barrel
417     2barrel
418     A barrel
419    
420     /^(\D*)(?=\d)(?!123)/
421     abc456
422     *** Failers
423     abc123
424    
425     /^1234(?# test newlines
426     inside)/
427     1234
428    
429     /^1234 #comment in extended re
430     /x
431     1234
432    
433     /#rhubarb
434     abcd/x
435     abcd
436    
437     /^abcd#rhubarb/x
438     abcd
439    
440     /^(a)\1{2,3}(.)/
441     aaab
442     aaaab
443     aaaaab
444     aaaaaab
445    
446     /(?!^)abc/
447     the abc
448     *** Failers
449     abc
450    
451     /(?=^)abc/
452     abc
453     *** Failers
454     the abc
455    
456     /^[ab]{1,3}(ab*|b)/
457     aabbbbb
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     / (?: [\040\t] | \(
469     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
470     \) )* # optional leading comment
471     (?: (?:
472     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
473     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
474     |
475     " (?: # opening quote...
476     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
477     | # or
478     \\ [^\x80-\xff] # Escaped something (something != CR)
479     )* " # closing quote
480     ) # initial word
481     (?: (?: [\040\t] | \(
482     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
483     \) )* \. (?: [\040\t] | \(
484     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
485     \) )* (?:
486     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
487     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
488     |
489     " (?: # opening quote...
490     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
491     | # or
492     \\ [^\x80-\xff] # Escaped something (something != CR)
493     )* " # closing quote
494     ) )* # further okay, if led by a period
495     (?: [\040\t] | \(
496     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
497     \) )* @ (?: [\040\t] | \(
498     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
499     \) )* (?:
500     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
501     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
502     | \[ # [
503     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
504     \] # ]
505     ) # initial subdomain
506     (?: #
507     (?: [\040\t] | \(
508     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
509     \) )* \. # if led by a period...
510     (?: [\040\t] | \(
511     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
512     \) )* (?:
513     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
514     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
515     | \[ # [
516     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
517     \] # ]
518     ) # ...further okay
519     )*
520     # address
521     | # or
522     (?:
523     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
524     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
525     |
526     " (?: # opening quote...
527     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
528     | # or
529     \\ [^\x80-\xff] # Escaped something (something != CR)
530     )* " # closing quote
531     ) # one word, optionally followed by....
532     (?:
533     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
534     \(
535     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
536     \) | # comments, or...
537    
538     " (?: # opening quote...
539     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
540     | # or
541     \\ [^\x80-\xff] # Escaped something (something != CR)
542     )* " # closing quote
543     # quoted strings
544     )*
545     < (?: [\040\t] | \(
546     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
547     \) )* # leading <
548     (?: @ (?: [\040\t] | \(
549     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
550     \) )* (?:
551     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
552     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
553     | \[ # [
554     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
555     \] # ]
556     ) # initial subdomain
557     (?: #
558     (?: [\040\t] | \(
559     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
560     \) )* \. # if led by a period...
561     (?: [\040\t] | \(
562     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
563     \) )* (?:
564     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
565     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
566     | \[ # [
567     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
568     \] # ]
569     ) # ...further okay
570     )*
571    
572     (?: (?: [\040\t] | \(
573     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
574     \) )* , (?: [\040\t] | \(
575     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
576     \) )* @ (?: [\040\t] | \(
577     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
578     \) )* (?:
579     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
580     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
581     | \[ # [
582     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
583     \] # ]
584     ) # initial subdomain
585     (?: #
586     (?: [\040\t] | \(
587     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
588     \) )* \. # if led by a period...
589     (?: [\040\t] | \(
590     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
591     \) )* (?:
592     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
593     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
594     | \[ # [
595     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
596     \] # ]
597     ) # ...further okay
598     )*
599     )* # further okay, if led by comma
600     : # closing colon
601     (?: [\040\t] | \(
602     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
603     \) )* )? # optional route
604     (?:
605     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
606     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
607     |
608     " (?: # opening quote...
609     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
610     | # or
611     \\ [^\x80-\xff] # Escaped something (something != CR)
612     )* " # closing quote
613     ) # initial word
614     (?: (?: [\040\t] | \(
615     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
616     \) )* \. (?: [\040\t] | \(
617     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
618     \) )* (?:
619     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
620     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
621     |
622     " (?: # opening quote...
623     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
624     | # or
625     \\ [^\x80-\xff] # Escaped something (something != CR)
626     )* " # closing quote
627     ) )* # further okay, if led by a period
628     (?: [\040\t] | \(
629     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
630     \) )* @ (?: [\040\t] | \(
631     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
632     \) )* (?:
633     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
634     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
635     | \[ # [
636     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
637     \] # ]
638     ) # initial subdomain
639     (?: #
640     (?: [\040\t] | \(
641     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
642     \) )* \. # if led by a period...
643     (?: [\040\t] | \(
644     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
645     \) )* (?:
646     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
647     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
648     | \[ # [
649     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
650     \] # ]
651     ) # ...further okay
652     )*
653     # address spec
654     (?: [\040\t] | \(
655     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
656     \) )* > # trailing >
657     # name and address
658     ) (?: [\040\t] | \(
659     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
660     \) )* # optional trailing comment
661     /x
662     Alan Other <user\@dom.ain>
663     <user\@dom.ain>
664     user\@dom.ain
665     \"A. Other\" <user.1234\@dom.ain> (a comment)
666     A. Other <user.1234\@dom.ain> (a comment)
667     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
668     A missing angle <user\@some.where
669     *** Failers
670     The quick brown fox
671    
672     /[\040\t]* # Nab whitespace.
673     (?:
674     \( # (
675     [^\\\x80-\xff\n\015()] * # normal*
676     (?: # (
677     (?: \\ [^\x80-\xff] |
678     \( # (
679     [^\\\x80-\xff\n\015()] * # normal*
680     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
681     \) # )
682     ) # special
683     [^\\\x80-\xff\n\015()] * # normal*
684     )* # )*
685     \) # )
686     [\040\t]* )* # If comment found, allow more spaces.
687     # optional leading comment
688     (?:
689     (?:
690     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
691     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
692     # Atom
693     | # or
694     " # "
695     [^\\\x80-\xff\n\015"] * # normal
696     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
697     " # "
698     # Quoted string
699     )
700     [\040\t]* # Nab whitespace.
701     (?:
702     \( # (
703     [^\\\x80-\xff\n\015()] * # normal*
704     (?: # (
705     (?: \\ [^\x80-\xff] |
706     \( # (
707     [^\\\x80-\xff\n\015()] * # normal*
708     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
709     \) # )
710     ) # special
711     [^\\\x80-\xff\n\015()] * # normal*
712     )* # )*
713     \) # )
714     [\040\t]* )* # If comment found, allow more spaces.
715     (?:
716     \.
717     [\040\t]* # Nab whitespace.
718     (?:
719     \( # (
720     [^\\\x80-\xff\n\015()] * # normal*
721     (?: # (
722     (?: \\ [^\x80-\xff] |
723     \( # (
724     [^\\\x80-\xff\n\015()] * # normal*
725     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
726     \) # )
727     ) # special
728     [^\\\x80-\xff\n\015()] * # normal*
729     )* # )*
730     \) # )
731     [\040\t]* )* # If comment found, allow more spaces.
732     (?:
733     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
734     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
735     # Atom
736     | # or
737     " # "
738     [^\\\x80-\xff\n\015"] * # normal
739     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
740     " # "
741     # Quoted string
742     )
743     [\040\t]* # Nab whitespace.
744     (?:
745     \( # (
746     [^\\\x80-\xff\n\015()] * # normal*
747     (?: # (
748     (?: \\ [^\x80-\xff] |
749     \( # (
750     [^\\\x80-\xff\n\015()] * # normal*
751     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
752     \) # )
753     ) # special
754     [^\\\x80-\xff\n\015()] * # normal*
755     )* # )*
756     \) # )
757     [\040\t]* )* # If comment found, allow more spaces.
758     # additional words
759     )*
760     @
761     [\040\t]* # Nab whitespace.
762     (?:
763     \( # (
764     [^\\\x80-\xff\n\015()] * # normal*
765     (?: # (
766     (?: \\ [^\x80-\xff] |
767     \( # (
768     [^\\\x80-\xff\n\015()] * # normal*
769     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
770     \) # )
771     ) # special
772     [^\\\x80-\xff\n\015()] * # normal*
773     )* # )*
774     \) # )
775     [\040\t]* )* # If comment found, allow more spaces.
776     (?:
777     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
778     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
779     |
780     \[ # [
781     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
782     \] # ]
783     )
784     [\040\t]* # Nab whitespace.
785     (?:
786     \( # (
787     [^\\\x80-\xff\n\015()] * # normal*
788     (?: # (
789     (?: \\ [^\x80-\xff] |
790     \( # (
791     [^\\\x80-\xff\n\015()] * # normal*
792     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
793     \) # )
794     ) # special
795     [^\\\x80-\xff\n\015()] * # normal*
796     )* # )*
797     \) # )
798     [\040\t]* )* # If comment found, allow more spaces.
799     # optional trailing comments
800     (?:
801     \.
802     [\040\t]* # Nab whitespace.
803     (?:
804     \( # (
805     [^\\\x80-\xff\n\015()] * # normal*
806     (?: # (
807     (?: \\ [^\x80-\xff] |
808     \( # (
809     [^\\\x80-\xff\n\015()] * # normal*
810     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
811     \) # )
812     ) # special
813     [^\\\x80-\xff\n\015()] * # normal*
814     )* # )*
815     \) # )
816     [\040\t]* )* # If comment found, allow more spaces.
817     (?:
818     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
819     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
820     |
821     \[ # [
822     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
823     \] # ]
824     )
825     [\040\t]* # Nab whitespace.
826     (?:
827     \( # (
828     [^\\\x80-\xff\n\015()] * # normal*
829     (?: # (
830     (?: \\ [^\x80-\xff] |
831     \( # (
832     [^\\\x80-\xff\n\015()] * # normal*
833     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
834     \) # )
835     ) # special
836     [^\\\x80-\xff\n\015()] * # normal*
837     )* # )*
838     \) # )
839     [\040\t]* )* # If comment found, allow more spaces.
840     # optional trailing comments
841     )*
842     # address
843     | # or
844     (?:
845     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
846     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
847     # Atom
848     | # or
849     " # "
850     [^\\\x80-\xff\n\015"] * # normal
851     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
852     " # "
853     # Quoted string
854     )
855     # leading word
856     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
857     (?:
858     (?:
859     \( # (
860     [^\\\x80-\xff\n\015()] * # normal*
861     (?: # (
862     (?: \\ [^\x80-\xff] |
863     \( # (
864     [^\\\x80-\xff\n\015()] * # normal*
865     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
866     \) # )
867     ) # special
868     [^\\\x80-\xff\n\015()] * # normal*
869     )* # )*
870     \) # )
871     |
872     " # "
873     [^\\\x80-\xff\n\015"] * # normal
874     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
875     " # "
876     ) # "special" comment or quoted string
877     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
878     )*
879     <
880     [\040\t]* # Nab whitespace.
881     (?:
882     \( # (
883     [^\\\x80-\xff\n\015()] * # normal*
884     (?: # (
885     (?: \\ [^\x80-\xff] |
886     \( # (
887     [^\\\x80-\xff\n\015()] * # normal*
888     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
889     \) # )
890     ) # special
891     [^\\\x80-\xff\n\015()] * # normal*
892     )* # )*
893     \) # )
894     [\040\t]* )* # If comment found, allow more spaces.
895     # <
896     (?:
897     @
898     [\040\t]* # Nab whitespace.
899     (?:
900     \( # (
901     [^\\\x80-\xff\n\015()] * # normal*
902     (?: # (
903     (?: \\ [^\x80-\xff] |
904     \( # (
905     [^\\\x80-\xff\n\015()] * # normal*
906     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
907     \) # )
908     ) # special
909     [^\\\x80-\xff\n\015()] * # normal*
910     )* # )*
911     \) # )
912     [\040\t]* )* # If comment found, allow more spaces.
913     (?:
914     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
915     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
916     |
917     \[ # [
918     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
919     \] # ]
920     )
921     [\040\t]* # Nab whitespace.
922     (?:
923     \( # (
924     [^\\\x80-\xff\n\015()] * # normal*
925     (?: # (
926     (?: \\ [^\x80-\xff] |
927     \( # (
928     [^\\\x80-\xff\n\015()] * # normal*
929     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
930     \) # )
931     ) # special
932     [^\\\x80-\xff\n\015()] * # normal*
933     )* # )*
934     \) # )
935     [\040\t]* )* # If comment found, allow more spaces.
936     # optional trailing comments
937     (?:
938     \.
939     [\040\t]* # Nab whitespace.
940     (?:
941     \( # (
942     [^\\\x80-\xff\n\015()] * # normal*
943     (?: # (
944     (?: \\ [^\x80-\xff] |
945     \( # (
946     [^\\\x80-\xff\n\015()] * # normal*
947     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
948     \) # )
949     ) # special
950     [^\\\x80-\xff\n\015()] * # normal*
951     )* # )*
952     \) # )
953     [\040\t]* )* # If comment found, allow more spaces.
954     (?:
955     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
956     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
957     |
958     \[ # [
959     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
960     \] # ]
961     )
962     [\040\t]* # Nab whitespace.
963     (?:
964     \( # (
965     [^\\\x80-\xff\n\015()] * # normal*
966     (?: # (
967     (?: \\ [^\x80-\xff] |
968     \( # (
969     [^\\\x80-\xff\n\015()] * # normal*
970     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
971     \) # )
972     ) # special
973     [^\\\x80-\xff\n\015()] * # normal*
974     )* # )*
975     \) # )
976     [\040\t]* )* # If comment found, allow more spaces.
977     # optional trailing comments
978     )*
979     (?: ,
980     [\040\t]* # Nab whitespace.
981     (?:
982     \( # (
983     [^\\\x80-\xff\n\015()] * # normal*
984     (?: # (
985     (?: \\ [^\x80-\xff] |
986     \( # (
987     [^\\\x80-\xff\n\015()] * # normal*
988     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
989     \) # )
990     ) # special
991     [^\\\x80-\xff\n\015()] * # normal*
992     )* # )*
993     \) # )
994     [\040\t]* )* # If comment found, allow more spaces.
995     @
996     [\040\t]* # Nab whitespace.
997     (?:
998     \( # (
999     [^\\\x80-\xff\n\015()] * # normal*
1000     (?: # (
1001     (?: \\ [^\x80-\xff] |
1002     \( # (
1003     [^\\\x80-\xff\n\015()] * # normal*
1004     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1005     \) # )
1006     ) # special
1007     [^\\\x80-\xff\n\015()] * # normal*
1008     )* # )*
1009     \) # )
1010     [\040\t]* )* # If comment found, allow more spaces.
1011     (?:
1012     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1013     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1014     |
1015     \[ # [
1016     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1017     \] # ]
1018     )
1019     [\040\t]* # Nab whitespace.
1020     (?:
1021     \( # (
1022     [^\\\x80-\xff\n\015()] * # normal*
1023     (?: # (
1024     (?: \\ [^\x80-\xff] |
1025     \( # (
1026     [^\\\x80-\xff\n\015()] * # normal*
1027     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1028     \) # )
1029     ) # special
1030     [^\\\x80-\xff\n\015()] * # normal*
1031     )* # )*
1032     \) # )
1033     [\040\t]* )* # If comment found, allow more spaces.
1034     # optional trailing comments
1035     (?:
1036     \.
1037     [\040\t]* # Nab whitespace.
1038     (?:
1039     \( # (
1040     [^\\\x80-\xff\n\015()] * # normal*
1041     (?: # (
1042     (?: \\ [^\x80-\xff] |
1043     \( # (
1044     [^\\\x80-\xff\n\015()] * # normal*
1045     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1046     \) # )
1047     ) # special
1048     [^\\\x80-\xff\n\015()] * # normal*
1049     )* # )*
1050     \) # )
1051     [\040\t]* )* # If comment found, allow more spaces.
1052     (?:
1053     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1054     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1055     |
1056     \[ # [
1057     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1058     \] # ]
1059     )
1060     [\040\t]* # Nab whitespace.
1061     (?:
1062     \( # (
1063     [^\\\x80-\xff\n\015()] * # normal*
1064     (?: # (
1065     (?: \\ [^\x80-\xff] |
1066     \( # (
1067     [^\\\x80-\xff\n\015()] * # normal*
1068     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1069     \) # )
1070     ) # special
1071     [^\\\x80-\xff\n\015()] * # normal*
1072     )* # )*
1073     \) # )
1074     [\040\t]* )* # If comment found, allow more spaces.
1075     # optional trailing comments
1076     )*
1077     )* # additional domains
1078     :
1079     [\040\t]* # Nab whitespace.
1080     (?:
1081     \( # (
1082     [^\\\x80-\xff\n\015()] * # normal*
1083     (?: # (
1084     (?: \\ [^\x80-\xff] |
1085     \( # (
1086     [^\\\x80-\xff\n\015()] * # normal*
1087     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1088     \) # )
1089     ) # special
1090     [^\\\x80-\xff\n\015()] * # normal*
1091     )* # )*
1092     \) # )
1093     [\040\t]* )* # If comment found, allow more spaces.
1094     # optional trailing comments
1095     )? # optional route
1096     (?:
1097     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1098     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1099     # Atom
1100     | # or
1101     " # "
1102     [^\\\x80-\xff\n\015"] * # normal
1103     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1104     " # "
1105     # Quoted string
1106     )
1107     [\040\t]* # Nab whitespace.
1108     (?:
1109     \( # (
1110     [^\\\x80-\xff\n\015()] * # normal*
1111     (?: # (
1112     (?: \\ [^\x80-\xff] |
1113     \( # (
1114     [^\\\x80-\xff\n\015()] * # normal*
1115     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1116     \) # )
1117     ) # special
1118     [^\\\x80-\xff\n\015()] * # normal*
1119     )* # )*
1120     \) # )
1121     [\040\t]* )* # If comment found, allow more spaces.
1122     (?:
1123     \.
1124     [\040\t]* # Nab whitespace.
1125     (?:
1126     \( # (
1127     [^\\\x80-\xff\n\015()] * # normal*
1128     (?: # (
1129     (?: \\ [^\x80-\xff] |
1130     \( # (
1131     [^\\\x80-\xff\n\015()] * # normal*
1132     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1133     \) # )
1134     ) # special
1135     [^\\\x80-\xff\n\015()] * # normal*
1136     )* # )*
1137     \) # )
1138     [\040\t]* )* # If comment found, allow more spaces.
1139     (?:
1140     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1141     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1142     # Atom
1143     | # or
1144     " # "
1145     [^\\\x80-\xff\n\015"] * # normal
1146     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1147     " # "
1148     # Quoted string
1149     )
1150     [\040\t]* # Nab whitespace.
1151     (?:
1152     \( # (
1153     [^\\\x80-\xff\n\015()] * # normal*
1154     (?: # (
1155     (?: \\ [^\x80-\xff] |
1156     \( # (
1157     [^\\\x80-\xff\n\015()] * # normal*
1158     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1159     \) # )
1160     ) # special
1161     [^\\\x80-\xff\n\015()] * # normal*
1162     )* # )*
1163     \) # )
1164     [\040\t]* )* # If comment found, allow more spaces.
1165     # additional words
1166     )*
1167     @
1168     [\040\t]* # Nab whitespace.
1169     (?:
1170     \( # (
1171     [^\\\x80-\xff\n\015()] * # normal*
1172     (?: # (
1173     (?: \\ [^\x80-\xff] |
1174     \( # (
1175     [^\\\x80-\xff\n\015()] * # normal*
1176     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1177     \) # )
1178     ) # special
1179     [^\\\x80-\xff\n\015()] * # normal*
1180     )* # )*
1181     \) # )
1182     [\040\t]* )* # If comment found, allow more spaces.
1183     (?:
1184     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1185     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1186     |
1187     \[ # [
1188     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1189     \] # ]
1190     )
1191     [\040\t]* # Nab whitespace.
1192     (?:
1193     \( # (
1194     [^\\\x80-\xff\n\015()] * # normal*
1195     (?: # (
1196     (?: \\ [^\x80-\xff] |
1197     \( # (
1198     [^\\\x80-\xff\n\015()] * # normal*
1199     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1200     \) # )
1201     ) # special
1202     [^\\\x80-\xff\n\015()] * # normal*
1203     )* # )*
1204     \) # )
1205     [\040\t]* )* # If comment found, allow more spaces.
1206     # optional trailing comments
1207     (?:
1208     \.
1209     [\040\t]* # Nab whitespace.
1210     (?:
1211     \( # (
1212     [^\\\x80-\xff\n\015()] * # normal*
1213     (?: # (
1214     (?: \\ [^\x80-\xff] |
1215     \( # (
1216     [^\\\x80-\xff\n\015()] * # normal*
1217     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1218     \) # )
1219     ) # special
1220     [^\\\x80-\xff\n\015()] * # normal*
1221     )* # )*
1222     \) # )
1223     [\040\t]* )* # If comment found, allow more spaces.
1224     (?:
1225     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1226     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1227     |
1228     \[ # [
1229     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1230     \] # ]
1231     )
1232     [\040\t]* # Nab whitespace.
1233     (?:
1234     \( # (
1235     [^\\\x80-\xff\n\015()] * # normal*
1236     (?: # (
1237     (?: \\ [^\x80-\xff] |
1238     \( # (
1239     [^\\\x80-\xff\n\015()] * # normal*
1240     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1241     \) # )
1242     ) # special
1243     [^\\\x80-\xff\n\015()] * # normal*
1244     )* # )*
1245     \) # )
1246     [\040\t]* )* # If comment found, allow more spaces.
1247     # optional trailing comments
1248     )*
1249     # address spec
1250     > # >
1251     # name and address
1252     )
1253     /x
1254     Alan Other <user\@dom.ain>
1255     <user\@dom.ain>
1256     user\@dom.ain
1257     \"A. Other\" <user.1234\@dom.ain> (a comment)
1258     A. Other <user.1234\@dom.ain> (a comment)
1259     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1260     A missing angle <user\@some.where
1261     *** Failers
1262     The quick brown fox
1263    
1264     /abc\0def\00pqr\000xyz\0000AB/
1265     abc\0def\00pqr\000xyz\0000AB
1266     abc456 abc\0def\00pqr\000xyz\0000ABCDE
1267    
1268     /abc\x0def\x00pqr\x000xyz\x0000AB/
1269     abc\x0def\x00pqr\x000xyz\x0000AB
1270     abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
1271    
1272     /^[\000-\037]/
1273     \0A
1274     \01B
1275     \037C
1276    
1277     /\0*/
1278     \0\0\0\0
1279    
1280     /A\x0{2,3}Z/
1281     The A\x0\x0Z
1282     An A\0\x0\0Z
1283     *** Failers
1284     A\0Z
1285     A\0\x0\0\x0Z
1286    
1287     /^(cow|)\1(bell)/
1288     cowcowbell
1289     bell
1290     *** Failers
1291     cowbell
1292    
1293     /^\s/
1294     \040abc
1295     \x0cabc
1296     \nabc
1297     \rabc
1298     \tabc
1299     *** Failers
1300     abc
1301    
1302     /^a b
1303 nigel 93 c/x
1304 nigel 41 abc
1305    
1306     /^(a|)\1*b/
1307     ab
1308     aaaab
1309     b
1310     *** Failers
1311     acb
1312    
1313     /^(a|)\1+b/
1314     aab
1315     aaaab
1316     b
1317     *** Failers
1318     ab
1319    
1320     /^(a|)\1?b/
1321     ab
1322     aab
1323     b
1324     *** Failers
1325     acb
1326    
1327     /^(a|)\1{2}b/
1328     aaab
1329     b
1330     *** Failers
1331     ab
1332     aab
1333     aaaab
1334    
1335     /^(a|)\1{2,3}b/
1336     aaab
1337     aaaab
1338     b
1339     *** Failers
1340     ab
1341     aab
1342     aaaaab
1343    
1344     /ab{1,3}bc/
1345     abbbbc
1346     abbbc
1347     abbc
1348     *** Failers
1349     abc
1350     abbbbbc
1351    
1352     /([^.]*)\.([^:]*):[T ]+(.*)/
1353     track1.title:TBlah blah blah
1354    
1355     /([^.]*)\.([^:]*):[T ]+(.*)/i
1356     track1.title:TBlah blah blah
1357    
1358     /([^.]*)\.([^:]*):[t ]+(.*)/i
1359     track1.title:TBlah blah blah
1360    
1361     /^[W-c]+$/
1362     WXY_^abc
1363 nigel 63 *** Failers
1364 nigel 41 wxy
1365    
1366     /^[W-c]+$/i
1367     WXY_^abc
1368     wxy_^ABC
1369    
1370     /^[\x3f-\x5F]+$/i
1371     WXY_^abc
1372     wxy_^ABC
1373    
1374     /^abc$/m
1375     abc
1376     qqq\nabc
1377     abc\nzzz
1378     qqq\nabc\nzzz
1379    
1380     /^abc$/
1381     abc
1382     *** Failers
1383     qqq\nabc
1384     abc\nzzz
1385     qqq\nabc\nzzz
1386    
1387     /\Aabc\Z/m
1388     abc
1389     abc\n
1390     *** Failers
1391     qqq\nabc
1392     abc\nzzz
1393     qqq\nabc\nzzz
1394    
1395     /\A(.)*\Z/s
1396     abc\ndef
1397    
1398     /\A(.)*\Z/m
1399     *** Failers
1400     abc\ndef
1401    
1402     /(?:b)|(?::+)/
1403     b::c
1404     c::b
1405    
1406     /[-az]+/
1407     az-
1408     *** Failers
1409     b
1410    
1411     /[az-]+/
1412     za-
1413     *** Failers
1414     b
1415    
1416     /[a\-z]+/
1417     a-z
1418     *** Failers
1419     b
1420    
1421     /[a-z]+/
1422     abcdxyz
1423    
1424     /[\d-]+/
1425     12-34
1426     *** Failers
1427     aaa
1428    
1429     /[\d-z]+/
1430     12-34z
1431     *** Failers
1432     aaa
1433    
1434     /\x5c/
1435     \\
1436    
1437     /\x20Z/
1438     the Zoo
1439     *** Failers
1440     Zulu
1441    
1442     /(abc)\1/i
1443     abcabc
1444     ABCabc
1445     abcABC
1446    
1447     /ab{3cd/
1448     ab{3cd
1449    
1450     /ab{3,cd/
1451     ab{3,cd
1452    
1453     /ab{3,4a}cd/
1454     ab{3,4a}cd
1455    
1456     /{4,5a}bc/
1457     {4,5a}bc
1458    
1459     /abc$/
1460     abc
1461     abc\n
1462     *** Failers
1463     abc\ndef
1464    
1465     /(abc)\123/
1466     abc\x53
1467    
1468     /(abc)\223/
1469     abc\x93
1470    
1471     /(abc)\323/
1472     abc\xd3
1473    
1474 nigel 91 /(abc)\100/
1475 nigel 41 abc\x40
1476     abc\100
1477    
1478 nigel 91 /(abc)\1000/
1479 nigel 41 abc\x400
1480     abc\x40\x30
1481     abc\1000
1482     abc\100\x30
1483     abc\100\060
1484     abc\100\60
1485    
1486     /abc\81/
1487     abc\081
1488     abc\0\x38\x31
1489    
1490     /abc\91/
1491     abc\091
1492     abc\0\x39\x31
1493    
1494     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
1495     abcdefghijkllS
1496    
1497     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
1498     abcdefghijk\12S
1499    
1500 ph10 178 /ab\idef/
1501     abidef
1502 nigel 41
1503     /a{0}bc/
1504     bc
1505    
1506     /(a|(bc)){0,0}?xyz/
1507     xyz
1508    
1509     /abc[\10]de/
1510     abc\010de
1511    
1512     /abc[\1]de/
1513     abc\1de
1514    
1515     /(abc)[\1]de/
1516     abc\1de
1517    
1518 nigel 63 /(?s)a.b/
1519 nigel 41 a\nb
1520    
1521     /^([^a])([^\b])([^c]*)([^d]{3,4})/
1522     baNOTccccd
1523     baNOTcccd
1524     baNOTccd
1525     bacccd
1526     *** Failers
1527     anything
1528     b\bc
1529     baccd
1530    
1531     /[^a]/
1532     Abc
1533    
1534     /[^a]/i
1535     Abc
1536    
1537     /[^a]+/
1538     AAAaAbc
1539    
1540     /[^a]+/i
1541     AAAaAbc
1542    
1543     /[^a]+/
1544     bbb\nccc
1545    
1546     /[^k]$/
1547     abc
1548     *** Failers
1549     abk
1550    
1551     /[^k]{2,3}$/
1552     abc
1553     kbc
1554     kabc
1555     *** Failers
1556     abk
1557     akb
1558     akk
1559    
1560     /^\d{8,}\@.+[^k]$/
1561     12345678\@a.b.c.d
1562     123456789\@x.y.z
1563     *** Failers
1564     12345678\@x.y.uk
1565     1234567\@a.b.c.d
1566    
1567     /(a)\1{8,}/
1568     aaaaaaaaa
1569     aaaaaaaaaa
1570     *** Failers
1571     aaaaaaa
1572    
1573     /[^a]/
1574     aaaabcd
1575     aaAabcd
1576    
1577     /[^a]/i
1578     aaaabcd
1579     aaAabcd
1580    
1581     /[^az]/
1582     aaaabcd
1583     aaAabcd
1584    
1585     /[^az]/i
1586     aaaabcd
1587     aaAabcd
1588    
1589     /\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/
1590     \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
1591    
1592     /P[^*]TAIRE[^*]{1,6}?LL/
1593     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1594    
1595     /P[^*]TAIRE[^*]{1,}?LL/
1596     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1597    
1598     /(\.\d\d[1-9]?)\d+/
1599     1.230003938
1600     1.875000282
1601     1.235
1602    
1603     /(\.\d\d((?=0)|\d(?=\d)))/
1604     1.230003938
1605     1.875000282
1606     *** Failers
1607     1.235
1608    
1609     /a(?)b/
1610     ab
1611    
1612     /\b(foo)\s+(\w+)/i
1613     Food is on the foo table
1614    
1615     /foo(.*)bar/
1616     The food is under the bar in the barn.
1617    
1618     /foo(.*?)bar/
1619     The food is under the bar in the barn.
1620    
1621     /(.*)(\d*)/
1622     I have 2 numbers: 53147
1623    
1624     /(.*)(\d+)/
1625     I have 2 numbers: 53147
1626    
1627     /(.*?)(\d*)/
1628     I have 2 numbers: 53147
1629    
1630     /(.*?)(\d+)/
1631     I have 2 numbers: 53147
1632    
1633     /(.*)(\d+)$/
1634     I have 2 numbers: 53147
1635    
1636     /(.*?)(\d+)$/
1637     I have 2 numbers: 53147
1638    
1639     /(.*)\b(\d+)$/
1640     I have 2 numbers: 53147
1641    
1642     /(.*\D)(\d+)$/
1643     I have 2 numbers: 53147
1644    
1645     /^\D*(?!123)/
1646     ABC123
1647    
1648     /^(\D*)(?=\d)(?!123)/
1649     ABC445
1650     *** Failers
1651     ABC123
1652    
1653     /^[W-]46]/
1654     W46]789
1655     -46]789
1656     *** Failers
1657     Wall
1658     Zebra
1659     42
1660     [abcd]
1661     ]abcd[
1662    
1663     /^[W-\]46]/
1664     W46]789
1665     Wall
1666     Zebra
1667     Xylophone
1668     42
1669     [abcd]
1670     ]abcd[
1671     \\backslash
1672     *** Failers
1673     -46]789
1674     well
1675    
1676     /\d\d\/\d\d\/\d\d\d\d/
1677     01/01/2000
1678    
1679     /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
1680     word cat dog elephant mussel cow horse canary baboon snake shark otherword
1681     word cat dog elephant mussel cow horse canary baboon snake shark
1682    
1683     /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
1684     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
1685    
1686     /^(a){0,0}/
1687     bcd
1688     abc
1689     aab
1690    
1691     /^(a){0,1}/
1692     bcd
1693     abc
1694     aab
1695    
1696     /^(a){0,2}/
1697     bcd
1698     abc
1699     aab
1700    
1701     /^(a){0,3}/
1702     bcd
1703     abc
1704     aab
1705     aaa
1706    
1707     /^(a){0,}/
1708     bcd
1709     abc
1710     aab
1711     aaa
1712     aaaaaaaa
1713    
1714     /^(a){1,1}/
1715     bcd
1716     abc
1717     aab
1718    
1719     /^(a){1,2}/
1720     bcd
1721     abc
1722     aab
1723    
1724     /^(a){1,3}/
1725     bcd
1726     abc
1727     aab
1728     aaa
1729    
1730     /^(a){1,}/
1731     bcd
1732     abc
1733     aab
1734     aaa
1735     aaaaaaaa
1736    
1737     /.*\.gif/
1738     borfle\nbib.gif\nno
1739    
1740     /.{0,}\.gif/
1741     borfle\nbib.gif\nno
1742    
1743     /.*\.gif/m
1744     borfle\nbib.gif\nno
1745    
1746     /.*\.gif/s
1747     borfle\nbib.gif\nno
1748    
1749     /.*\.gif/ms
1750     borfle\nbib.gif\nno
1751    
1752     /.*$/
1753     borfle\nbib.gif\nno
1754    
1755     /.*$/m
1756     borfle\nbib.gif\nno
1757    
1758     /.*$/s
1759     borfle\nbib.gif\nno
1760    
1761     /.*$/ms
1762     borfle\nbib.gif\nno
1763    
1764     /.*$/
1765     borfle\nbib.gif\nno\n
1766    
1767     /.*$/m
1768     borfle\nbib.gif\nno\n
1769    
1770     /.*$/s
1771     borfle\nbib.gif\nno\n
1772    
1773     /.*$/ms
1774     borfle\nbib.gif\nno\n
1775    
1776     /(.*X|^B)/
1777     abcde\n1234Xyz
1778     BarFoo
1779     *** Failers
1780     abcde\nBar
1781    
1782     /(.*X|^B)/m
1783     abcde\n1234Xyz
1784     BarFoo
1785     abcde\nBar
1786    
1787     /(.*X|^B)/s
1788     abcde\n1234Xyz
1789     BarFoo
1790     *** Failers
1791     abcde\nBar
1792    
1793     /(.*X|^B)/ms
1794     abcde\n1234Xyz
1795     BarFoo
1796     abcde\nBar
1797    
1798     /(?s)(.*X|^B)/
1799     abcde\n1234Xyz
1800     BarFoo
1801     *** Failers
1802     abcde\nBar
1803    
1804     /(?s:.*X|^B)/
1805     abcde\n1234Xyz
1806     BarFoo
1807     *** Failers
1808     abcde\nBar
1809    
1810     /^.*B/
1811     **** Failers
1812     abc\nB
1813    
1814     /(?s)^.*B/
1815     abc\nB
1816    
1817     /(?m)^.*B/
1818     abc\nB
1819    
1820     /(?ms)^.*B/
1821     abc\nB
1822    
1823     /(?ms)^B/
1824     abc\nB
1825    
1826     /(?s)B$/
1827     B\n
1828    
1829     /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
1830     123456654321
1831    
1832     /^\d\d\d\d\d\d\d\d\d\d\d\d/
1833     123456654321
1834    
1835     /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
1836     123456654321
1837    
1838     /^[abc]{12}/
1839     abcabcabcabc
1840    
1841     /^[a-c]{12}/
1842     abcabcabcabc
1843    
1844     /^(a|b|c){12}/
1845     abcabcabcabc
1846    
1847     /^[abcdefghijklmnopqrstuvwxy0123456789]/
1848     n
1849     *** Failers
1850     z
1851    
1852     /abcde{0,0}/
1853     abcd
1854     *** Failers
1855     abce
1856    
1857     /ab[cd]{0,0}e/
1858     abe
1859     *** Failers
1860     abcde
1861    
1862     /ab(c){0,0}d/
1863     abd
1864     *** Failers
1865     abcd
1866    
1867     /a(b*)/
1868     a
1869     ab
1870     abbbb
1871     *** Failers
1872     bbbbb
1873    
1874     /ab\d{0}e/
1875     abe
1876     *** Failers
1877     ab1e
1878    
1879     /"([^\\"]+|\\.)*"/
1880     the \"quick\" brown fox
1881     \"the \\\"quick\\\" brown fox\"
1882    
1883     /.*?/g+
1884     abc
1885    
1886     /\b/g+
1887     abc
1888    
1889     /\b/+g
1890     abc
1891    
1892     //g
1893     abc
1894    
1895 nigel 49 /<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
1896     <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>
1897    
1898     /a[^a]b/
1899     acb
1900     a\nb
1901    
1902     /a.b/
1903     acb
1904     *** Failers
1905     a\nb
1906    
1907     /a[^a]b/s
1908     acb
1909     a\nb
1910    
1911     /a.b/s
1912     acb
1913     a\nb
1914    
1915 nigel 53 /^(b+?|a){1,2}?c/
1916     bac
1917     bbac
1918     bbbac
1919     bbbbac
1920     bbbbbac
1921    
1922     /^(b+|a){1,2}?c/
1923     bac
1924     bbac
1925     bbbac
1926     bbbbac
1927     bbbbbac
1928    
1929     /(?!\A)x/m
1930     x\nb\n
1931     a\bx\n
1932    
1933     /\x0{ab}/
1934     \0{ab}
1935    
1936 nigel 55 /(A|B)*?CD/
1937     CD
1938    
1939     /(A|B)*CD/
1940     CD
1941    
1942     /(AB)*?\1/
1943     ABABAB
1944    
1945     /(AB)*\1/
1946     ABABAB
1947    
1948 nigel 63 /(?<!bar)foo/
1949     foo
1950     catfood
1951     arfootle
1952     rfoosh
1953     *** Failers
1954     barfoo
1955     towbarfoo
1956    
1957     /\w{3}(?<!bar)foo/
1958     catfood
1959     *** Failers
1960     foo
1961     barfoo
1962     towbarfoo
1963    
1964     /(?<=(foo)a)bar/
1965     fooabar
1966     *** Failers
1967     bar
1968     foobbar
1969    
1970     /\Aabc\z/m
1971     abc
1972     *** Failers
1973     abc\n
1974     qqq\nabc
1975     abc\nzzz
1976     qqq\nabc\nzzz
1977    
1978     "(?>.*/)foo"
1979     /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
1980    
1981     "(?>.*/)foo"
1982     /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
1983    
1984     /(?>(\.\d\d[1-9]?))\d+/
1985     1.230003938
1986     1.875000282
1987     *** Failers
1988     1.235
1989    
1990     /^((?>\w+)|(?>\s+))*$/
1991     now is the time for all good men to come to the aid of the party
1992     *** Failers
1993     this is not a line with only words and spaces!
1994    
1995     /(\d+)(\w)/
1996     12345a
1997     12345+
1998    
1999     /((?>\d+))(\w)/
2000     12345a
2001     *** Failers
2002     12345+
2003    
2004     /(?>a+)b/
2005     aaab
2006    
2007     /((?>a+)b)/
2008     aaab
2009    
2010     /(?>(a+))b/
2011     aaab
2012    
2013     /(?>b)+/
2014     aaabbbccc
2015    
2016     /(?>a+|b+|c+)*c/
2017     aaabbbbccccd
2018    
2019     /((?>[^()]+)|\([^()]*\))+/
2020     ((abc(ade)ufh()()x
2021    
2022     /\(((?>[^()]+)|\([^()]+\))+\)/
2023     (abc)
2024     (abc(def)xyz)
2025     *** Failers
2026     ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2027    
2028     /a(?-i)b/i
2029     ab
2030     Ab
2031     *** Failers
2032     aB
2033     AB
2034    
2035     /(a (?x)b c)d e/
2036     a bcd e
2037     *** Failers
2038     a b cd e
2039     abcd e
2040     a bcde
2041    
2042     /(a b(?x)c d (?-x)e f)/
2043     a bcde f
2044     *** Failers
2045     abcdef
2046    
2047     /(a(?i)b)c/
2048     abc
2049     aBc
2050     *** Failers
2051     abC
2052     aBC
2053     Abc
2054     ABc
2055     ABC
2056     AbC
2057    
2058     /a(?i:b)c/
2059     abc
2060     aBc
2061     *** Failers
2062     ABC
2063     abC
2064     aBC
2065    
2066     /a(?i:b)*c/
2067     aBc
2068     aBBc
2069     *** Failers
2070     aBC
2071     aBBC
2072    
2073     /a(?=b(?i)c)\w\wd/
2074     abcd
2075     abCd
2076     *** Failers
2077     aBCd
2078     abcD
2079    
2080     /(?s-i:more.*than).*million/i
2081     more than million
2082     more than MILLION
2083     more \n than Million
2084     *** Failers
2085     MORE THAN MILLION
2086     more \n than \n million
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     /(?>a(?i)b+)+c/
2097     abc
2098     aBbc
2099     aBBc
2100     *** Failers
2101     Abc
2102     abAb
2103     abbC
2104    
2105     /(?=a(?i)b)\w\wc/
2106     abc
2107     aBc
2108     *** Failers
2109     Ab
2110     abC
2111     aBC
2112    
2113     /(?<=a(?i)b)(\w\w)c/
2114     abxxc
2115     aBxxc
2116     *** Failers
2117     Abxxc
2118     ABxxc
2119     abxxC
2120    
2121     /(?:(a)|b)(?(1)A|B)/
2122     aA
2123     bB
2124     *** Failers
2125     aB
2126     bA
2127    
2128     /^(a)?(?(1)a|b)+$/
2129     aa
2130     b
2131     bb
2132     *** Failers
2133     ab
2134    
2135     /^(?(?=abc)\w{3}:|\d\d)$/
2136     abc:
2137     12
2138     *** Failers
2139     123
2140     xyz
2141    
2142     /^(?(?!abc)\d\d|\w{3}:)$/
2143     abc:
2144     12
2145     *** Failers
2146     123
2147     xyz
2148    
2149     /(?(?<=foo)bar|cat)/
2150     foobar
2151     cat
2152     fcat
2153     focat
2154     *** Failers
2155     foocat
2156    
2157     /(?(?<!foo)cat|bar)/
2158     foobar
2159     cat
2160     fcat
2161     focat
2162     *** Failers
2163     foocat
2164    
2165     /( \( )? [^()]+ (?(1) \) |) /x
2166     abcd
2167     (abcd)
2168     the quick (abcd) fox
2169     (abcd
2170    
2171     /( \( )? [^()]+ (?(1) \) ) /x
2172     abcd
2173     (abcd)
2174     the quick (abcd) fox
2175     (abcd
2176    
2177     /^(?(2)a|(1)(2))+$/
2178     12
2179     12a
2180     12aa
2181     *** Failers
2182     1234
2183    
2184     /((?i)blah)\s+\1/
2185     blah blah
2186     BLAH BLAH
2187     Blah Blah
2188     blaH blaH
2189     *** Failers
2190     blah BLAH
2191     Blah blah
2192     blaH blah
2193    
2194     /((?i)blah)\s+(?i:\1)/
2195     blah blah
2196     BLAH BLAH
2197     Blah Blah
2198     blaH blaH
2199     blah BLAH
2200     Blah blah
2201     blaH blah
2202    
2203     /(?>a*)*/
2204     a
2205     aa
2206     aaaa
2207    
2208     /(abc|)+/
2209     abc
2210     abcabc
2211     abcabcabc
2212     xyz
2213    
2214     /([a]*)*/
2215     a
2216     aaaaa
2217    
2218     /([ab]*)*/
2219     a
2220     b
2221     ababab
2222     aaaabcde
2223     bbbb
2224    
2225     /([^a]*)*/
2226     b
2227     bbbb
2228     aaa
2229    
2230     /([^ab]*)*/
2231     cccc
2232     abab
2233    
2234     /([a]*?)*/
2235     a
2236     aaaa
2237    
2238     /([ab]*?)*/
2239     a
2240     b
2241     abab
2242     baba
2243    
2244     /([^a]*?)*/
2245     b
2246     bbbb
2247     aaa
2248    
2249     /([^ab]*?)*/
2250     c
2251     cccc
2252     baba
2253    
2254     /(?>a*)*/
2255     a
2256     aaabcde
2257    
2258     /((?>a*))*/
2259     aaaaa
2260     aabbaa
2261    
2262     /((?>a*?))*/
2263     aaaaa
2264     aabbaa
2265    
2266     /(?(?=[^a-z]+[a-z]) \d{2}-[a-z]{3}-\d{2} | \d{2}-\d{2}-\d{2} ) /x
2267     12-sep-98
2268     12-09-98
2269     *** Failers
2270     sep-12-98
2271    
2272     /(?<=(foo))bar\1/
2273     foobarfoo
2274     foobarfootling
2275     *** Failers
2276     foobar
2277     barfoo
2278    
2279     /(?i:saturday|sunday)/
2280     saturday
2281     sunday
2282     Saturday
2283     Sunday
2284     SATURDAY
2285     SUNDAY
2286     SunDay
2287    
2288     /(a(?i)bc|BB)x/
2289     abcx
2290     aBCx
2291     bbx
2292     BBx
2293     *** Failers
2294     abcX
2295     aBCX
2296     bbX
2297     BBX
2298    
2299     /^([ab](?i)[cd]|[ef])/
2300     ac
2301     aC
2302     bD
2303     elephant
2304     Europe
2305     frog
2306     France
2307     *** Failers
2308     Africa
2309    
2310     /^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
2311     ab
2312     aBd
2313     xy
2314     xY
2315     zebra
2316     Zambesi
2317     *** Failers
2318     aCD
2319     XY
2320    
2321     /(?<=foo\n)^bar/m
2322     foo\nbar
2323     *** Failers
2324     bar
2325     baz\nbar
2326    
2327     /(?<=(?<!foo)bar)baz/
2328     barbaz
2329     barbarbaz
2330     koobarbaz
2331     *** Failers
2332     baz
2333     foobarbaz
2334    
2335 ph10 488 /The cases of aaaa and aaaaaa are missed out below because Perl does things/
2336     /differently. We know that odd, and maybe incorrect, things happen with/
2337     /recursive references in Perl, as far as 5.11.3 - see some stuff in test #2./
2338 nigel 63
2339     /^(a\1?){4}$/
2340     a
2341     aa
2342     aaa
2343     aaaaa
2344     aaaaaaa
2345     aaaaaaaa
2346     aaaaaaaaa
2347     aaaaaaaaaa
2348     aaaaaaaaaaa
2349     aaaaaaaaaaaa
2350     aaaaaaaaaaaaa
2351     aaaaaaaaaaaaaa
2352     aaaaaaaaaaaaaaa
2353     aaaaaaaaaaaaaaaa
2354    
2355     /^(a\1?)(a\1?)(a\2?)(a\3?)$/
2356     a
2357     aa
2358     aaa
2359     aaaa
2360     aaaaa
2361     aaaaaa
2362     aaaaaaa
2363     aaaaaaaa
2364     aaaaaaaaa
2365     aaaaaaaaaa
2366     aaaaaaaaaaa
2367     aaaaaaaaaaaa
2368     aaaaaaaaaaaaa
2369     aaaaaaaaaaaaaa
2370     aaaaaaaaaaaaaaa
2371     aaaaaaaaaaaaaaaa
2372    
2373     /The following tests are taken from the Perl 5.005 test suite; some of them/
2374     /are compatible with 5.004, but I'd rather not have to sort them out./
2375    
2376     /abc/
2377     abc
2378     xabcy
2379     ababc
2380     *** Failers
2381     xbc
2382     axc
2383     abx
2384    
2385     /ab*c/
2386     abc
2387    
2388     /ab*bc/
2389     abc
2390     abbc
2391     abbbbc
2392    
2393     /.{1}/
2394     abbbbc
2395    
2396     /.{3,4}/
2397     abbbbc
2398    
2399     /ab{0,}bc/
2400     abbbbc
2401    
2402     /ab+bc/
2403     abbc
2404     *** Failers
2405     abc
2406     abq
2407    
2408     /ab{1,}bc/
2409    
2410     /ab+bc/
2411     abbbbc
2412    
2413     /ab{1,}bc/
2414     abbbbc
2415    
2416     /ab{1,3}bc/
2417     abbbbc
2418    
2419     /ab{3,4}bc/
2420     abbbbc
2421    
2422     /ab{4,5}bc/
2423     *** Failers
2424     abq
2425     abbbbc
2426    
2427     /ab?bc/
2428     abbc
2429     abc
2430    
2431     /ab{0,1}bc/
2432     abc
2433    
2434     /ab?bc/
2435    
2436     /ab?c/
2437     abc
2438    
2439     /ab{0,1}c/
2440     abc
2441    
2442     /^abc$/
2443     abc
2444     *** Failers
2445     abbbbc
2446     abcc
2447    
2448     /^abc/
2449     abcc
2450    
2451     /^abc$/
2452    
2453     /abc$/
2454     aabc
2455     *** Failers
2456     aabc
2457     aabcd
2458    
2459     /^/
2460     abc
2461    
2462     /$/
2463     abc
2464    
2465     /a.c/
2466     abc
2467     axc
2468    
2469     /a.*c/
2470     axyzc
2471    
2472     /a[bc]d/
2473     abd
2474     *** Failers
2475     axyzd
2476     abc
2477    
2478     /a[b-d]e/
2479     ace
2480    
2481     /a[b-d]/
2482     aac
2483    
2484     /a[-b]/
2485     a-
2486    
2487     /a[b-]/
2488     a-
2489    
2490     /a]/
2491     a]
2492    
2493     /a[]]b/
2494     a]b
2495    
2496     /a[^bc]d/
2497     aed
2498     *** Failers
2499     abd
2500     abd
2501    
2502     /a[^-b]c/
2503     adc
2504    
2505     /a[^]b]c/
2506     adc
2507     *** Failers
2508     a-c
2509     a]c
2510    
2511     /\ba\b/
2512     a-
2513     -a
2514     -a-
2515    
2516     /\by\b/
2517     *** Failers
2518     xy
2519     yz
2520     xyz
2521    
2522     /\Ba\B/
2523     *** Failers
2524     a-
2525     -a
2526     -a-
2527    
2528     /\By\b/
2529     xy
2530    
2531     /\by\B/
2532     yz
2533    
2534     /\By\B/
2535     xyz
2536    
2537     /\w/
2538     a
2539    
2540     /\W/
2541     -
2542     *** Failers
2543     -
2544     a
2545    
2546     /a\sb/
2547     a b
2548    
2549     /a\Sb/
2550     a-b
2551     *** Failers
2552     a-b
2553     a b
2554    
2555     /\d/
2556     1
2557    
2558     /\D/
2559     -
2560     *** Failers
2561     -
2562     1
2563    
2564     /[\w]/
2565     a
2566    
2567     /[\W]/
2568     -
2569     *** Failers
2570     -
2571     a
2572    
2573     /a[\s]b/
2574     a b
2575    
2576     /a[\S]b/
2577     a-b
2578     *** Failers
2579     a-b
2580     a b
2581    
2582     /[\d]/
2583     1
2584    
2585     /[\D]/
2586     -
2587     *** Failers
2588     -
2589     1
2590    
2591     /ab|cd/
2592     abc
2593     abcd
2594    
2595     /()ef/
2596     def
2597    
2598     /$b/
2599    
2600     /a\(b/
2601     a(b
2602    
2603     /a\(*b/
2604     ab
2605     a((b
2606    
2607     /a\\b/
2608     a\b
2609    
2610     /((a))/
2611     abc
2612    
2613     /(a)b(c)/
2614     abc
2615    
2616     /a+b+c/
2617     aabbabc
2618    
2619     /a{1,}b{1,}c/
2620     aabbabc
2621    
2622     /a.+?c/
2623     abcabc
2624    
2625     /(a+|b)*/
2626     ab
2627    
2628     /(a+|b){0,}/
2629     ab
2630    
2631     /(a+|b)+/
2632     ab
2633    
2634     /(a+|b){1,}/
2635     ab
2636    
2637     /(a+|b)?/
2638     ab
2639    
2640     /(a+|b){0,1}/
2641     ab
2642    
2643     /[^ab]*/
2644     cde
2645    
2646     /abc/
2647     *** Failers
2648     b
2649    
2650    
2651     /a*/
2652    
2653    
2654     /([abc])*d/
2655     abbbcd
2656    
2657     /([abc])*bcd/
2658     abcd
2659    
2660     /a|b|c|d|e/
2661     e
2662    
2663     /(a|b|c|d|e)f/
2664     ef
2665    
2666     /abcd*efg/
2667     abcdefg
2668    
2669     /ab*/
2670     xabyabbbz
2671     xayabbbz
2672    
2673     /(ab|cd)e/
2674     abcde
2675    
2676     /[abhgefdc]ij/
2677     hij
2678    
2679     /^(ab|cd)e/
2680    
2681     /(abc|)ef/
2682     abcdef
2683    
2684     /(a|b)c*d/
2685     abcd
2686    
2687     /(ab|ab*)bc/
2688     abc
2689    
2690     /a([bc]*)c*/
2691     abc
2692    
2693     /a([bc]*)(c*d)/
2694     abcd
2695    
2696     /a([bc]+)(c*d)/
2697     abcd
2698    
2699     /a([bc]*)(c+d)/
2700     abcd
2701    
2702     /a[bcd]*dcdcde/
2703     adcdcde
2704    
2705     /a[bcd]+dcdcde/
2706     *** Failers
2707     abcde
2708     adcdcde
2709    
2710     /(ab|a)b*c/
2711     abc
2712    
2713     /((a)(b)c)(d)/
2714     abcd
2715    
2716     /[a-zA-Z_][a-zA-Z0-9_]*/
2717     alpha
2718    
2719     /^a(bc+|b[eh])g|.h$/
2720     abh
2721    
2722     /(bc+d$|ef*g.|h?i(j|k))/
2723     effgz
2724     ij
2725     reffgz
2726     *** Failers
2727     effg
2728     bcdd
2729    
2730     /((((((((((a))))))))))/
2731     a
2732    
2733     /((((((((((a))))))))))\10/
2734     aa
2735    
2736     /(((((((((a)))))))))/
2737     a
2738    
2739     /multiple words of text/
2740     *** Failers
2741     aa
2742     uh-uh
2743    
2744     /multiple words/
2745     multiple words, yeah
2746    
2747     /(.*)c(.*)/
2748     abcde
2749    
2750     /\((.*), (.*)\)/
2751     (a, b)
2752    
2753     /[k]/
2754    
2755     /abcd/
2756     abcd
2757    
2758     /a(bc)d/
2759     abcd
2760    
2761     /a[-]?c/
2762     ac
2763    
2764     /(abc)\1/
2765     abcabc
2766    
2767     /([a-c]*)\1/
2768     abcabc
2769    
2770     /(a)|\1/
2771     a
2772     *** Failers
2773     ab
2774     x
2775    
2776     /(([a-c])b*?\2)*/
2777     ababbbcbc
2778    
2779     /(([a-c])b*?\2){3}/
2780     ababbbcbc
2781    
2782     /((\3|b)\2(a)x)+/
2783     aaaxabaxbaaxbbax
2784    
2785     /((\3|b)\2(a)){2,}/
2786     bbaababbabaaaaabbaaaabba
2787    
2788     /abc/i
2789     ABC
2790     XABCY
2791     ABABC
2792     *** Failers
2793     aaxabxbaxbbx
2794     XBC
2795     AXC
2796     ABX
2797    
2798     /ab*c/i
2799     ABC
2800    
2801     /ab*bc/i
2802     ABC
2803     ABBC
2804    
2805     /ab*?bc/i
2806     ABBBBC
2807    
2808     /ab{0,}?bc/i
2809     ABBBBC
2810    
2811     /ab+?bc/i
2812     ABBC
2813    
2814     /ab+bc/i
2815     *** Failers
2816     ABC
2817     ABQ
2818    
2819     /ab{1,}bc/i
2820    
2821     /ab+bc/i
2822     ABBBBC
2823    
2824     /ab{1,}?bc/i
2825     ABBBBC
2826    
2827     /ab{1,3}?bc/i
2828     ABBBBC
2829    
2830     /ab{3,4}?bc/i
2831     ABBBBC
2832    
2833     /ab{4,5}?bc/i
2834     *** Failers
2835     ABQ
2836     ABBBBC
2837    
2838     /ab??bc/i
2839     ABBC
2840     ABC
2841    
2842     /ab{0,1}?bc/i
2843     ABC
2844    
2845     /ab??bc/i
2846    
2847     /ab??c/i
2848     ABC
2849    
2850     /ab{0,1}?c/i
2851     ABC
2852    
2853     /^abc$/i
2854     ABC
2855     *** Failers
2856     ABBBBC
2857     ABCC
2858    
2859     /^abc/i
2860     ABCC
2861    
2862     /^abc$/i
2863    
2864     /abc$/i
2865     AABC
2866    
2867     /^/i
2868     ABC
2869    
2870     /$/i
2871     ABC
2872    
2873     /a.c/i
2874     ABC
2875     AXC
2876    
2877     /a.*?c/i
2878     AXYZC
2879    
2880     /a.*c/i
2881     *** Failers
2882     AABC
2883     AXYZD
2884    
2885     /a[bc]d/i
2886     ABD
2887    
2888     /a[b-d]e/i
2889     ACE
2890     *** Failers
2891     ABC
2892     ABD
2893    
2894     /a[b-d]/i
2895     AAC
2896    
2897     /a[-b]/i
2898     A-
2899    
2900     /a[b-]/i
2901     A-
2902    
2903     /a]/i
2904     A]
2905    
2906     /a[]]b/i
2907     A]B
2908    
2909     /a[^bc]d/i
2910     AED
2911    
2912     /a[^-b]c/i
2913     ADC
2914     *** Failers
2915     ABD
2916     A-C
2917    
2918     /a[^]b]c/i
2919     ADC
2920    
2921     /ab|cd/i
2922     ABC
2923     ABCD
2924    
2925     /()ef/i
2926     DEF
2927    
2928     /$b/i
2929     *** Failers
2930     A]C
2931     B
2932    
2933     /a\(b/i
2934     A(B
2935    
2936     /a\(*b/i
2937     AB
2938     A((B
2939    
2940     /a\\b/i
2941     A\B
2942    
2943     /((a))/i
2944     ABC
2945    
2946     /(a)b(c)/i
2947     ABC
2948    
2949     /a+b+c/i
2950     AABBABC
2951    
2952     /a{1,}b{1,}c/i
2953     AABBABC
2954    
2955     /a.+?c/i
2956     ABCABC
2957    
2958     /a.*?c/i
2959     ABCABC
2960    
2961     /a.{0,5}?c/i
2962     ABCABC
2963    
2964     /(a+|b)*/i
2965     AB
2966    
2967     /(a+|b){0,}/i
2968     AB
2969    
2970     /(a+|b)+/i
2971     AB
2972    
2973     /(a+|b){1,}/i
2974     AB
2975    
2976     /(a+|b)?/i
2977     AB
2978    
2979     /(a+|b){0,1}/i
2980     AB
2981    
2982     /(a+|b){0,1}?/i
2983     AB
2984    
2985     /[^ab]*/i
2986     CDE
2987    
2988     /abc/i
2989    
2990     /a*/i
2991    
2992    
2993     /([abc])*d/i
2994     ABBBCD
2995    
2996     /([abc])*bcd/i
2997     ABCD
2998    
2999     /a|b|c|d|e/i
3000     E
3001    
3002     /(a|b|c|d|e)f/i
3003     EF
3004    
3005     /abcd*efg/i
3006     ABCDEFG
3007    
3008     /ab*/i
3009     XABYABBBZ
3010     XAYABBBZ
3011    
3012     /(ab|cd)e/i
3013     ABCDE
3014    
3015     /[abhgefdc]ij/i
3016     HIJ
3017    
3018     /^(ab|cd)e/i
3019     ABCDE
3020    
3021     /(abc|)ef/i
3022     ABCDEF
3023    
3024     /(a|b)c*d/i
3025     ABCD
3026    
3027     /(ab|ab*)bc/i
3028     ABC
3029    
3030     /a([bc]*)c*/i
3031     ABC
3032    
3033     /a([bc]*)(c*d)/i
3034     ABCD
3035    
3036     /a([bc]+)(c*d)/i
3037     ABCD
3038    
3039     /a([bc]*)(c+d)/i
3040     ABCD
3041    
3042     /a[bcd]*dcdcde/i
3043     ADCDCDE
3044    
3045     /a[bcd]+dcdcde/i
3046    
3047     /(ab|a)b*c/i
3048     ABC
3049    
3050     /((a)(b)c)(d)/i
3051     ABCD
3052    
3053     /[a-zA-Z_][a-zA-Z0-9_]*/i
3054     ALPHA
3055    
3056     /^a(bc+|b[eh])g|.h$/i
3057     ABH
3058    
3059     /(bc+d$|ef*g.|h?i(j|k))/i
3060     EFFGZ
3061     IJ
3062     REFFGZ
3063     *** Failers
3064     ADCDCDE
3065     EFFG
3066     BCDD
3067    
3068     /((((((((((a))))))))))/i
3069     A
3070    
3071     /((((((((((a))))))))))\10/i
3072     AA
3073    
3074     /(((((((((a)))))))))/i
3075     A
3076    
3077     /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
3078     A
3079    
3080     /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
3081     C
3082    
3083     /multiple words of text/i
3084     *** Failers
3085     AA
3086     UH-UH
3087    
3088     /multiple words/i
3089     MULTIPLE WORDS, YEAH
3090    
3091     /(.*)c(.*)/i
3092     ABCDE
3093    
3094     /\((.*), (.*)\)/i
3095     (A, B)
3096    
3097     /[k]/i
3098    
3099     /abcd/i
3100     ABCD
3101    
3102     /a(bc)d/i
3103     ABCD
3104    
3105     /a[-]?c/i
3106     AC
3107    
3108     /(abc)\1/i
3109     ABCABC
3110    
3111     /([a-c]*)\1/i
3112     ABCABC
3113    
3114     /a(?!b)./
3115     abad
3116    
3117     /a(?=d)./
3118     abad
3119    
3120     /a(?=c|d)./
3121     abad
3122    
3123     /a(?:b|c|d)(.)/
3124     ace
3125    
3126     /a(?:b|c|d)*(.)/
3127     ace
3128    
3129     /a(?:b|c|d)+?(.)/
3130     ace
3131     acdbcdbe
3132    
3133     /a(?:b|c|d)+(.)/
3134     acdbcdbe
3135    
3136     /a(?:b|c|d){2}(.)/
3137     acdbcdbe
3138    
3139     /a(?:b|c|d){4,5}(.)/
3140     acdbcdbe
3141    
3142     /a(?:b|c|d){4,5}?(.)/
3143     acdbcdbe
3144    
3145     /((foo)|(bar))*/
3146     foobar
3147    
3148     /a(?:b|c|d){6,7}(.)/
3149     acdbcdbe
3150    
3151     /a(?:b|c|d){6,7}?(.)/
3152     acdbcdbe
3153    
3154     /a(?:b|c|d){5,6}(.)/
3155     acdbcdbe
3156    
3157     /a(?:b|c|d){5,6}?(.)/
3158     acdbcdbe
3159    
3160     /a(?:b|c|d){5,7}(.)/
3161     acdbcdbe
3162    
3163     /a(?:b|c|d){5,7}?(.)/
3164     acdbcdbe
3165    
3166     /a(?:b|(c|e){1,2}?|d)+?(.)/
3167     ace
3168    
3169     /^(.+)?B/
3170     AB
3171    
3172     /^([^a-z])|(\^)$/
3173     .
3174    
3175     /^[<>]&/
3176     <&OUT
3177    
3178     /^(a\1?){4}$/
3179     aaaaaaaaaa
3180     *** Failers
3181     AB
3182     aaaaaaaaa
3183     aaaaaaaaaaa
3184    
3185     /^(a(?(1)\1)){4}$/
3186     aaaaaaaaaa
3187     *** Failers
3188     aaaaaaaaa
3189     aaaaaaaaaaa
3190    
3191     /(?:(f)(o)(o)|(b)(a)(r))*/
3192     foobar
3193    
3194     /(?<=a)b/
3195     ab
3196     *** Failers
3197     cb
3198     b
3199    
3200     /(?<!c)b/
3201     ab
3202     b
3203     b
3204    
3205     /(?:..)*a/
3206     aba
3207    
3208     /(?:..)*?a/
3209     aba
3210    
3211     /^(?:b|a(?=(.)))*\1/
3212     abc
3213    
3214     /^(){3,5}/
3215     abc
3216    
3217     /^(a+)*ax/
3218     aax
3219    
3220     /^((a|b)+)*ax/
3221     aax
3222    
3223     /^((a|bc)+)*ax/
3224     aax
3225    
3226     /(a|x)*ab/
3227     cab
3228    
3229     /(a)*ab/
3230     cab
3231    
3232     /(?:(?i)a)b/
3233     ab
3234    
3235     /((?i)a)b/
3236     ab
3237    
3238     /(?:(?i)a)b/
3239     Ab
3240    
3241     /((?i)a)b/
3242     Ab
3243    
3244     /(?:(?i)a)b/
3245     *** Failers
3246     cb
3247     aB
3248    
3249     /((?i)a)b/
3250    
3251     /(?i:a)b/
3252     ab
3253    
3254     /((?i:a))b/
3255     ab
3256    
3257     /(?i:a)b/
3258     Ab
3259    
3260     /((?i:a))b/
3261     Ab
3262    
3263     /(?i:a)b/
3264     *** Failers
3265     aB
3266     aB
3267    
3268     /((?i:a))b/
3269    
3270     /(?:(?-i)a)b/i
3271     ab
3272    
3273     /((?-i)a)b/i
3274     ab
3275    
3276     /(?:(?-i)a)b/i
3277     aB
3278    
3279     /((?-i)a)b/i
3280     aB
3281    
3282     /(?:(?-i)a)b/i
3283     *** Failers
3284     aB
3285     Ab
3286    
3287     /((?-i)a)b/i
3288    
3289     /(?:(?-i)a)b/i
3290     aB
3291    
3292     /((?-i)a)b/i
3293     aB
3294    
3295     /(?:(?-i)a)b/i
3296     *** Failers
3297     Ab
3298     AB
3299    
3300     /((?-i)a)b/i
3301    
3302     /(?-i:a)b/i
3303     ab
3304    
3305     /((?-i:a))b/i
3306     ab
3307    
3308     /(?-i:a)b/i
3309     aB
3310    
3311     /((?-i:a))b/i
3312     aB
3313    
3314     /(?-i:a)b/i
3315     *** Failers
3316     AB
3317     Ab
3318    
3319     /((?-i:a))b/i
3320    
3321     /(?-i:a)b/i
3322     aB
3323    
3324     /((?-i:a))b/i
3325     aB
3326    
3327     /(?-i:a)b/i
3328     *** Failers
3329     Ab
3330     AB
3331    
3332     /((?-i:a))b/i
3333    
3334     /((?-i:a.))b/i
3335     *** Failers
3336     AB
3337     a\nB
3338    
3339     /((?s-i:a.))b/i
3340     a\nB
3341    
3342     /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
3343     cabbbb
3344    
3345     /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
3346     caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
3347    
3348     /(ab)\d\1/i
3349     Ab4ab
3350     ab4Ab
3351    
3352     /foo\w*\d{4}baz/
3353     foobar1234baz
3354    
3355     /x(~~)*(?:(?:F)?)?/
3356     x~~
3357    
3358     /^a(?#xxx){3}c/
3359     aaac
3360    
3361     /^a (?#xxx) (?#yyy) {3}c/x
3362     aaac
3363    
3364     /(?<![cd])b/
3365     *** Failers
3366     B\nB
3367     dbcb
3368    
3369     /(?<![cd])[ab]/
3370     dbaacb
3371    
3372     /(?<!(c|d))b/
3373    
3374     /(?<!(c|d))[ab]/
3375     dbaacb
3376    
3377     /(?<!cd)[ab]/
3378     cdaccb
3379    
3380     /^(?:a?b?)*$/
3381 nigel 93 \
3382     a
3383     ab
3384     aaa
3385 nigel 63 *** Failers
3386     dbcb
3387     a--
3388 nigel 93 aa--
3389 nigel 63
3390     /((?s)^a(.))((?m)^b$)/
3391     a\nb\nc\n
3392    
3393     /((?m)^b$)/
3394     a\nb\nc\n
3395    
3396     /(?m)^b/
3397     a\nb\n
3398    
3399     /(?m)^(b)/
3400     a\nb\n
3401    
3402     /((?m)^b)/
3403     a\nb\n
3404    
3405     /\n((?m)^b)/
3406     a\nb\n
3407    
3408     /((?s).)c(?!.)/
3409     a\nb\nc\n
3410     a\nb\nc\n
3411    
3412     /((?s)b.)c(?!.)/
3413     a\nb\nc\n
3414     a\nb\nc\n
3415    
3416     /^b/
3417    
3418     /()^b/
3419     *** Failers
3420     a\nb\nc\n
3421     a\nb\nc\n
3422    
3423     /((?m)^b)/
3424     a\nb\nc\n
3425    
3426     /(x)?(?(1)a|b)/
3427     *** Failers
3428     a
3429     a
3430    
3431     /(x)?(?(1)b|a)/
3432     a
3433    
3434     /()?(?(1)b|a)/
3435     a
3436    
3437     /()(?(1)b|a)/
3438    
3439     /()?(?(1)a|b)/
3440     a
3441    
3442     /^(\()?blah(?(1)(\)))$/
3443     (blah)
3444     blah
3445     *** Failers
3446     a
3447     blah)
3448     (blah
3449    
3450     /^(\(+)?blah(?(1)(\)))$/
3451     (blah)
3452     blah
3453     *** Failers
3454     blah)
3455     (blah
3456    
3457     /(?(?!a)a|b)/
3458    
3459     /(?(?!a)b|a)/
3460     a
3461    
3462     /(?(?=a)b|a)/
3463     *** Failers
3464     a
3465     a
3466    
3467     /(?(?=a)a|b)/
3468     a
3469    
3470     /(?=(a+?))(\1ab)/
3471     aaab
3472    
3473     /^(?=(a+?))\1ab/
3474    
3475     /(\w+:)+/
3476     one:
3477    
3478     /$(?<=^(a))/
3479     a
3480    
3481     /(?=(a+?))(\1ab)/
3482     aaab
3483    
3484     /^(?=(a+?))\1ab/
3485     *** Failers
3486     aaab
3487     aaab
3488    
3489     /([\w:]+::)?(\w+)$/
3490     abcd
3491     xy:z:::abcd
3492    
3493     /^[^bcd]*(c+)/
3494     aexycd
3495    
3496     /(a*)b+/
3497     caab
3498    
3499     /([\w:]+::)?(\w+)$/
3500     abcd
3501     xy:z:::abcd
3502     *** Failers
3503     abcd:
3504     abcd:
3505    
3506     /^[^bcd]*(c+)/
3507     aexycd
3508    
3509     /(>a+)ab/
3510    
3511     /(?>a+)b/
3512     aaab
3513    
3514     /([[:]+)/
3515     a:[b]:
3516    
3517     /([[=]+)/
3518     a=[b]=
3519    
3520     /([[.]+)/
3521     a.[b].
3522    
3523     /((?>a+)b)/
3524     aaab
3525    
3526     /(?>(a+))b/
3527     aaab
3528    
3529     /((?>[^()]+)|\([^()]*\))+/
3530     ((abc(ade)ufh()()x
3531    
3532     /a\Z/
3533     *** Failers
3534     aaab
3535     a\nb\n
3536    
3537     /b\Z/
3538     a\nb\n
3539    
3540     /b\z/
3541    
3542     /b\Z/
3543     a\nb
3544    
3545     /b\z/
3546     a\nb
3547     *** Failers
3548    
3549     /^(?>(?(1)\.|())[^\W_](?>[a-z0-9-]*[^\W_])?)+$/
3550     a
3551     abc
3552     a-b
3553     0-9
3554     a.b
3555     5.6.7
3556     the.quick.brown.fox
3557     a100.b200.300c
3558     12-ab.1245
3559     *** Failers
3560     \
3561     .a
3562     -a
3563     a-
3564     a.
3565     a_b
3566     a.-
3567     a..
3568     ab..bc
3569     the.quick.brown.fox-
3570     the.quick.brown.fox.
3571     the.quick.brown.fox_
3572     the.quick.brown.fox+
3573    
3574     /(?>.*)(?<=(abcd|wxyz))/
3575     alphabetabcd
3576     endingwxyz
3577     *** Failers
3578     a rather long string that doesn't end with one of them
3579    
3580     /word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
3581     word cat dog elephant mussel cow horse canary baboon snake shark otherword
3582     word cat dog elephant mussel cow horse canary baboon snake shark
3583    
3584     /word (?>[a-zA-Z0-9]+ ){0,30}otherword/
3585     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
3586    
3587     /(?<=\d{3}(?!999))foo/
3588     999foo
3589     123999foo
3590     *** Failers
3591     123abcfoo
3592    
3593     /(?<=(?!...999)\d{3})foo/
3594     999foo
3595     123999foo
3596     *** Failers
3597     123abcfoo
3598    
3599     /(?<=\d{3}(?!999)...)foo/
3600     123abcfoo
3601     123456foo
3602     *** Failers
3603     123999foo
3604    
3605     /(?<=\d{3}...)(?<!999)foo/
3606     123abcfoo
3607     123456foo
3608     *** Failers
3609     123999foo
3610    
3611     /<a[\s]+href[\s]*=[\s]* # find <a href=
3612     ([\"\'])? # find single or double quote
3613     (?(1) (.*?)\1 | ([^\s]+)) # if quote found, match up to next matching
3614     # quote, otherwise match up to next space
3615     /isx
3616     <a href=abcd xyz
3617     <a href=\"abcd xyz pqr\" cats
3618     <a href=\'abcd xyz pqr\' cats
3619    
3620     /<a\s+href\s*=\s* # find <a href=
3621     (["'])? # find single or double quote
3622     (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
3623     # quote, otherwise match up to next space
3624     /isx
3625     <a href=abcd xyz
3626     <a href=\"abcd xyz pqr\" cats
3627     <a href = \'abcd xyz pqr\' cats
3628    
3629     /<a\s+href(?>\s*)=(?>\s*) # find <a href=
3630     (["'])? # find single or double quote
3631     (?(1) (.*?)\1 | (\S+)) # if quote found, match up to next matching
3632     # quote, otherwise match up to next space
3633     /isx
3634     <a href=abcd xyz
3635     <a href=\"abcd xyz pqr\" cats
3636     <a href = \'abcd xyz pqr\' cats
3637    
3638     /((Z)+|A)*/
3639     ZABCDEFG
3640    
3641     /(Z()|A)*/
3642     ZABCDEFG
3643    
3644     /(Z(())|A)*/
3645     ZABCDEFG
3646    
3647     /((?>Z)+|A)*/
3648     ZABCDEFG
3649    
3650     /((?>)+|A)*/
3651     ZABCDEFG
3652    
3653     /a*/g
3654     abbab
3655    
3656     /^[a-\d]/
3657     abcde
3658     -things
3659     0digit
3660     *** Failers
3661     bcdef
3662    
3663     /^[\d-a]/
3664     abcde
3665     -things
3666     0digit
3667     *** Failers
3668     bcdef
3669    
3670     /[[:space:]]+/
3671     > \x09\x0a\x0c\x0d\x0b<
3672    
3673     /[[:blank:]]+/
3674     > \x09\x0a\x0c\x0d\x0b<
3675    
3676     /[\s]+/
3677     > \x09\x0a\x0c\x0d\x0b<
3678    
3679     /\s+/
3680     > \x09\x0a\x0c\x0d\x0b<
3681    
3682     /a b/x
3683     ab
3684    
3685     /(?!\A)x/m
3686     a\nxb\n
3687    
3688     /(?!^)x/m
3689     a\nxb\n
3690    
3691     /abc\Qabc\Eabc/
3692     abcabcabc
3693    
3694     /abc\Q(*+|\Eabc/
3695     abc(*+|abc
3696    
3697     / abc\Q abc\Eabc/x
3698     abc abcabc
3699     *** Failers
3700     abcabcabc
3701    
3702     /abc#comment
3703     \Q#not comment
3704     literal\E/x
3705     abc#not comment\n literal
3706    
3707     /abc#comment
3708     \Q#not comment
3709     literal/x
3710     abc#not comment\n literal
3711    
3712     /abc#comment
3713     \Q#not comment
3714     literal\E #more comment
3715     /x
3716     abc#not comment\n literal
3717    
3718     /abc#comment
3719     \Q#not comment
3720     literal\E #more comment/x
3721     abc#not comment\n literal
3722    
3723     /\Qabc\$xyz\E/
3724     abc\\\$xyz
3725    
3726     /\Qabc\E\$\Qxyz\E/
3727     abc\$xyz
3728    
3729     /\Gabc/
3730     abc
3731     *** Failers
3732     xyzabc
3733    
3734     /\Gabc./g
3735     abc1abc2xyzabc3
3736    
3737     /abc./g
3738     abc1abc2xyzabc3
3739    
3740     /a(?x: b c )d/
3741     XabcdY
3742     *** Failers
3743     Xa b c d Y
3744    
3745     /((?x)x y z | a b c)/
3746     XabcY
3747     AxyzB
3748    
3749     /(?i)AB(?-i)C/
3750     XabCY
3751     *** Failers
3752     XabcY
3753    
3754     /((?i)AB(?-i)C|D)E/
3755     abCE
3756     DE
3757     *** Failers
3758     abcE
3759     abCe
3760     dE
3761     De
3762    
3763     /(.*)\d+\1/
3764     abc123abc
3765     abc123bc
3766    
3767     /(.*)\d+\1/s
3768     abc123abc
3769     abc123bc
3770    
3771     /((.*))\d+\1/
3772     abc123abc
3773     abc123bc
3774    
3775     /-- This tests for an IPv6 address in the form where it can have up to --/
3776     /-- eight components, one and only one of which is empty. This must be --/
3777     /-- an internal component. --/
3778    
3779     /^(?!:) # colon disallowed at start
3780     (?: # start of item
3781     (?: [0-9a-f]{1,4} | # 1-4 hex digits or
3782     (?(1)0 | () ) ) # if null previously matched, fail; else null
3783     : # followed by colon
3784     ){1,7} # end item; 1-7 of them required
3785     [0-9a-f]{1,4} $ # final hex number at end of string
3786     (?(1)|.) # check that there was an empty component
3787     /xi
3788     a123::a123
3789     a123:b342::abcd
3790     a123:b342::324e:abcd
3791     a123:ddde:b342::324e:abcd
3792     a123:ddde:b342::324e:dcba:abcd
3793     a123:ddde:9999:b342::324e:dcba:abcd
3794     *** Failers
3795     1:2:3:4:5:6:7:8
3796     a123:bce:ddde:9999:b342::324e:dcba:abcd
3797     a123::9999:b342::324e:dcba:abcd
3798     abcde:2:3:4:5:6:7:8
3799     ::1
3800     abcd:fee0:123::
3801     :1
3802     1:
3803    
3804     /[z\Qa-d]\E]/
3805     z
3806     a
3807     -
3808     d
3809     ]
3810     *** Failers
3811     b
3812    
3813     /[\z\C]/
3814     z
3815     C
3816    
3817     /\M/
3818     M
3819    
3820 nigel 65 /(a+)*b/
3821     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3822    
3823 nigel 67 /(?i)reg(?:ul(?:[a]|ae)r|ex)/
3824     REGular
3825     regulaer
3826     Regex
3827     regulr
3828    
3829     /[--]+/
3830    
3831    
3832    
3833    
3834    
3835 nigel 69 /(?<=Z)X./
3836     \x84XAZXB
3837    
3838 nigel 77 /ab cd (?x) de fg/
3839     ab cd defg
3840    
3841     /ab cd(?x) de fg/
3842     ab cddefg
3843     ** Failers
3844     abcddefg
3845    
3846 nigel 91 /(?<![^f]oo)(bar)/
3847     foobarX
3848     ** Failers
3849     boobarX
3850    
3851     /(?<![^f])X/
3852     offX
3853     ** Failers
3854     onyX
3855    
3856     /(?<=[^f])X/
3857     onyX
3858     ** Failers
3859     offX
3860    
3861     /^/mg
3862     a\nb\nc\n
3863     \
3864    
3865     /(?<=C\n)^/mg
3866     A\nC\nC\n
3867    
3868     /(?:(?(1)a|b)(X))+/
3869     bXaX
3870    
3871     /(?:(?(1)\1a|b)(X|Y))+/
3872     bXXaYYaY
3873     bXYaXXaX
3874    
3875     /()()()()()()()()()(?:(?(10)\10a|b)(X|Y))+/
3876     bXXaYYaY
3877    
3878     /[[,abc,]+]/
3879     abc]
3880     a,b]
3881     [a,b,c]
3882    
3883 nigel 93 /(?-x: )/x
3884     A\x20B
3885    
3886     "(?x)(?-x: \s*#\s*)"
3887     A # B
3888     ** Failers
3889     #
3890    
3891     "(?x-is)(?:(?-ixs) \s*#\s*) include"
3892     A #include
3893     ** Failers
3894     A#include
3895     A #Include
3896    
3897     /a*b*\w/
3898     aaabbbb
3899     aaaa
3900     a
3901    
3902     /a*b?\w/
3903     aaabbbb
3904     aaaa
3905     a
3906    
3907     /a*b{0,4}\w/
3908     aaabbbb
3909     aaaa
3910     a
3911    
3912     /a*b{0,}\w/
3913     aaabbbb
3914     aaaa
3915     a
3916    
3917     /a*\d*\w/
3918     0a
3919     a
3920    
3921     /a*b *\w/x
3922     a
3923    
3924     /a*b#comment
3925     *\w/x
3926     a
3927    
3928     /a* b *\w/x
3929     a
3930    
3931     /^\w+=.*(\\\n.*)*/
3932     abc=xyz\\\npqr
3933    
3934     /(?=(\w+))\1:/
3935     abcd:
3936    
3937     /^(?=(\w+))\1:/
3938     abcd:
3939    
3940     /^\Eabc/
3941     abc
3942    
3943     /^[\Eabc]/
3944     a
3945     ** Failers
3946     E
3947    
3948     /^[a-\Ec]/
3949     b
3950     ** Failers
3951     -
3952     E
3953    
3954     /^[a\E\E-\Ec]/
3955     b
3956     ** Failers
3957     -
3958     E
3959    
3960     /^[\E\Qa\E-\Qz\E]+/
3961     b
3962     ** Failers
3963     -
3964    
3965     /^[a\Q]bc\E]/
3966     a
3967     ]
3968     c
3969    
3970     /^[a-\Q\E]/
3971     a
3972     -
3973    
3974     /^(a()*)*/
3975     aaaa
3976    
3977     /^(?:a(?:(?:))*)*/
3978     aaaa
3979    
3980     /^(a()+)+/
3981     aaaa
3982    
3983     /^(?:a(?:(?:))+)+/
3984     aaaa
3985    
3986     /(a){0,3}(?(1)b|(c|))*D/
3987     abbD
3988     ccccD
3989     D
3990    
3991     /(a|)*\d/
3992     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3993     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
3994    
3995     /(?>a|)*\d/
3996     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
3997     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
3998    
3999     /(?:a|)*\d/
4000     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
4001     aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4
4002    
4003     /\Z/g
4004     abc\n
4005    
4006     /^(?s)(?>.*)(?<!\n)/
4007     abc
4008     abc\n
4009    
4010     /^(?![^\n]*\n\z)/
4011     abc
4012     abc\n
4013    
4014     /\z(?<!\n)/
4015     abc
4016     abc\n
4017    
4018 ph10 170 /(.*(.)?)*/
4019     abcd
4020    
4021 ph10 206 /( (A | (?(1)0|) )* )/x
4022     abcd
4023    
4024     /( ( (?(1)0|) )* )/x
4025     abcd
4026    
4027     /( (?(1)0|)* )/x
4028     abcd
4029    
4030 ph10 295 /[[:abcd:xyz]]/
4031     a]
4032     :]
4033    
4034     /[abc[:x\]pqr]/
4035     a
4036     [
4037     :
4038     ]
4039     p
4040    
4041 ph10 362 /.*[op][xyz]/
4042     fooabcfoo
4043    
4044 ph10 380 /(?(?=.*b)b|^)/
4045     adc
4046     abc
4047    
4048     /(?(?=^.*b)b|^)/
4049     adc
4050     abc
4051    
4052     /(?(?=.*b)b|^)*/
4053     adc
4054     abc
4055    
4056     /(?(?=.*b)b|^)+/
4057     adc
4058     abc
4059    
4060 ph10 381 /(?(?=b).*b|^d)/
4061     abc
4062    
4063     /(?(?=.*b).*b|^d)/
4064     abc
4065    
4066 ph10 395 /^%((?(?=[a])[^%])|b)*%$/
4067     %ab%
4068    
4069 ph10 472 /(?i)a(?-i)b|c/
4070     XabX
4071     XAbX
4072     CcC
4073     ** Failers
4074     XABX
4075    
4076 ph10 552 /[\x00-\xff\s]+/
4077     \x0a\x0b\x0c\x0d
4078    
4079 ph10 574 /^\c/
4080     ?
4081    
4082 ph10 597 /(abc)\1/i
4083     abc
4084    
4085     /(abc)\1/
4086     abc
4087    
4088 ph10 602 /[^a]*/i
4089     12abc
4090     12ABC
4091    
4092     /[^a]*+/i
4093     12abc
4094     12ABC
4095    
4096     /[^a]*?X/i
4097     ** Failers
4098     12abc
4099     12ABC
4100    
4101     /[^a]+?X/i
4102     ** Failers
4103     12abc
4104     12ABC
4105    
4106     /[^a]?X/i
4107     12aXbcX
4108     12AXBCX
4109     BCX
4110    
4111     /[^a]??X/i
4112     12aXbcX
4113     12AXBCX
4114     BCX
4115    
4116     /[^a]?+X/i
4117     12aXbcX
4118     12AXBCX
4119     BCX
4120    
4121     /[^a]{2,3}/i
4122     abcdef
4123     ABCDEF
4124    
4125     /[^a]{2,3}?/i
4126     abcdef
4127     ABCDEF
4128    
4129     /[^a]{2,3}+/i
4130     abcdef
4131     ABCDEF
4132    
4133 ph10 604 /((a|)+)+Z/
4134     Z
4135    
4136 ph10 614 /(a)b|(a)c/
4137     ac
4138    
4139     /(?>(a))b|(a)c/
4140     ac
4141    
4142     /(?=(a))ab|(a)c/
4143     ac
4144    
4145     /((?>(a))b|(a)c)/
4146     ac
4147    
4148     /((?>(a))b|(a)c)++/
4149     ac
4150    
4151     /(?:(?>(a))b|(a)c)++/
4152     ac
4153    
4154     /(?=(?>(a))b|(a)c)(..)/
4155     ac
4156    
4157     /(?>(?>(a))b|(a)c)/
4158     ac
4159    
4160 ph10 618 /(?:(?>([ab])))+a=/+
4161     =ba=
4162    
4163     /(?>([ab]))+a=/+
4164     =ba=
4165    
4166     /((?>(a+)b)+(aabab))/
4167     aaaabaaabaabab
4168    
4169     /(?>a+|ab)+?c/
4170     aabc
4171    
4172     /(?>a+|ab)+c/
4173     aabc
4174    
4175     /(?:a+|ab)+c/
4176     aabc
4177    
4178 ph10 450 /-- End of testinput1 --/

Properties

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

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12