upload http
[bottlenecks.git] / rubbos / app / httpd-2.0.64 / srclib / pcre / testdata / testinput1
1 /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 /^\\81/
154     \81
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   \r  \f  c/x
1301     abc
1302
1303 /^(a|)\1*b/
1304     ab
1305     aaaab
1306     b
1307     *** Failers
1308     acb
1309
1310 /^(a|)\1+b/
1311     aab
1312     aaaab
1313     b
1314     *** Failers
1315     ab
1316
1317 /^(a|)\1?b/
1318     ab
1319     aab
1320     b
1321     *** Failers
1322     acb
1323
1324 /^(a|)\1{2}b/
1325     aaab
1326     b
1327     *** Failers
1328     ab
1329     aab
1330     aaaab
1331
1332 /^(a|)\1{2,3}b/
1333     aaab
1334     aaaab
1335     b
1336     *** Failers
1337     ab
1338     aab
1339     aaaaab
1340
1341 /ab{1,3}bc/
1342     abbbbc
1343     abbbc
1344     abbc
1345     *** Failers
1346     abc
1347     abbbbbc
1348
1349 /([^.]*)\.([^:]*):[T ]+(.*)/
1350     track1.title:TBlah blah blah
1351
1352 /([^.]*)\.([^:]*):[T ]+(.*)/i
1353     track1.title:TBlah blah blah
1354
1355 /([^.]*)\.([^:]*):[t ]+(.*)/i
1356     track1.title:TBlah blah blah
1357
1358 /^[W-c]+$/
1359     WXY_^abc
1360     ***Failers
1361     wxy
1362
1363 /^[W-c]+$/i
1364     WXY_^abc
1365     wxy_^ABC
1366
1367 /^[\x3f-\x5F]+$/i
1368     WXY_^abc
1369     wxy_^ABC
1370
1371 /^abc$/m
1372     abc
1373     qqq\nabc
1374     abc\nzzz
1375     qqq\nabc\nzzz
1376
1377 /^abc$/
1378     abc
1379     *** Failers
1380     qqq\nabc
1381     abc\nzzz
1382     qqq\nabc\nzzz
1383
1384 /\Aabc\Z/m
1385     abc
1386     abc\n 
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 /ab{3cd/
1445     ab{3cd
1446
1447 /ab{3,cd/
1448     ab{3,cd
1449
1450 /ab{3,4a}cd/
1451     ab{3,4a}cd
1452
1453 /{4,5a}bc/
1454     {4,5a}bc
1455
1456 /^a.b/
1457     a\rb
1458     *** Failers
1459     a\nb
1460
1461 /abc$/
1462     abc
1463     abc\n
1464     *** Failers
1465     abc\ndef
1466
1467 /(abc)\123/
1468     abc\x53
1469
1470 /(abc)\223/
1471     abc\x93
1472
1473 /(abc)\323/
1474     abc\xd3
1475
1476 /(abc)\500/
1477     abc\x40
1478     abc\100
1479
1480 /(abc)\5000/
1481     abc\x400
1482     abc\x40\x30
1483     abc\1000
1484     abc\100\x30
1485     abc\100\060
1486     abc\100\60
1487
1488 /abc\81/
1489     abc\081
1490     abc\0\x38\x31
1491
1492 /abc\91/
1493     abc\091
1494     abc\0\x39\x31
1495
1496 /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
1497     abcdefghijkllS
1498
1499 /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
1500     abcdefghijk\12S
1501
1502 /ab\gdef/
1503     abgdef
1504
1505 /a{0}bc/
1506     bc
1507
1508 /(a|(bc)){0,0}?xyz/
1509     xyz
1510
1511 /abc[\10]de/
1512     abc\010de
1513
1514 /abc[\1]de/
1515     abc\1de
1516
1517 /(abc)[\1]de/
1518     abc\1de
1519
1520 /a.b(?s)/
1521     a\nb
1522
1523 /^([^a])([^\b])([^c]*)([^d]{3,4})/
1524     baNOTccccd
1525     baNOTcccd
1526     baNOTccd
1527     bacccd
1528     *** Failers
1529     anything
1530     b\bc   
1531     baccd
1532
1533 /[^a]/
1534     Abc
1535   
1536 /[^a]/i
1537     Abc 
1538
1539 /[^a]+/
1540     AAAaAbc
1541   
1542 /[^a]+/i
1543     AAAaAbc 
1544
1545 /[^a]+/
1546     bbb\nccc
1547    
1548 /[^k]$/
1549     abc
1550     *** Failers
1551     abk   
1552    
1553 /[^k]{2,3}$/
1554     abc
1555     kbc
1556     kabc 
1557     *** Failers
1558     abk
1559     akb
1560     akk 
1561
1562 /^\d{8,}\@.+[^k]$/
1563     12345678\@a.b.c.d
1564     123456789\@x.y.z
1565     *** Failers
1566     12345678\@x.y.uk
1567     1234567\@a.b.c.d       
1568
1569 /(a)\1{8,}/
1570     aaaaaaaaa
1571     aaaaaaaaaa
1572     *** Failers
1573     aaaaaaa   
1574
1575 /[^a]/
1576     aaaabcd
1577     aaAabcd 
1578
1579 /[^a]/i
1580     aaaabcd
1581     aaAabcd 
1582
1583 /[^az]/
1584     aaaabcd
1585     aaAabcd 
1586
1587 /[^az]/i
1588     aaaabcd
1589     aaAabcd 
1590
1591 /\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/
1592  \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
1593
1594 /P[^*]TAIRE[^*]{1,6}?LL/
1595     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1596
1597 /P[^*]TAIRE[^*]{1,}?LL/
1598     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
1599
1600 /(\.\d\d[1-9]?)\d+/
1601     1.230003938
1602     1.875000282   
1603     1.235  
1604                   
1605 /(\.\d\d((?=0)|\d(?=\d)))/
1606     1.230003938      
1607     1.875000282
1608     *** Failers 
1609     1.235 
1610     
1611 /a(?)b/
1612     ab 
1613  
1614 /\b(foo)\s+(\w+)/i
1615     Food is on the foo table
1616     
1617 /foo(.*)bar/
1618     The food is under the bar in the barn.
1619     
1620 /foo(.*?)bar/  
1621     The food is under the bar in the barn.
1622
1623 /(.*)(\d*)/
1624     I have 2 numbers: 53147
1625     
1626 /(.*)(\d+)/
1627     I have 2 numbers: 53147
1628  
1629 /(.*?)(\d*)/
1630     I have 2 numbers: 53147
1631
1632 /(.*?)(\d+)/
1633     I have 2 numbers: 53147
1634
1635 /(.*)(\d+)$/
1636     I have 2 numbers: 53147
1637
1638 /(.*?)(\d+)$/
1639     I have 2 numbers: 53147
1640
1641 /(.*)\b(\d+)$/
1642     I have 2 numbers: 53147
1643
1644 /(.*\D)(\d+)$/
1645     I have 2 numbers: 53147
1646
1647 /^\D*(?!123)/
1648     ABC123
1649      
1650 /^(\D*)(?=\d)(?!123)/
1651     ABC445
1652     *** Failers
1653     ABC123
1654     
1655 /^[W-]46]/
1656     W46]789 
1657     -46]789
1658     *** Failers
1659     Wall
1660     Zebra
1661     42
1662     [abcd] 
1663     ]abcd[
1664        
1665 /^[W-\]46]/
1666     W46]789 
1667     Wall
1668     Zebra
1669     Xylophone  
1670     42
1671     [abcd] 
1672     ]abcd[
1673     \\backslash 
1674     *** Failers
1675     -46]789
1676     well
1677     
1678 /\d\d\/\d\d\/\d\d\d\d/
1679     01/01/2000
1680
1681 /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
1682   word cat dog elephant mussel cow horse canary baboon snake shark otherword
1683   word cat dog elephant mussel cow horse canary baboon snake shark
1684
1685 /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
1686   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
1687
1688 /^(a){0,0}/
1689     bcd
1690     abc
1691     aab     
1692
1693 /^(a){0,1}/
1694     bcd
1695     abc
1696     aab  
1697
1698 /^(a){0,2}/
1699     bcd
1700     abc
1701     aab  
1702
1703 /^(a){0,3}/
1704     bcd
1705     abc
1706     aab
1707     aaa   
1708
1709 /^(a){0,}/
1710     bcd
1711     abc
1712     aab
1713     aaa
1714     aaaaaaaa    
1715
1716 /^(a){1,1}/
1717     bcd
1718     abc
1719     aab  
1720
1721 /^(a){1,2}/
1722     bcd
1723     abc
1724     aab  
1725
1726 /^(a){1,3}/
1727     bcd
1728     abc
1729     aab
1730     aaa   
1731
1732 /^(a){1,}/
1733     bcd
1734     abc
1735     aab
1736     aaa
1737     aaaaaaaa    
1738
1739 /.*\.gif/
1740     borfle\nbib.gif\nno
1741
1742 /.{0,}\.gif/
1743     borfle\nbib.gif\nno
1744
1745 /.*\.gif/m
1746     borfle\nbib.gif\nno
1747
1748 /.*\.gif/s
1749     borfle\nbib.gif\nno
1750
1751 /.*\.gif/ms
1752     borfle\nbib.gif\nno
1753     
1754 /.*$/
1755     borfle\nbib.gif\nno
1756
1757 /.*$/m
1758     borfle\nbib.gif\nno
1759
1760 /.*$/s
1761     borfle\nbib.gif\nno
1762
1763 /.*$/ms
1764     borfle\nbib.gif\nno
1765     
1766 /.*$/
1767     borfle\nbib.gif\nno\n
1768
1769 /.*$/m
1770     borfle\nbib.gif\nno\n
1771
1772 /.*$/s
1773     borfle\nbib.gif\nno\n
1774
1775 /.*$/ms
1776     borfle\nbib.gif\nno\n
1777     
1778 /(.*X|^B)/
1779     abcde\n1234Xyz
1780     BarFoo 
1781     *** Failers
1782     abcde\nBar  
1783
1784 /(.*X|^B)/m
1785     abcde\n1234Xyz
1786     BarFoo 
1787     abcde\nBar  
1788
1789 /(.*X|^B)/s
1790     abcde\n1234Xyz
1791     BarFoo 
1792     *** Failers
1793     abcde\nBar  
1794
1795 /(.*X|^B)/ms
1796     abcde\n1234Xyz
1797     BarFoo 
1798     abcde\nBar  
1799
1800 /(?s)(.*X|^B)/
1801     abcde\n1234Xyz
1802     BarFoo 
1803     *** Failers 
1804     abcde\nBar  
1805
1806 /(?s:.*X|^B)/
1807     abcde\n1234Xyz
1808     BarFoo 
1809     *** Failers 
1810     abcde\nBar  
1811
1812 /^.*B/
1813     **** Failers
1814     abc\nB
1815      
1816 /(?s)^.*B/
1817     abc\nB
1818
1819 /(?m)^.*B/
1820     abc\nB
1821      
1822 /(?ms)^.*B/
1823     abc\nB
1824
1825 /(?ms)^B/
1826     abc\nB
1827
1828 /(?s)B$/
1829     B\n
1830
1831 /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
1832     123456654321
1833   
1834 /^\d\d\d\d\d\d\d\d\d\d\d\d/
1835     123456654321 
1836
1837 /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
1838     123456654321
1839   
1840 /^[abc]{12}/
1841     abcabcabcabc
1842     
1843 /^[a-c]{12}/
1844     abcabcabcabc
1845     
1846 /^(a|b|c){12}/
1847     abcabcabcabc 
1848
1849 /^[abcdefghijklmnopqrstuvwxy0123456789]/
1850     n
1851     *** Failers 
1852     z 
1853
1854 /abcde{0,0}/
1855     abcd
1856     *** Failers
1857     abce  
1858
1859 /ab[cd]{0,0}e/
1860     abe
1861     *** Failers
1862     abcde 
1863     
1864 /ab(c){0,0}d/
1865     abd
1866     *** Failers
1867     abcd   
1868
1869 /a(b*)/
1870     a
1871     ab
1872     abbbb
1873     *** Failers
1874     bbbbb    
1875     
1876 /ab\d{0}e/
1877     abe
1878     *** Failers
1879     ab1e   
1880     
1881 /"([^\\"]+|\\.)*"/
1882     the \"quick\" brown fox
1883     \"the \\\"quick\\\" brown fox\" 
1884
1885 /.*?/g+
1886     abc
1887   
1888 /\b/g+
1889     abc 
1890
1891 /\b/+g
1892     abc 
1893
1894 //g
1895     abc
1896
1897 /<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
1898   <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>
1899
1900 /a[^a]b/
1901     acb
1902     a\nb
1903     
1904 /a.b/
1905     acb
1906     *** Failers 
1907     a\nb   
1908     
1909 /a[^a]b/s
1910     acb
1911     a\nb  
1912     
1913 /a.b/s
1914     acb
1915     a\nb  
1916
1917 /^(b+?|a){1,2}?c/
1918     bac
1919     bbac
1920     bbbac
1921     bbbbac
1922     bbbbbac 
1923
1924 /^(b+|a){1,2}?c/
1925     bac
1926     bbac
1927     bbbac
1928     bbbbac
1929     bbbbbac 
1930     
1931 /(?!\A)x/m
1932     x\nb\n
1933     a\bx\n  
1934     
1935 /\x0{ab}/
1936     \0{ab} 
1937
1938 /(A|B)*?CD/
1939     CD 
1940     
1941 /(A|B)*CD/
1942     CD 
1943
1944 /(AB)*?\1/
1945     ABABAB
1946
1947 /(AB)*\1/
1948     ABABAB
1949     
1950 / End of testinput1 /