/[pcre]/code/tags/pcre-1.05/testinput
ViewVC logotype

Contents of /code/tags/pcre-1.05/testinput

Parent Directory Parent Directory | Revision Log Revision Log


Revision 14 - (hide annotations) (download)
Sat Feb 24 21:38:23 2007 UTC (7 years, 1 month ago) by nigel
File size: 46538 byte(s)
Tag code/trunk as code/tags/pcre-1.05.

1 nigel 3 /the quick brown fox/
2     the quick brown fox
3     The quick brown FOX
4     What do you know about the quick brown fox?
5     What do you know about THE QUICK BROWN FOX?
6    
7     /The quick brown fox/i
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     /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
14     abcd\t\n\r\f\a\e9;\$\\?caxyz
15    
16     /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
17     abxyzpqrrrabbxyyyypqAzz
18     abxyzpqrrrabbxyyyypqAzz
19     aabxyzpqrrrabbxyyyypqAzz
20     aaabxyzpqrrrabbxyyyypqAzz
21     aaaabxyzpqrrrabbxyyyypqAzz
22     abcxyzpqrrrabbxyyyypqAzz
23     aabcxyzpqrrrabbxyyyypqAzz
24     aaabcxyzpqrrrabbxyyyypAzz
25     aaabcxyzpqrrrabbxyyyypqAzz
26     aaabcxyzpqrrrabbxyyyypqqAzz
27     aaabcxyzpqrrrabbxyyyypqqqAzz
28     aaabcxyzpqrrrabbxyyyypqqqqAzz
29     aaabcxyzpqrrrabbxyyyypqqqqqAzz
30     aaabcxyzpqrrrabbxyyyypqqqqqqAzz
31     aaaabcxyzpqrrrabbxyyyypqAzz
32     abxyzzpqrrrabbxyyyypqAzz
33     aabxyzzzpqrrrabbxyyyypqAzz
34     aaabxyzzzzpqrrrabbxyyyypqAzz
35     aaaabxyzzzzpqrrrabbxyyyypqAzz
36     abcxyzzpqrrrabbxyyyypqAzz
37     aabcxyzzzpqrrrabbxyyyypqAzz
38     aaabcxyzzzzpqrrrabbxyyyypqAzz
39     aaaabcxyzzzzpqrrrabbxyyyypqAzz
40     aaaabcxyzzzzpqrrrabbbxyyyypqAzz
41     aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
42     aaabcxyzpqrrrabbxyyyypABzz
43     aaabcxyzpqrrrabbxyyyypABBzz
44     >>>aaabxyzpqrrrabbxyyyypqAzz
45     >aaaabxyzpqrrrabbxyyyypqAzz
46     >>>>abcxyzpqrrrabbxyyyypqAzz
47     *** Failers
48     abxyzpqrrabbxyyyypqAzz
49     abxyzpqrrrrabbxyyyypqAzz
50     abxyzpqrrrabxyyyypqAzz
51     aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
52     aaaabcxyzzzzpqrrrabbbxyyypqAzz
53     aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
54    
55     /^(abc){1,2}zz/
56     abczz
57     abcabczz
58     *** Failers
59     zz
60     abcabcabczz
61     >>abczz
62    
63     /^(b+?|a){1,2}?c/
64     bc
65     bbc
66     bbbc
67     bac
68     bbac
69     aac
70     abbbbbbbbbbbc
71     bbbbbbbbbbbac
72     *** Failers
73     aaac
74     abbbbbbbbbbbac
75    
76     /^(b+|a){1,2}c/
77     bc
78     bbc
79     bbbc
80     bac
81     bbac
82     aac
83     abbbbbbbbbbbc
84     bbbbbbbbbbbac
85     *** Failers
86     aaac
87     abbbbbbbbbbbac
88    
89     /^(b+|a){1,2}?bc/
90     bbc
91    
92     /^(b*|ba){1,2}?bc/
93     babc
94     bbabc
95     bababc
96     *** Failers
97     bababbc
98     babababc
99    
100     /^(ba|b*){1,2}?bc/
101     babc
102     bbabc
103     bababc
104     *** Failers
105     bababbc
106     babababc
107    
108     /^\ca\cA\c[\c{\c:/
109     \x01\x01\e;z
110    
111     /^[ab\]cde]/
112     athing
113     bthing
114     ]thing
115     cthing
116     dthing
117     ething
118     *** Failers
119     fthing
120     [thing
121     \\thing
122    
123     /^[]cde]/
124     ]thing
125     cthing
126     dthing
127     ething
128     *** Failers
129     athing
130     fthing
131    
132     /^[^ab\]cde]/
133     fthing
134     [thing
135     \\thing
136     *** Failers
137     athing
138     bthing
139     ]thing
140     cthing
141     dthing
142     ething
143    
144     /^[^]cde]/
145     athing
146     fthing
147     *** Failers
148     ]thing
149     cthing
150     dthing
151     ething
152    
153     /^\/
154    
155    
156     /^/
157    
158    
159     /^[0-9]+$/
160     0
161     1
162     2
163     3
164     4
165     5
166     6
167     7
168     8
169     9
170     10
171     100
172     *** Failers
173     abc
174    
175     /^.*nter/
176     enter
177     inter
178     uponter
179    
180     /^xxx[0-9]+$/
181     xxx0
182     xxx1234
183     *** Failers
184     xxx
185    
186     /^.+[0-9][0-9][0-9]$/
187     x123
188     xx123
189     123456
190     *** Failers
191     123
192     x1234
193    
194     /^.+?[0-9][0-9][0-9]$/
195     x123
196     xx123
197     123456
198     *** Failers
199     123
200     x1234
201    
202     /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
203     abc!pqr=apquxz.ixr.zzz.ac.uk
204     *** Failers
205     !pqr=apquxz.ixr.zzz.ac.uk
206     abc!=apquxz.ixr.zzz.ac.uk
207     abc!pqr=apquxz:ixr.zzz.ac.uk
208     abc!pqr=apquxz.ixr.zzz.ac.ukk
209    
210     /:/
211     Well, we need a colon: somewhere
212     *** Fail if we don't
213    
214     /([\da-f:]+)$/i
215     0abc
216     abc
217     fed
218     E
219     ::
220     5f03:12C0::932e
221     fed def
222     Any old stuff
223     *** Failers
224     0zzz
225     gzzz
226     fed\x20
227     Any old rubbish
228    
229     /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
230     .1.2.3
231     A.12.123.0
232     *** Failers
233     .1.2.3333
234     1.2.3
235     1234.2.3
236    
237     /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
238     1 IN SOA non-sp1 non-sp2(
239     1 IN SOA non-sp1 non-sp2 (
240     *** Failers
241     1IN SOA non-sp1 non-sp2(
242    
243     /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
244     a.
245     Z.
246     2.
247     ab-c.pq-r.
248     sxk.zzz.ac.uk.
249     x-.y-.
250     *** Failers
251     -abc.peq.
252    
253     /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
254     *.a
255     *.b0-a
256     *.c3-b.c
257     *.c-a.b-c
258     *** Failers
259     *.0
260     *.a-
261     *.a-b.c-
262     *.c-a.0-c
263    
264     /^(?=ab(de))(abd)(e)/
265     abde
266    
267     /^(?!(ab)de|x)(abd)(f)/
268     abdf
269    
270     /^(?=(ab(cd)))(ab)/
271     abcd
272    
273     /^[\da-f](\.[\da-f])*$/i
274     a.b.c.d
275     A.B.C.D
276     a.b.c.1.2.3.C
277    
278     /^\".*\"\s*(;.*)?$/
279     \"1234\"
280     \"abcd\" ;
281     \"\" ; rhubarb
282     *** Failers
283     \"1234\" : things
284    
285     /^$/
286     \
287     *** Failers
288    
289     / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
290     ab c
291     *** Failers
292     abc
293     ab cde
294    
295     /(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
296     ab c
297     *** Failers
298     abc
299     ab cde
300    
301     /^ a\ b[c ]d $/x
302     a bcd
303     a b d
304     *** Failers
305     abcd
306     ab d
307    
308     /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
309     abcdefhijklm
310    
311     /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
312     abcdefhijklm
313    
314     /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
315     a+ Z0+\x08\n\x1d\x12
316    
317     /^[.^$|()*+?{,}]+/
318     .^\$(*+)|{?,?}
319    
320     /^a*\w/
321     z
322     az
323     aaaz
324     a
325     aa
326     aaaa
327     a+
328     aa+
329    
330     /^a*?\w/
331     z
332     az
333     aaaz
334     a
335     aa
336     aaaa
337     a+
338     aa+
339    
340     /^a+\w/
341     az
342     aaaz
343     aa
344     aaaa
345     aa+
346    
347     /^a+?\w/
348     az
349     aaaz
350     aa
351     aaaa
352     aa+
353    
354     /^\d{8}\w{2,}/
355     1234567890
356     12345678ab
357     12345678__
358     *** Failers
359     1234567
360    
361     /^[aeiou\d]{4,5}$/
362     uoie
363     1234
364     12345
365     aaaaa
366     *** Failers
367     123456
368    
369     /^[aeiou\d]{4,5}?/
370     uoie
371     1234
372     12345
373     aaaaa
374     123456
375    
376     /\A(abc|def)=(\1){2,3}\Z/
377     abc=abcabc
378     def=defdefdef
379     *** Failers
380     abc=defdef
381    
382     /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
383     abcdefghijkcda2
384     abcdefghijkkkkcda2
385    
386     /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
387     cataract cataract23
388     catatonic catatonic23
389     caterpillar caterpillar23
390    
391    
392     /^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]/
393     From abcd Mon Sep 01 12:33:02 1997
394    
395     /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
396     From abcd Mon Sep 01 12:33:02 1997
397     From abcd Mon Sep 1 12:33:02 1997
398     *** Failers
399     From abcd Sep 01 12:33:02 1997
400    
401     /^12.34/s
402     12\n34
403     12\r34
404    
405     /\w+(?=\t)/
406     the quick brown\t fox
407    
408     /foo(?!bar)(.*)/
409     foobar is foolish see?
410    
411     /(?:(?!foo)...|^.{0,2})bar(.*)/
412     foobar crowbar etc
413     barrel
414     2barrel
415     A barrel
416    
417     /^(\D*)(?=\d)(?!123)/
418     abc456
419     *** Failers
420     abc123
421    
422     /^1234(?# test newlines
423     inside)/
424     1234
425    
426     /^1234 #comment in extended re
427     /x
428     1234
429    
430     /#rhubarb
431     abcd/x
432     abcd
433    
434     /^abcd#rhubarb/x
435     abcd
436    
437     /^(a)\1{2,3}(.)/
438     aaab
439     aaaab
440     aaaaab
441     aaaaaab
442    
443     /(?!^)abc/
444     the abc
445     *** Failers
446     abc
447    
448     /(?=^)abc/
449     abc
450     *** Failers
451     the abc
452    
453     /^[ab]{1,3}(ab*|b)/
454     aabbbbb
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     / (?: [\040\t] | \(
466     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
467     \) )* # optional leading comment
468     (?: (?:
469     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
470     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
471     |
472     " (?: # opening quote...
473     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
474     | # or
475     \\ [^\x80-\xff] # Escaped something (something != CR)
476     )* " # closing quote
477     ) # initial word
478     (?: (?: [\040\t] | \(
479     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
480     \) )* \. (?: [\040\t] | \(
481     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
482     \) )* (?:
483     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
484     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
485     |
486     " (?: # opening quote...
487     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
488     | # or
489     \\ [^\x80-\xff] # Escaped something (something != CR)
490     )* " # closing quote
491     ) )* # further okay, if led by a period
492     (?: [\040\t] | \(
493     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
494     \) )* @ (?: [\040\t] | \(
495     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
496     \) )* (?:
497     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
498     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
499     | \[ # [
500     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
501     \] # ]
502     ) # initial subdomain
503     (?: #
504     (?: [\040\t] | \(
505     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
506     \) )* \. # if led by a period...
507     (?: [\040\t] | \(
508     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
509     \) )* (?:
510     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
511     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
512     | \[ # [
513     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
514     \] # ]
515     ) # ...further okay
516     )*
517     # address
518     | # or
519     (?:
520     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
521     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
522     |
523     " (?: # opening quote...
524     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
525     | # or
526     \\ [^\x80-\xff] # Escaped something (something != CR)
527     )* " # closing quote
528     ) # one word, optionally followed by....
529     (?:
530     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
531     \(
532     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
533     \) | # comments, or...
534    
535     " (?: # opening quote...
536     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
537     | # or
538     \\ [^\x80-\xff] # Escaped something (something != CR)
539     )* " # closing quote
540     # quoted strings
541     )*
542     < (?: [\040\t] | \(
543     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
544     \) )* # leading <
545     (?: @ (?: [\040\t] | \(
546     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
547     \) )* (?:
548     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
549     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
550     | \[ # [
551     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
552     \] # ]
553     ) # initial subdomain
554     (?: #
555     (?: [\040\t] | \(
556     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
557     \) )* \. # if led by a period...
558     (?: [\040\t] | \(
559     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
560     \) )* (?:
561     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
562     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
563     | \[ # [
564     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
565     \] # ]
566     ) # ...further okay
567     )*
568    
569     (?: (?: [\040\t] | \(
570     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
571     \) )* , (?: [\040\t] | \(
572     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
573     \) )* @ (?: [\040\t] | \(
574     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
575     \) )* (?:
576     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
577     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
578     | \[ # [
579     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
580     \] # ]
581     ) # initial subdomain
582     (?: #
583     (?: [\040\t] | \(
584     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
585     \) )* \. # if led by a period...
586     (?: [\040\t] | \(
587     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
588     \) )* (?:
589     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
590     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
591     | \[ # [
592     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
593     \] # ]
594     ) # ...further okay
595     )*
596     )* # further okay, if led by comma
597     : # closing colon
598     (?: [\040\t] | \(
599     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
600     \) )* )? # optional route
601     (?:
602     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
603     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
604     |
605     " (?: # opening quote...
606     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
607     | # or
608     \\ [^\x80-\xff] # Escaped something (something != CR)
609     )* " # closing quote
610     ) # initial word
611     (?: (?: [\040\t] | \(
612     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
613     \) )* \. (?: [\040\t] | \(
614     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
615     \) )* (?:
616     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
617     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
618     |
619     " (?: # opening quote...
620     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
621     | # or
622     \\ [^\x80-\xff] # Escaped something (something != CR)
623     )* " # closing quote
624     ) )* # further okay, if led by a period
625     (?: [\040\t] | \(
626     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
627     \) )* @ (?: [\040\t] | \(
628     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
629     \) )* (?:
630     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
631     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
632     | \[ # [
633     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
634     \] # ]
635     ) # initial subdomain
636     (?: #
637     (?: [\040\t] | \(
638     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
639     \) )* \. # if led by a period...
640     (?: [\040\t] | \(
641     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
642     \) )* (?:
643     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
644     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
645     | \[ # [
646     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
647     \] # ]
648     ) # ...further okay
649     )*
650     # address spec
651     (?: [\040\t] | \(
652     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
653     \) )* > # trailing >
654     # name and address
655     ) (?: [\040\t] | \(
656     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
657     \) )* # optional trailing comment
658     /x
659     Alan Other <user\@dom.ain>
660     <user\@dom.ain>
661     user\@dom.ain
662     \"A. Other\" <user.1234\@dom.ain> (a comment)
663     A. Other <user.1234\@dom.ain> (a comment)
664     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
665     A missing angle <user\@some.where
666     *** Failers
667     The quick brown fox
668    
669     /[\040\t]* # Nab whitespace.
670     (?:
671     \( # (
672     [^\\\x80-\xff\n\015()] * # normal*
673     (?: # (
674     (?: \\ [^\x80-\xff] |
675     \( # (
676     [^\\\x80-\xff\n\015()] * # normal*
677     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
678     \) # )
679     ) # special
680     [^\\\x80-\xff\n\015()] * # normal*
681     )* # )*
682     \) # )
683     [\040\t]* )* # If comment found, allow more spaces.
684     # optional leading comment
685     (?:
686     (?:
687     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
688     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
689     # Atom
690     | # or
691     " # "
692     [^\\\x80-\xff\n\015"] * # normal
693     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
694     " # "
695     # Quoted string
696     )
697     [\040\t]* # Nab whitespace.
698     (?:
699     \( # (
700     [^\\\x80-\xff\n\015()] * # normal*
701     (?: # (
702     (?: \\ [^\x80-\xff] |
703     \( # (
704     [^\\\x80-\xff\n\015()] * # normal*
705     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
706     \) # )
707     ) # special
708     [^\\\x80-\xff\n\015()] * # normal*
709     )* # )*
710     \) # )
711     [\040\t]* )* # If comment found, allow more spaces.
712     (?:
713     \.
714     [\040\t]* # Nab whitespace.
715     (?:
716     \( # (
717     [^\\\x80-\xff\n\015()] * # normal*
718     (?: # (
719     (?: \\ [^\x80-\xff] |
720     \( # (
721     [^\\\x80-\xff\n\015()] * # normal*
722     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
723     \) # )
724     ) # special
725     [^\\\x80-\xff\n\015()] * # normal*
726     )* # )*
727     \) # )
728     [\040\t]* )* # If comment found, allow more spaces.
729     (?:
730     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
731     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
732     # Atom
733     | # or
734     " # "
735     [^\\\x80-\xff\n\015"] * # normal
736     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
737     " # "
738     # Quoted string
739     )
740     [\040\t]* # Nab whitespace.
741     (?:
742     \( # (
743     [^\\\x80-\xff\n\015()] * # normal*
744     (?: # (
745     (?: \\ [^\x80-\xff] |
746     \( # (
747     [^\\\x80-\xff\n\015()] * # normal*
748     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
749     \) # )
750     ) # special
751     [^\\\x80-\xff\n\015()] * # normal*
752     )* # )*
753     \) # )
754     [\040\t]* )* # If comment found, allow more spaces.
755     # additional words
756     )*
757     @
758     [\040\t]* # Nab whitespace.
759     (?:
760     \( # (
761     [^\\\x80-\xff\n\015()] * # normal*
762     (?: # (
763     (?: \\ [^\x80-\xff] |
764     \( # (
765     [^\\\x80-\xff\n\015()] * # normal*
766     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
767     \) # )
768     ) # special
769     [^\\\x80-\xff\n\015()] * # normal*
770     )* # )*
771     \) # )
772     [\040\t]* )* # If comment found, allow more spaces.
773     (?:
774     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
775     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
776     |
777     \[ # [
778     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
779     \] # ]
780     )
781     [\040\t]* # Nab whitespace.
782     (?:
783     \( # (
784     [^\\\x80-\xff\n\015()] * # normal*
785     (?: # (
786     (?: \\ [^\x80-\xff] |
787     \( # (
788     [^\\\x80-\xff\n\015()] * # normal*
789     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
790     \) # )
791     ) # special
792     [^\\\x80-\xff\n\015()] * # normal*
793     )* # )*
794     \) # )
795     [\040\t]* )* # If comment found, allow more spaces.
796     # optional trailing comments
797     (?:
798     \.
799     [\040\t]* # Nab whitespace.
800     (?:
801     \( # (
802     [^\\\x80-\xff\n\015()] * # normal*
803     (?: # (
804     (?: \\ [^\x80-\xff] |
805     \( # (
806     [^\\\x80-\xff\n\015()] * # normal*
807     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
808     \) # )
809     ) # special
810     [^\\\x80-\xff\n\015()] * # normal*
811     )* # )*
812     \) # )
813     [\040\t]* )* # If comment found, allow more spaces.
814     (?:
815     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
816     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
817     |
818     \[ # [
819     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
820     \] # ]
821     )
822     [\040\t]* # Nab whitespace.
823     (?:
824     \( # (
825     [^\\\x80-\xff\n\015()] * # normal*
826     (?: # (
827     (?: \\ [^\x80-\xff] |
828     \( # (
829     [^\\\x80-\xff\n\015()] * # normal*
830     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
831     \) # )
832     ) # special
833     [^\\\x80-\xff\n\015()] * # normal*
834     )* # )*
835     \) # )
836     [\040\t]* )* # If comment found, allow more spaces.
837     # optional trailing comments
838     )*
839     # address
840     | # or
841     (?:
842     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
843     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
844     # Atom
845     | # or
846     " # "
847     [^\\\x80-\xff\n\015"] * # normal
848     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
849     " # "
850     # Quoted string
851     )
852     # leading word
853     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
854     (?:
855     (?:
856     \( # (
857     [^\\\x80-\xff\n\015()] * # normal*
858     (?: # (
859     (?: \\ [^\x80-\xff] |
860     \( # (
861     [^\\\x80-\xff\n\015()] * # normal*
862     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
863     \) # )
864     ) # special
865     [^\\\x80-\xff\n\015()] * # normal*
866     )* # )*
867     \) # )
868     |
869     " # "
870     [^\\\x80-\xff\n\015"] * # normal
871     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
872     " # "
873     ) # "special" comment or quoted string
874     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
875     )*
876     <
877     [\040\t]* # Nab whitespace.
878     (?:
879     \( # (
880     [^\\\x80-\xff\n\015()] * # normal*
881     (?: # (
882     (?: \\ [^\x80-\xff] |
883     \( # (
884     [^\\\x80-\xff\n\015()] * # normal*
885     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
886     \) # )
887     ) # special
888     [^\\\x80-\xff\n\015()] * # normal*
889     )* # )*
890     \) # )
891     [\040\t]* )* # If comment found, allow more spaces.
892     # <
893     (?:
894     @
895     [\040\t]* # Nab whitespace.
896     (?:
897     \( # (
898     [^\\\x80-\xff\n\015()] * # normal*
899     (?: # (
900     (?: \\ [^\x80-\xff] |
901     \( # (
902     [^\\\x80-\xff\n\015()] * # normal*
903     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
904     \) # )
905     ) # special
906     [^\\\x80-\xff\n\015()] * # normal*
907     )* # )*
908     \) # )
909     [\040\t]* )* # If comment found, allow more spaces.
910     (?:
911     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
912     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
913     |
914     \[ # [
915     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
916     \] # ]
917     )
918     [\040\t]* # Nab whitespace.
919     (?:
920     \( # (
921     [^\\\x80-\xff\n\015()] * # normal*
922     (?: # (
923     (?: \\ [^\x80-\xff] |
924     \( # (
925     [^\\\x80-\xff\n\015()] * # normal*
926     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
927     \) # )
928     ) # special
929     [^\\\x80-\xff\n\015()] * # normal*
930     )* # )*
931     \) # )
932     [\040\t]* )* # If comment found, allow more spaces.
933     # optional trailing comments
934     (?:
935     \.
936     [\040\t]* # Nab whitespace.
937     (?:
938     \( # (
939     [^\\\x80-\xff\n\015()] * # normal*
940     (?: # (
941     (?: \\ [^\x80-\xff] |
942     \( # (
943     [^\\\x80-\xff\n\015()] * # normal*
944     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
945     \) # )
946     ) # special
947     [^\\\x80-\xff\n\015()] * # normal*
948     )* # )*
949     \) # )
950     [\040\t]* )* # If comment found, allow more spaces.
951     (?:
952     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
953     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
954     |
955     \[ # [
956     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
957     \] # ]
958     )
959     [\040\t]* # Nab whitespace.
960     (?:
961     \( # (
962     [^\\\x80-\xff\n\015()] * # normal*
963     (?: # (
964     (?: \\ [^\x80-\xff] |
965     \( # (
966     [^\\\x80-\xff\n\015()] * # normal*
967     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
968     \) # )
969     ) # special
970     [^\\\x80-\xff\n\015()] * # normal*
971     )* # )*
972     \) # )
973     [\040\t]* )* # If comment found, allow more spaces.
974     # optional trailing comments
975     )*
976     (?: ,
977     [\040\t]* # Nab whitespace.
978     (?:
979     \( # (
980     [^\\\x80-\xff\n\015()] * # normal*
981     (?: # (
982     (?: \\ [^\x80-\xff] |
983     \( # (
984     [^\\\x80-\xff\n\015()] * # normal*
985     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
986     \) # )
987     ) # special
988     [^\\\x80-\xff\n\015()] * # normal*
989     )* # )*
990     \) # )
991     [\040\t]* )* # If comment found, allow more spaces.
992     @
993     [\040\t]* # Nab whitespace.
994     (?:
995     \( # (
996     [^\\\x80-\xff\n\015()] * # normal*
997     (?: # (
998     (?: \\ [^\x80-\xff] |
999     \( # (
1000     [^\\\x80-\xff\n\015()] * # normal*
1001     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1002     \) # )
1003     ) # special
1004     [^\\\x80-\xff\n\015()] * # normal*
1005     )* # )*
1006     \) # )
1007     [\040\t]* )* # If comment found, allow more spaces.
1008     (?:
1009     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1010     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1011     |
1012     \[ # [
1013     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1014     \] # ]
1015     )
1016     [\040\t]* # Nab whitespace.
1017     (?:
1018     \( # (
1019     [^\\\x80-\xff\n\015()] * # normal*
1020     (?: # (
1021     (?: \\ [^\x80-\xff] |
1022     \( # (
1023     [^\\\x80-\xff\n\015()] * # normal*
1024     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1025     \) # )
1026     ) # special
1027     [^\\\x80-\xff\n\015()] * # normal*
1028     )* # )*
1029     \) # )
1030     [\040\t]* )* # If comment found, allow more spaces.
1031     # optional trailing comments
1032     (?:
1033     \.
1034     [\040\t]* # Nab whitespace.
1035     (?:
1036     \( # (
1037     [^\\\x80-\xff\n\015()] * # normal*
1038     (?: # (
1039     (?: \\ [^\x80-\xff] |
1040     \( # (
1041     [^\\\x80-\xff\n\015()] * # normal*
1042     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1043     \) # )
1044     ) # special
1045     [^\\\x80-\xff\n\015()] * # normal*
1046     )* # )*
1047     \) # )
1048     [\040\t]* )* # If comment found, allow more spaces.
1049     (?:
1050     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1051     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1052     |
1053     \[ # [
1054     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1055     \] # ]
1056     )
1057     [\040\t]* # Nab whitespace.
1058     (?:
1059     \( # (
1060     [^\\\x80-\xff\n\015()] * # normal*
1061     (?: # (
1062     (?: \\ [^\x80-\xff] |
1063     \( # (
1064     [^\\\x80-\xff\n\015()] * # normal*
1065     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1066     \) # )
1067     ) # special
1068     [^\\\x80-\xff\n\015()] * # normal*
1069     )* # )*
1070     \) # )
1071     [\040\t]* )* # If comment found, allow more spaces.
1072     # optional trailing comments
1073     )*
1074     )* # additional domains
1075     :
1076     [\040\t]* # Nab whitespace.
1077     (?:
1078     \( # (
1079     [^\\\x80-\xff\n\015()] * # normal*
1080     (?: # (
1081     (?: \\ [^\x80-\xff] |
1082     \( # (
1083     [^\\\x80-\xff\n\015()] * # normal*
1084     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1085     \) # )
1086     ) # special
1087     [^\\\x80-\xff\n\015()] * # normal*
1088     )* # )*
1089     \) # )
1090     [\040\t]* )* # If comment found, allow more spaces.
1091     # optional trailing comments
1092     )? # optional route
1093     (?:
1094     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1095     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1096     # Atom
1097     | # or
1098     " # "
1099     [^\\\x80-\xff\n\015"] * # normal
1100     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1101     " # "
1102     # Quoted string
1103     )
1104     [\040\t]* # Nab whitespace.
1105     (?:
1106     \( # (
1107     [^\\\x80-\xff\n\015()] * # normal*
1108     (?: # (
1109     (?: \\ [^\x80-\xff] |
1110     \( # (
1111     [^\\\x80-\xff\n\015()] * # normal*
1112     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1113     \) # )
1114     ) # special
1115     [^\\\x80-\xff\n\015()] * # normal*
1116     )* # )*
1117     \) # )
1118     [\040\t]* )* # If comment found, allow more spaces.
1119     (?:
1120     \.
1121     [\040\t]* # Nab whitespace.
1122     (?:
1123     \( # (
1124     [^\\\x80-\xff\n\015()] * # normal*
1125     (?: # (
1126     (?: \\ [^\x80-\xff] |
1127     \( # (
1128     [^\\\x80-\xff\n\015()] * # normal*
1129     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1130     \) # )
1131     ) # special
1132     [^\\\x80-\xff\n\015()] * # normal*
1133     )* # )*
1134     \) # )
1135     [\040\t]* )* # If comment found, allow more spaces.
1136     (?:
1137     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1138     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1139     # Atom
1140     | # or
1141     " # "
1142     [^\\\x80-\xff\n\015"] * # normal
1143     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1144     " # "
1145     # Quoted string
1146     )
1147     [\040\t]* # Nab whitespace.
1148     (?:
1149     \( # (
1150     [^\\\x80-\xff\n\015()] * # normal*
1151     (?: # (
1152     (?: \\ [^\x80-\xff] |
1153     \( # (
1154     [^\\\x80-\xff\n\015()] * # normal*
1155     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1156     \) # )
1157     ) # special
1158     [^\\\x80-\xff\n\015()] * # normal*
1159     )* # )*
1160     \) # )
1161     [\040\t]* )* # If comment found, allow more spaces.
1162     # additional words
1163     )*
1164     @
1165     [\040\t]* # Nab whitespace.
1166     (?:
1167     \( # (
1168     [^\\\x80-\xff\n\015()] * # normal*
1169     (?: # (
1170     (?: \\ [^\x80-\xff] |
1171     \( # (
1172     [^\\\x80-\xff\n\015()] * # normal*
1173     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1174     \) # )
1175     ) # special
1176     [^\\\x80-\xff\n\015()] * # normal*
1177     )* # )*
1178     \) # )
1179     [\040\t]* )* # If comment found, allow more spaces.
1180     (?:
1181     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1182     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1183     |
1184     \[ # [
1185     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1186     \] # ]
1187     )
1188     [\040\t]* # Nab whitespace.
1189     (?:
1190     \( # (
1191     [^\\\x80-\xff\n\015()] * # normal*
1192     (?: # (
1193     (?: \\ [^\x80-\xff] |
1194     \( # (
1195     [^\\\x80-\xff\n\015()] * # normal*
1196     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1197     \) # )
1198     ) # special
1199     [^\\\x80-\xff\n\015()] * # normal*
1200     )* # )*
1201     \) # )
1202     [\040\t]* )* # If comment found, allow more spaces.
1203     # optional trailing comments
1204     (?:
1205     \.
1206     [\040\t]* # Nab whitespace.
1207     (?:
1208     \( # (
1209     [^\\\x80-\xff\n\015()] * # normal*
1210     (?: # (
1211     (?: \\ [^\x80-\xff] |
1212     \( # (
1213     [^\\\x80-\xff\n\015()] * # normal*
1214     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1215     \) # )
1216     ) # special
1217     [^\\\x80-\xff\n\015()] * # normal*
1218     )* # )*
1219     \) # )
1220     [\040\t]* )* # If comment found, allow more spaces.
1221     (?:
1222     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1223     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1224     |
1225     \[ # [
1226     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1227     \] # ]
1228     )
1229     [\040\t]* # Nab whitespace.
1230     (?:
1231     \( # (
1232     [^\\\x80-\xff\n\015()] * # normal*
1233     (?: # (
1234     (?: \\ [^\x80-\xff] |
1235     \( # (
1236     [^\\\x80-\xff\n\015()] * # normal*
1237     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1238     \) # )
1239     ) # special
1240     [^\\\x80-\xff\n\015()] * # normal*
1241     )* # )*
1242     \) # )
1243     [\040\t]* )* # If comment found, allow more spaces.
1244     # optional trailing comments
1245     )*
1246     # address spec
1247     > # >
1248     # name and address
1249     )
1250     /x
1251     Alan Other <user\@dom.ain>
1252     <user\@dom.ain>
1253     user\@dom.ain
1254     \"A. Other\" <user.1234\@dom.ain> (a comment)
1255     A. Other <user.1234\@dom.ain> (a comment)
1256     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1257     A missing angle <user\@some.where
1258     *** Failers
1259     The quick brown fox
1260    
1261     /abc\0def\00pqr\000xyz\0000AB/
1262     abc\0def\00pqr\000xyz\0000AB
1263     abc456 abc\0def\00pqr\000xyz\0000ABCDE
1264    
1265     /abc\x0def\x00pqr\x000xyz\x0000AB/
1266     abc\x0def\x00pqr\x000xyz\x0000AB
1267     abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
1268    
1269     /^[\000-\037]/
1270     \0A
1271     \01B
1272     \037C
1273    
1274     /\0*/
1275     \0\0\0\0
1276    
1277     /A\x0{2,3}Z/
1278     The A\x0\x0Z
1279     An A\0\x0\0Z
1280     *** Failers
1281     A\0Z
1282     A\0\x0\0\x0Z
1283    
1284     /^(cow|)\1(bell)/
1285     cowcowbell
1286     bell
1287     *** Failers
1288     cowbell
1289    
1290     /^\s/
1291     \040abc
1292     \x0cabc
1293     \nabc
1294     \rabc
1295     \tabc
1296     *** Failers
1297     abc
1298    
1299     /^a b
1300    
1301     c/x
1302     abc
1303    
1304     /^(a|)\1*b/
1305     ab
1306     aaaab
1307     b
1308     *** Failers
1309     acb
1310    
1311     /^(a|)\1+b/
1312     aab
1313     aaaab
1314     b
1315     *** Failers
1316     ab
1317    
1318     /^(a|)\1?b/
1319     ab
1320     aab
1321     b
1322     *** Failers
1323     acb
1324    
1325     /^(a|)\1{2}b/
1326     aaab
1327     b
1328     *** Failers
1329     ab
1330     aab
1331     aaaab
1332    
1333     /^(a|)\1{2,3}b/
1334     aaab
1335     aaaab
1336     b
1337     *** Failers
1338     ab
1339     aab
1340     aaaaab
1341    
1342     /ab{1,3}bc/
1343     abbbbc
1344     abbbc
1345     abbc
1346     *** Failers
1347     abc
1348     abbbbbc
1349    
1350     /([^.]*)\.([^:]*):[T ]+(.*)/
1351     track1.title:TBlah blah blah
1352    
1353     /([^.]*)\.([^:]*):[T ]+(.*)/i
1354     track1.title:TBlah blah blah
1355    
1356     /([^.]*)\.([^:]*):[t ]+(.*)/i
1357     track1.title:TBlah blah blah
1358    
1359     /^[W-c]+$/
1360     WXY_^abc
1361     ***Failers
1362     wxy
1363    
1364     /^[W-c]+$/i
1365     WXY_^abc
1366     wxy_^ABC
1367    
1368     /^[\x3f-\x5F]+$/i
1369     WXY_^abc
1370     wxy_^ABC
1371    
1372     /^abc$/m
1373     abc
1374     qqq\nabc
1375     abc\nzzz
1376     qqq\nabc\nzzz
1377    
1378     /^abc$/
1379     abc
1380     *** Failers
1381     qqq\nabc
1382     abc\nzzz
1383     qqq\nabc\nzzz
1384    
1385     /\Aabc\Z/m
1386     abc
1387     *** Failers
1388     qqq\nabc
1389     abc\nzzz
1390     qqq\nabc\nzzz
1391    
1392     /\A(.)*\Z/s
1393     abc\ndef
1394    
1395     /\A(.)*\Z/m
1396     *** Failers
1397     abc\ndef
1398    
1399     /(?:b)|(?::+)/
1400     b::c
1401     c::b
1402    
1403     /[-az]+/
1404     az-
1405     *** Failers
1406     b
1407    
1408     /[az-]+/
1409     za-
1410     *** Failers
1411     b
1412    
1413     /[a\-z]+/
1414     a-z
1415     *** Failers
1416     b
1417    
1418     /[a-z]+/
1419     abcdxyz
1420    
1421     /[\d-]+/
1422     12-34
1423     *** Failers
1424     aaa
1425    
1426     /[\d-z]+/
1427     12-34z
1428     *** Failers
1429     aaa
1430    
1431     /\x5c/
1432     \\
1433    
1434     /\x20Z/
1435     the Zoo
1436     *** Failers
1437     Zulu
1438    
1439     /(abc)\1/i
1440     abcabc
1441     ABCabc
1442     abcABC
1443    
1444     /(main(OPT)?)+/
1445     mainmain
1446     mainOPTmain
1447    
1448     /ab{3cd/
1449     ab{3cd
1450    
1451     /ab{3,cd/
1452     ab{3,cd
1453    
1454     /ab{3,4a}cd/
1455     ab{3,4a}cd
1456    
1457     /{4,5a}bc/
1458     {4,5a}bc
1459    
1460     /^a.b/
1461     a\rb
1462     *** Failers
1463     a\nb
1464    
1465     /abc$/
1466     abc
1467     abc\n
1468     *** Failers
1469     abc\ndef
1470    
1471     /(abc)\123/
1472     abc\x53
1473    
1474     /(abc)\223/
1475     abc\x93
1476    
1477     /(abc)\323/
1478     abc\xd3
1479    
1480     /(abc)\500/
1481     abc\x40
1482     abc\100
1483    
1484     /(abc)\5000/
1485     abc\x400
1486     abc\x40\x30
1487     abc\1000
1488     abc\100\x30
1489     abc\100\060
1490     abc\100\60
1491    
1492     /abc\81/
1493 nigel 9 abc\081
1494     abc\0\x38\x31
1495 nigel 3
1496     /abc\91/
1497 nigel 9 abc\091
1498     abc\0\x39\x31
1499 nigel 3
1500     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
1501     abcdefghijkllS
1502    
1503     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
1504     abcdefghijk\12S
1505    
1506     /ab\gdef/
1507     abgdef
1508    
1509     /a{0}bc/
1510     bc
1511    
1512     /(a|(bc)){0,0}?xyz/
1513     xyz
1514    
1515     /abc[\10]de/
1516     abc\010de
1517    
1518     /abc[\1]de/
1519     abc\1de
1520    
1521     /(abc)[\1]de/
1522     abc\1de
1523    
1524     /a.b(?s)/
1525     a\nb
1526    
1527     /^([^a])([^\b])([^c]*)([^d]{3,4})/
1528     baNOTccccd
1529     baNOTcccd
1530     baNOTccd
1531     bacccd
1532     *** Failers
1533     anything
1534     b\bc
1535     baccd
1536    
1537     /[^a]/
1538 nigel 9 Abc
1539 nigel 3
1540     /[^a]/i
1541 nigel 9 Abc
1542 nigel 3
1543     /[^a]+/
1544 nigel 9 AAAaAbc
1545 nigel 3
1546     /[^a]+/i
1547 nigel 9 AAAaAbc
1548 nigel 3
1549     /[^a]+/
1550 nigel 9 bbb\nccc
1551    
1552     /[^k]$/
1553     abc
1554     *** Failers
1555     abk
1556    
1557     /[^k]{2,3}$/
1558     abc
1559     kbc
1560     kabc
1561     *** Failers
1562     abk
1563     akb
1564     akk
1565 nigel 3
1566 nigel 9 /^\d{8,}\@.+[^k]$/
1567     12345678\@a.b.c.d
1568     123456789\@x.y.z
1569     *** Failers
1570     12345678\@x.y.uk
1571     1234567\@a.b.c.d
1572    
1573     /(a)\1{8,}/
1574     aaaaaaaaa
1575     aaaaaaaaaa
1576     *** Failers
1577     aaaaaaa
1578    
1579 nigel 13 /[^a]/
1580     aaaabcd
1581     aaAabcd
1582    
1583     /[^a]/i
1584     aaaabcd
1585     aaAabcd
1586    
1587     /[^az]/
1588     aaaabcd
1589     aaAabcd
1590    
1591     /[^az]/i
1592     aaaabcd
1593     aaAabcd
1594    
1595 nigel 3 / End of test input /

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12