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

Contents of /code/trunk/testdata/testoutput1

Parent Directory Parent Directory | Revision Log Revision Log


Revision 49 - (hide annotations) (download)
Sat Feb 24 21:39:33 2007 UTC (7 years, 8 months ago) by nigel
File size: 65341 byte(s)
Load pcre-3.3 into code/trunk.

1 nigel 49 PCRE version 3.3 01-Aug-2000
2 nigel 41
3     /the quick brown fox/
4     the quick brown fox
5     0: the quick brown fox
6     The quick brown FOX
7     No match
8     What do you know about the quick brown fox?
9     0: the quick brown fox
10     What do you know about THE QUICK BROWN FOX?
11     No match
12    
13     /The quick brown fox/i
14     the quick brown fox
15     0: the quick brown fox
16     The quick brown FOX
17     0: The quick brown FOX
18     What do you know about the quick brown fox?
19     0: the quick brown fox
20     What do you know about THE QUICK BROWN FOX?
21     0: THE QUICK BROWN FOX
22    
23     /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
24     abcd\t\n\r\f\a\e9;\$\\?caxyz
25     0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
26    
27     /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
28     abxyzpqrrrabbxyyyypqAzz
29     0: abxyzpqrrrabbxyyyypqAzz
30     abxyzpqrrrabbxyyyypqAzz
31     0: abxyzpqrrrabbxyyyypqAzz
32     aabxyzpqrrrabbxyyyypqAzz
33     0: aabxyzpqrrrabbxyyyypqAzz
34     aaabxyzpqrrrabbxyyyypqAzz
35     0: aaabxyzpqrrrabbxyyyypqAzz
36     aaaabxyzpqrrrabbxyyyypqAzz
37     0: aaaabxyzpqrrrabbxyyyypqAzz
38     abcxyzpqrrrabbxyyyypqAzz
39     0: abcxyzpqrrrabbxyyyypqAzz
40     aabcxyzpqrrrabbxyyyypqAzz
41     0: aabcxyzpqrrrabbxyyyypqAzz
42     aaabcxyzpqrrrabbxyyyypAzz
43     0: aaabcxyzpqrrrabbxyyyypAzz
44     aaabcxyzpqrrrabbxyyyypqAzz
45     0: aaabcxyzpqrrrabbxyyyypqAzz
46     aaabcxyzpqrrrabbxyyyypqqAzz
47     0: aaabcxyzpqrrrabbxyyyypqqAzz
48     aaabcxyzpqrrrabbxyyyypqqqAzz
49     0: aaabcxyzpqrrrabbxyyyypqqqAzz
50     aaabcxyzpqrrrabbxyyyypqqqqAzz
51     0: aaabcxyzpqrrrabbxyyyypqqqqAzz
52     aaabcxyzpqrrrabbxyyyypqqqqqAzz
53     0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
54     aaabcxyzpqrrrabbxyyyypqqqqqqAzz
55     0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
56     aaaabcxyzpqrrrabbxyyyypqAzz
57     0: aaaabcxyzpqrrrabbxyyyypqAzz
58     abxyzzpqrrrabbxyyyypqAzz
59     0: abxyzzpqrrrabbxyyyypqAzz
60     aabxyzzzpqrrrabbxyyyypqAzz
61     0: aabxyzzzpqrrrabbxyyyypqAzz
62     aaabxyzzzzpqrrrabbxyyyypqAzz
63     0: aaabxyzzzzpqrrrabbxyyyypqAzz
64     aaaabxyzzzzpqrrrabbxyyyypqAzz
65     0: aaaabxyzzzzpqrrrabbxyyyypqAzz
66     abcxyzzpqrrrabbxyyyypqAzz
67     0: abcxyzzpqrrrabbxyyyypqAzz
68     aabcxyzzzpqrrrabbxyyyypqAzz
69     0: aabcxyzzzpqrrrabbxyyyypqAzz
70     aaabcxyzzzzpqrrrabbxyyyypqAzz
71     0: aaabcxyzzzzpqrrrabbxyyyypqAzz
72     aaaabcxyzzzzpqrrrabbxyyyypqAzz
73     0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
74     aaaabcxyzzzzpqrrrabbbxyyyypqAzz
75     0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
76     aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
77     0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
78     aaabcxyzpqrrrabbxyyyypABzz
79     0: aaabcxyzpqrrrabbxyyyypABzz
80     aaabcxyzpqrrrabbxyyyypABBzz
81     0: aaabcxyzpqrrrabbxyyyypABBzz
82     >>>aaabxyzpqrrrabbxyyyypqAzz
83     0: aaabxyzpqrrrabbxyyyypqAzz
84     >aaaabxyzpqrrrabbxyyyypqAzz
85     0: aaaabxyzpqrrrabbxyyyypqAzz
86     >>>>abcxyzpqrrrabbxyyyypqAzz
87     0: abcxyzpqrrrabbxyyyypqAzz
88     *** Failers
89     No match
90     abxyzpqrrabbxyyyypqAzz
91     No match
92     abxyzpqrrrrabbxyyyypqAzz
93     No match
94     abxyzpqrrrabxyyyypqAzz
95     No match
96     aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
97     No match
98     aaaabcxyzzzzpqrrrabbbxyyypqAzz
99     No match
100     aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
101     No match
102    
103     /^(abc){1,2}zz/
104     abczz
105     0: abczz
106     1: abc
107     abcabczz
108     0: abcabczz
109     1: abc
110     *** Failers
111     No match
112     zz
113     No match
114     abcabcabczz
115     No match
116     >>abczz
117     No match
118    
119     /^(b+?|a){1,2}?c/
120     bc
121     0: bc
122     1: b
123     bbc
124     0: bbc
125     1: b
126     bbbc
127     0: bbbc
128     1: bb
129     bac
130     0: bac
131     1: a
132     bbac
133     0: bbac
134     1: a
135     aac
136     0: aac
137     1: a
138     abbbbbbbbbbbc
139     0: abbbbbbbbbbbc
140     1: bbbbbbbbbbb
141     bbbbbbbbbbbac
142     0: bbbbbbbbbbbac
143     1: a
144     *** Failers
145     No match
146     aaac
147     No match
148     abbbbbbbbbbbac
149     No match
150    
151     /^(b+|a){1,2}c/
152     bc
153     0: bc
154     1: b
155     bbc
156     0: bbc
157     1: bb
158     bbbc
159     0: bbbc
160     1: bbb
161     bac
162     0: bac
163     1: a
164     bbac
165     0: bbac
166     1: a
167     aac
168     0: aac
169     1: a
170     abbbbbbbbbbbc
171     0: abbbbbbbbbbbc
172     1: bbbbbbbbbbb
173     bbbbbbbbbbbac
174     0: bbbbbbbbbbbac
175     1: a
176     *** Failers
177     No match
178     aaac
179     No match
180     abbbbbbbbbbbac
181     No match
182    
183     /^(b+|a){1,2}?bc/
184     bbc
185     0: bbc
186     1: b
187    
188     /^(b*|ba){1,2}?bc/
189     babc
190     0: babc
191     1: ba
192     bbabc
193     0: bbabc
194     1: ba
195     bababc
196     0: bababc
197     1: ba
198     *** Failers
199     No match
200     bababbc
201     No match
202     babababc
203     No match
204    
205     /^(ba|b*){1,2}?bc/
206     babc
207     0: babc
208     1: ba
209     bbabc
210     0: bbabc
211     1: ba
212     bababc
213     0: bababc
214     1: ba
215     *** Failers
216     No match
217     bababbc
218     No match
219     babababc
220     No match
221    
222     /^\ca\cA\c[\c{\c:/
223     \x01\x01\e;z
224     0: \x01\x01\x1b;z
225    
226     /^[ab\]cde]/
227     athing
228     0: a
229     bthing
230     0: b
231     ]thing
232     0: ]
233     cthing
234     0: c
235     dthing
236     0: d
237     ething
238     0: e
239     *** Failers
240     No match
241     fthing
242     No match
243     [thing
244     No match
245     \\thing
246     No match
247    
248     /^[]cde]/
249     ]thing
250     0: ]
251     cthing
252     0: c
253     dthing
254     0: d
255     ething
256     0: e
257     *** Failers
258     No match
259     athing
260     No match
261     fthing
262     No match
263    
264     /^[^ab\]cde]/
265     fthing
266     0: f
267     [thing
268     0: [
269     \\thing
270     0: \
271     *** Failers
272     0: *
273     athing
274     No match
275     bthing
276     No match
277     ]thing
278     No match
279     cthing
280     No match
281     dthing
282     No match
283     ething
284     No match
285    
286     /^[^]cde]/
287     athing
288     0: a
289     fthing
290     0: f
291     *** Failers
292     0: *
293     ]thing
294     No match
295     cthing
296     No match
297     dthing
298     No match
299     ething
300     No match
301    
302     /^\/
303    
304     0: \x81
305    
306     /^/
307    
308     0: \xff
309    
310     /^[0-9]+$/
311     0
312     0: 0
313     1
314     0: 1
315     2
316     0: 2
317     3
318     0: 3
319     4
320     0: 4
321     5
322     0: 5
323     6
324     0: 6
325     7
326     0: 7
327     8
328     0: 8
329     9
330     0: 9
331     10
332     0: 10
333     100
334     0: 100
335     *** Failers
336     No match
337     abc
338     No match
339    
340     /^.*nter/
341     enter
342     0: enter
343     inter
344     0: inter
345     uponter
346     0: uponter
347    
348     /^xxx[0-9]+$/
349     xxx0
350     0: xxx0
351     xxx1234
352     0: xxx1234
353     *** Failers
354     No match
355     xxx
356     No match
357    
358     /^.+[0-9][0-9][0-9]$/
359     x123
360     0: x123
361     xx123
362     0: xx123
363     123456
364     0: 123456
365     *** Failers
366     No match
367     123
368     No match
369     x1234
370     0: x1234
371    
372     /^.+?[0-9][0-9][0-9]$/
373     x123
374     0: x123
375     xx123
376     0: xx123
377     123456
378     0: 123456
379     *** Failers
380     No match
381     123
382     No match
383     x1234
384     0: x1234
385    
386     /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
387     abc!pqr=apquxz.ixr.zzz.ac.uk
388     0: abc!pqr=apquxz.ixr.zzz.ac.uk
389     1: abc
390     2: pqr
391     *** Failers
392     No match
393     !pqr=apquxz.ixr.zzz.ac.uk
394     No match
395     abc!=apquxz.ixr.zzz.ac.uk
396     No match
397     abc!pqr=apquxz:ixr.zzz.ac.uk
398     No match
399     abc!pqr=apquxz.ixr.zzz.ac.ukk
400     No match
401    
402     /:/
403     Well, we need a colon: somewhere
404     0: :
405     *** Fail if we don't
406     No match
407    
408     /([\da-f:]+)$/i
409     0abc
410     0: 0abc
411     1: 0abc
412     abc
413     0: abc
414     1: abc
415     fed
416     0: fed
417     1: fed
418     E
419     0: E
420     1: E
421     ::
422     0: ::
423     1: ::
424     5f03:12C0::932e
425     0: 5f03:12C0::932e
426     1: 5f03:12C0::932e
427     fed def
428     0: def
429     1: def
430     Any old stuff
431     0: ff
432     1: ff
433     *** Failers
434     No match
435     0zzz
436     No match
437     gzzz
438     No match
439     fed\x20
440     No match
441     Any old rubbish
442     No match
443    
444     /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
445     .1.2.3
446     0: .1.2.3
447     1: 1
448     2: 2
449     3: 3
450     A.12.123.0
451     0: A.12.123.0
452     1: 12
453     2: 123
454     3: 0
455     *** Failers
456     No match
457     .1.2.3333
458     No match
459     1.2.3
460     No match
461     1234.2.3
462     No match
463    
464     /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
465     1 IN SOA non-sp1 non-sp2(
466     0: 1 IN SOA non-sp1 non-sp2(
467     1: 1
468     2: non-sp1
469     3: non-sp2
470     1 IN SOA non-sp1 non-sp2 (
471     0: 1 IN SOA non-sp1 non-sp2 (
472     1: 1
473     2: non-sp1
474     3: non-sp2
475     *** Failers
476     No match
477     1IN SOA non-sp1 non-sp2(
478     No match
479    
480     /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
481     a.
482     0: a.
483     Z.
484     0: Z.
485     2.
486     0: 2.
487     ab-c.pq-r.
488     0: ab-c.pq-r.
489     1: .pq-r
490     sxk.zzz.ac.uk.
491     0: sxk.zzz.ac.uk.
492     1: .uk
493     x-.y-.
494     0: x-.y-.
495     1: .y-
496     *** Failers
497     No match
498     -abc.peq.
499     No match
500    
501     /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
502     *.a
503     0: *.a
504     *.b0-a
505     0: *.b0-a
506     1: 0-a
507     *.c3-b.c
508     0: *.c3-b.c
509     1: 3-b
510     2: .c
511     *.c-a.b-c
512     0: *.c-a.b-c
513     1: -a
514     2: .b-c
515     3: -c
516     *** Failers
517     No match
518     *.0
519     No match
520     *.a-
521     No match
522     *.a-b.c-
523     No match
524     *.c-a.0-c
525     No match
526    
527     /^(?=ab(de))(abd)(e)/
528     abde
529     0: abde
530     1: de
531     2: abd
532     3: e
533    
534     /^(?!(ab)de|x)(abd)(f)/
535     abdf
536     0: abdf
537     1: <unset>
538     2: abd
539     3: f
540    
541     /^(?=(ab(cd)))(ab)/
542     abcd
543     0: ab
544     1: abcd
545     2: cd
546     3: ab
547    
548     /^[\da-f](\.[\da-f])*$/i
549     a.b.c.d
550     0: a.b.c.d
551     1: .d
552     A.B.C.D
553     0: A.B.C.D
554     1: .D
555     a.b.c.1.2.3.C
556     0: a.b.c.1.2.3.C
557     1: .C
558    
559     /^\".*\"\s*(;.*)?$/
560     \"1234\"
561     0: "1234"
562     \"abcd\" ;
563     0: "abcd" ;
564     1: ;
565     \"\" ; rhubarb
566     0: "" ; rhubarb
567     1: ; rhubarb
568     *** Failers
569     No match
570     \"1234\" : things
571     No match
572    
573     /^$/
574     \
575     0:
576     *** Failers
577     No match
578    
579     / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
580     ab c
581     0: ab c
582     *** Failers
583     No match
584     abc
585     No match
586     ab cde
587     No match
588    
589     /(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
590     ab c
591     0: ab c
592     *** Failers
593     No match
594     abc
595     No match
596     ab cde
597     No match
598    
599     /^ a\ b[c ]d $/x
600     a bcd
601     0: a bcd
602     a b d
603     0: a b d
604     *** Failers
605     No match
606     abcd
607     No match
608     ab d
609     No match
610    
611     /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
612     abcdefhijklm
613     0: abcdefhijklm
614     1: abc
615     2: bc
616     3: c
617     4: def
618     5: ef
619     6: f
620     7: hij
621     8: ij
622     9: j
623     10: klm
624     11: lm
625     12: m
626    
627     /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
628     abcdefhijklm
629     0: abcdefhijklm
630     1: bc
631     2: c
632     3: ef
633     4: f
634     5: ij
635     6: j
636     7: lm
637     8: m
638    
639     /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
640     a+ Z0+\x08\n\x1d\x12
641     0: a+ Z0+\x08\x0a\x1d\x12
642    
643     /^[.^$|()*+?{,}]+/
644     .^\$(*+)|{?,?}
645     0: .^$(*+)|{?,?}
646    
647     /^a*\w/
648     z
649     0: z
650     az
651     0: az
652     aaaz
653     0: aaaz
654     a
655     0: a
656     aa
657     0: aa
658     aaaa
659     0: aaaa
660     a+
661     0: a
662     aa+
663     0: aa
664    
665     /^a*?\w/
666     z
667     0: z
668     az
669     0: a
670     aaaz
671     0: a
672     a
673     0: a
674     aa
675     0: a
676     aaaa
677     0: a
678     a+
679     0: a
680     aa+
681     0: a
682    
683     /^a+\w/
684     az
685     0: az
686     aaaz
687     0: aaaz
688     aa
689     0: aa
690     aaaa
691     0: aaaa
692     aa+
693     0: aa
694    
695     /^a+?\w/
696     az
697     0: az
698     aaaz
699     0: aa
700     aa
701     0: aa
702     aaaa
703     0: aa
704     aa+
705     0: aa
706    
707     /^\d{8}\w{2,}/
708     1234567890
709     0: 1234567890
710     12345678ab
711     0: 12345678ab
712     12345678__
713     0: 12345678__
714     *** Failers
715     No match
716     1234567
717     No match
718    
719     /^[aeiou\d]{4,5}$/
720     uoie
721     0: uoie
722     1234
723     0: 1234
724     12345
725     0: 12345
726     aaaaa
727     0: aaaaa
728     *** Failers
729     No match
730     123456
731     No match
732    
733     /^[aeiou\d]{4,5}?/
734     uoie
735     0: uoie
736     1234
737     0: 1234
738     12345
739     0: 1234
740     aaaaa
741     0: aaaa
742     123456
743     0: 1234
744    
745     /\A(abc|def)=(\1){2,3}\Z/
746     abc=abcabc
747     0: abc=abcabc
748     1: abc
749     2: abc
750     def=defdefdef
751     0: def=defdefdef
752     1: def
753     2: def
754     *** Failers
755     No match
756     abc=defdef
757     No match
758    
759     /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
760     abcdefghijkcda2
761     0: abcdefghijkcda2
762     1: a
763     2: b
764     3: c
765     4: d
766     5: e
767     6: f
768     7: g
769     8: h
770     9: i
771     10: j
772     11: k
773     12: cd
774     abcdefghijkkkkcda2
775     0: abcdefghijkkkkcda2
776     1: a
777     2: b
778     3: c
779     4: d
780     5: e
781     6: f
782     7: g
783     8: h
784     9: i
785     10: j
786     11: k
787     12: cd
788    
789     /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
790     cataract cataract23
791     0: cataract cataract23
792     1: cataract
793     2: aract
794     3: ract
795     4:
796     5: 3
797     catatonic catatonic23
798     0: catatonic catatonic23
799     1: catatonic
800     2: atonic
801     3: tonic
802     4:
803     5: 3
804     caterpillar caterpillar23
805     0: caterpillar caterpillar23
806     1: caterpillar
807     2: erpillar
808     3: <unset>
809     4:
810     5: 3
811    
812    
813     /^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]/
814     From abcd Mon Sep 01 12:33:02 1997
815     0: From abcd Mon Sep 01 12:33
816     1: abcd
817    
818     /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
819     From abcd Mon Sep 01 12:33:02 1997
820     0: From abcd Mon Sep 01 12:33
821     1: Sep
822     From abcd Mon Sep 1 12:33:02 1997
823     0: From abcd Mon Sep 1 12:33
824     1: Sep
825     *** Failers
826     No match
827     From abcd Sep 01 12:33:02 1997
828     No match
829    
830     /^12.34/s
831     12\n34
832     0: 12\x0a34
833     12\r34
834     0: 12\x0d34
835    
836     /\w+(?=\t)/
837     the quick brown\t fox
838     0: brown
839    
840     /foo(?!bar)(.*)/
841     foobar is foolish see?
842     0: foolish see?
843     1: lish see?
844    
845     /(?:(?!foo)...|^.{0,2})bar(.*)/
846     foobar crowbar etc
847     0: rowbar etc
848     1: etc
849     barrel
850     0: barrel
851     1: rel
852     2barrel
853     0: 2barrel
854     1: rel
855     A barrel
856     0: A barrel
857     1: rel
858    
859     /^(\D*)(?=\d)(?!123)/
860     abc456
861     0: abc
862     1: abc
863     *** Failers
864     No match
865     abc123
866     No match
867    
868     /^1234(?# test newlines
869     inside)/
870     1234
871     0: 1234
872    
873     /^1234 #comment in extended re
874     /x
875     1234
876     0: 1234
877    
878     /#rhubarb
879     abcd/x
880     abcd
881     0: abcd
882    
883     /^abcd#rhubarb/x
884     abcd
885     0: abcd
886    
887     /^(a)\1{2,3}(.)/
888     aaab
889     0: aaab
890     1: a
891     2: b
892     aaaab
893     0: aaaab
894     1: a
895     2: b
896     aaaaab
897     0: aaaaa
898     1: a
899     2: a
900     aaaaaab
901     0: aaaaa
902     1: a
903     2: a
904    
905     /(?!^)abc/
906     the abc
907     0: abc
908     *** Failers
909     No match
910     abc
911     No match
912    
913     /(?=^)abc/
914     abc
915     0: abc
916     *** Failers
917     No match
918     the abc
919     No match
920    
921     /^[ab]{1,3}(ab*|b)/
922     aabbbbb
923     0: aabb
924     1: b
925    
926     /^[ab]{1,3}?(ab*|b)/
927     aabbbbb
928     0: aabbbbb
929     1: abbbbb
930    
931     /^[ab]{1,3}?(ab*?|b)/
932     aabbbbb
933     0: aa
934     1: a
935    
936     /^[ab]{1,3}(ab*?|b)/
937     aabbbbb
938     0: aabb
939     1: b
940    
941     / (?: [\040\t] | \(
942     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
943     \) )* # optional leading comment
944     (?: (?:
945     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
946     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
947     |
948     " (?: # opening quote...
949     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
950     | # or
951     \\ [^\x80-\xff] # Escaped something (something != CR)
952     )* " # closing quote
953     ) # initial word
954     (?: (?: [\040\t] | \(
955     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
956     \) )* \. (?: [\040\t] | \(
957     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
958     \) )* (?:
959     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
960     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
961     |
962     " (?: # opening quote...
963     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
964     | # or
965     \\ [^\x80-\xff] # Escaped something (something != CR)
966     )* " # closing quote
967     ) )* # further okay, if led by a period
968     (?: [\040\t] | \(
969     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
970     \) )* @ (?: [\040\t] | \(
971     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
972     \) )* (?:
973     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
974     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
975     | \[ # [
976     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
977     \] # ]
978     ) # initial subdomain
979     (?: #
980     (?: [\040\t] | \(
981     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
982     \) )* \. # if led by a period...
983     (?: [\040\t] | \(
984     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
985     \) )* (?:
986     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
987     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
988     | \[ # [
989     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
990     \] # ]
991     ) # ...further okay
992     )*
993     # address
994     | # or
995     (?:
996     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
997     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
998     |
999     " (?: # opening quote...
1000     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1001     | # or
1002     \\ [^\x80-\xff] # Escaped something (something != CR)
1003     )* " # closing quote
1004     ) # one word, optionally followed by....
1005     (?:
1006     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
1007     \(
1008     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1009     \) | # comments, or...
1010    
1011     " (?: # opening quote...
1012     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1013     | # or
1014     \\ [^\x80-\xff] # Escaped something (something != CR)
1015     )* " # closing quote
1016     # quoted strings
1017     )*
1018     < (?: [\040\t] | \(
1019     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1020     \) )* # leading <
1021     (?: @ (?: [\040\t] | \(
1022     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1023     \) )* (?:
1024     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1025     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1026     | \[ # [
1027     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1028     \] # ]
1029     ) # initial subdomain
1030     (?: #
1031     (?: [\040\t] | \(
1032     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1033     \) )* \. # if led by a period...
1034     (?: [\040\t] | \(
1035     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1036     \) )* (?:
1037     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1038     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1039     | \[ # [
1040     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1041     \] # ]
1042     ) # ...further okay
1043     )*
1044    
1045     (?: (?: [\040\t] | \(
1046     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1047     \) )* , (?: [\040\t] | \(
1048     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1049     \) )* @ (?: [\040\t] | \(
1050     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1051     \) )* (?:
1052     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1053     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1054     | \[ # [
1055     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1056     \] # ]
1057     ) # initial subdomain
1058     (?: #
1059     (?: [\040\t] | \(
1060     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1061     \) )* \. # if led by a period...
1062     (?: [\040\t] | \(
1063     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1064     \) )* (?:
1065     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1066     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1067     | \[ # [
1068     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1069     \] # ]
1070     ) # ...further okay
1071     )*
1072     )* # further okay, if led by comma
1073     : # closing colon
1074     (?: [\040\t] | \(
1075     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1076     \) )* )? # optional route
1077     (?:
1078     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1079     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1080     |
1081     " (?: # opening quote...
1082     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1083     | # or
1084     \\ [^\x80-\xff] # Escaped something (something != CR)
1085     )* " # closing quote
1086     ) # initial word
1087     (?: (?: [\040\t] | \(
1088     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1089     \) )* \. (?: [\040\t] | \(
1090     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1091     \) )* (?:
1092     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1093     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1094     |
1095     " (?: # opening quote...
1096     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1097     | # or
1098     \\ [^\x80-\xff] # Escaped something (something != CR)
1099     )* " # closing quote
1100     ) )* # further okay, if led by a period
1101     (?: [\040\t] | \(
1102     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1103     \) )* @ (?: [\040\t] | \(
1104     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1105     \) )* (?:
1106     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1107     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1108     | \[ # [
1109     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1110     \] # ]
1111     ) # initial subdomain
1112     (?: #
1113     (?: [\040\t] | \(
1114     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1115     \) )* \. # if led by a period...
1116     (?: [\040\t] | \(
1117     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1118     \) )* (?:
1119     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1120     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1121     | \[ # [
1122     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1123     \] # ]
1124     ) # ...further okay
1125     )*
1126     # address spec
1127     (?: [\040\t] | \(
1128     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1129     \) )* > # trailing >
1130     # name and address
1131     ) (?: [\040\t] | \(
1132     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1133     \) )* # optional trailing comment
1134     /x
1135     Alan Other <user\@dom.ain>
1136     0: Alan Other <user@dom.ain>
1137     <user\@dom.ain>
1138     0: user@dom.ain
1139     user\@dom.ain
1140     0: user@dom.ain
1141     \"A. Other\" <user.1234\@dom.ain> (a comment)
1142     0: "A. Other" <user.1234@dom.ain> (a comment)
1143     A. Other <user.1234\@dom.ain> (a comment)
1144     0: Other <user.1234@dom.ain> (a comment)
1145     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1146     0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
1147     A missing angle <user\@some.where
1148     0: user@some.where
1149     *** Failers
1150     No match
1151     The quick brown fox
1152     No match
1153    
1154     /[\040\t]* # Nab whitespace.
1155     (?:
1156     \( # (
1157     [^\\\x80-\xff\n\015()] * # normal*
1158     (?: # (
1159     (?: \\ [^\x80-\xff] |
1160     \( # (
1161     [^\\\x80-\xff\n\015()] * # normal*
1162     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1163     \) # )
1164     ) # special
1165     [^\\\x80-\xff\n\015()] * # normal*
1166     )* # )*
1167     \) # )
1168     [\040\t]* )* # If comment found, allow more spaces.
1169     # optional leading comment
1170     (?:
1171     (?:
1172     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1173     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1174     # Atom
1175     | # or
1176     " # "
1177     [^\\\x80-\xff\n\015"] * # normal
1178     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1179     " # "
1180     # Quoted string
1181     )
1182     [\040\t]* # Nab whitespace.
1183     (?:
1184     \( # (
1185     [^\\\x80-\xff\n\015()] * # normal*
1186     (?: # (
1187     (?: \\ [^\x80-\xff] |
1188     \( # (
1189     [^\\\x80-\xff\n\015()] * # normal*
1190     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1191     \) # )
1192     ) # special
1193     [^\\\x80-\xff\n\015()] * # normal*
1194     )* # )*
1195     \) # )
1196     [\040\t]* )* # If comment found, allow more spaces.
1197     (?:
1198     \.
1199     [\040\t]* # Nab whitespace.
1200     (?:
1201     \( # (
1202     [^\\\x80-\xff\n\015()] * # normal*
1203     (?: # (
1204     (?: \\ [^\x80-\xff] |
1205     \( # (
1206     [^\\\x80-\xff\n\015()] * # normal*
1207     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1208     \) # )
1209     ) # special
1210     [^\\\x80-\xff\n\015()] * # normal*
1211     )* # )*
1212     \) # )
1213     [\040\t]* )* # If comment found, allow more spaces.
1214     (?:
1215     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1216     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1217     # Atom
1218     | # or
1219     " # "
1220     [^\\\x80-\xff\n\015"] * # normal
1221     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1222     " # "
1223     # Quoted string
1224     )
1225     [\040\t]* # Nab whitespace.
1226     (?:
1227     \( # (
1228     [^\\\x80-\xff\n\015()] * # normal*
1229     (?: # (
1230     (?: \\ [^\x80-\xff] |
1231     \( # (
1232     [^\\\x80-\xff\n\015()] * # normal*
1233     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1234     \) # )
1235     ) # special
1236     [^\\\x80-\xff\n\015()] * # normal*
1237     )* # )*
1238     \) # )
1239     [\040\t]* )* # If comment found, allow more spaces.
1240     # additional words
1241     )*
1242     @
1243     [\040\t]* # Nab whitespace.
1244     (?:
1245     \( # (
1246     [^\\\x80-\xff\n\015()] * # normal*
1247     (?: # (
1248     (?: \\ [^\x80-\xff] |
1249     \( # (
1250     [^\\\x80-\xff\n\015()] * # normal*
1251     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1252     \) # )
1253     ) # special
1254     [^\\\x80-\xff\n\015()] * # normal*
1255     )* # )*
1256     \) # )
1257     [\040\t]* )* # If comment found, allow more spaces.
1258     (?:
1259     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1260     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1261     |
1262     \[ # [
1263     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1264     \] # ]
1265     )
1266     [\040\t]* # Nab whitespace.
1267     (?:
1268     \( # (
1269     [^\\\x80-\xff\n\015()] * # normal*
1270     (?: # (
1271     (?: \\ [^\x80-\xff] |
1272     \( # (
1273     [^\\\x80-\xff\n\015()] * # normal*
1274     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1275     \) # )
1276     ) # special
1277     [^\\\x80-\xff\n\015()] * # normal*
1278     )* # )*
1279     \) # )
1280     [\040\t]* )* # If comment found, allow more spaces.
1281     # optional trailing comments
1282     (?:
1283     \.
1284     [\040\t]* # Nab whitespace.
1285     (?:
1286     \( # (
1287     [^\\\x80-\xff\n\015()] * # normal*
1288     (?: # (
1289     (?: \\ [^\x80-\xff] |
1290     \( # (
1291     [^\\\x80-\xff\n\015()] * # normal*
1292     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1293     \) # )
1294     ) # special
1295     [^\\\x80-\xff\n\015()] * # normal*
1296     )* # )*
1297     \) # )
1298     [\040\t]* )* # If comment found, allow more spaces.
1299     (?:
1300     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1301     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1302     |
1303     \[ # [
1304     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1305     \] # ]
1306     )
1307     [\040\t]* # Nab whitespace.
1308     (?:
1309     \( # (
1310     [^\\\x80-\xff\n\015()] * # normal*
1311     (?: # (
1312     (?: \\ [^\x80-\xff] |
1313     \( # (
1314     [^\\\x80-\xff\n\015()] * # normal*
1315     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1316     \) # )
1317     ) # special
1318     [^\\\x80-\xff\n\015()] * # normal*
1319     )* # )*
1320     \) # )
1321     [\040\t]* )* # If comment found, allow more spaces.
1322     # optional trailing comments
1323     )*
1324     # address
1325     | # or
1326     (?:
1327     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1328     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1329     # Atom
1330     | # or
1331     " # "
1332     [^\\\x80-\xff\n\015"] * # normal
1333     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1334     " # "
1335     # Quoted string
1336     )
1337     # leading word
1338     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
1339     (?:
1340     (?:
1341     \( # (
1342     [^\\\x80-\xff\n\015()] * # normal*
1343     (?: # (
1344     (?: \\ [^\x80-\xff] |
1345     \( # (
1346     [^\\\x80-\xff\n\015()] * # normal*
1347     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1348     \) # )
1349     ) # special
1350     [^\\\x80-\xff\n\015()] * # normal*
1351     )* # )*
1352     \) # )
1353     |
1354     " # "
1355     [^\\\x80-\xff\n\015"] * # normal
1356     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1357     " # "
1358     ) # "special" comment or quoted string
1359     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
1360     )*
1361     <
1362     [\040\t]* # Nab whitespace.
1363     (?:
1364     \( # (
1365     [^\\\x80-\xff\n\015()] * # normal*
1366     (?: # (
1367     (?: \\ [^\x80-\xff] |
1368     \( # (
1369     [^\\\x80-\xff\n\015()] * # normal*
1370     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1371     \) # )
1372     ) # special
1373     [^\\\x80-\xff\n\015()] * # normal*
1374     )* # )*
1375     \) # )
1376     [\040\t]* )* # If comment found, allow more spaces.
1377     # <
1378     (?:
1379     @
1380     [\040\t]* # Nab whitespace.
1381     (?:
1382     \( # (
1383     [^\\\x80-\xff\n\015()] * # normal*
1384     (?: # (
1385     (?: \\ [^\x80-\xff] |
1386     \( # (
1387     [^\\\x80-\xff\n\015()] * # normal*
1388     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1389     \) # )
1390     ) # special
1391     [^\\\x80-\xff\n\015()] * # normal*
1392     )* # )*
1393     \) # )
1394     [\040\t]* )* # If comment found, allow more spaces.
1395     (?:
1396     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1397     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1398     |
1399     \[ # [
1400     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1401     \] # ]
1402     )
1403     [\040\t]* # Nab whitespace.
1404     (?:
1405     \( # (
1406     [^\\\x80-\xff\n\015()] * # normal*
1407     (?: # (
1408     (?: \\ [^\x80-\xff] |
1409     \( # (
1410     [^\\\x80-\xff\n\015()] * # normal*
1411     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1412     \) # )
1413     ) # special
1414     [^\\\x80-\xff\n\015()] * # normal*
1415     )* # )*
1416     \) # )
1417     [\040\t]* )* # If comment found, allow more spaces.
1418     # optional trailing comments
1419     (?:
1420     \.
1421     [\040\t]* # Nab whitespace.
1422     (?:
1423     \( # (
1424     [^\\\x80-\xff\n\015()] * # normal*
1425     (?: # (
1426     (?: \\ [^\x80-\xff] |
1427     \( # (
1428     [^\\\x80-\xff\n\015()] * # normal*
1429     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1430     \) # )
1431     ) # special
1432     [^\\\x80-\xff\n\015()] * # normal*
1433     )* # )*
1434     \) # )
1435     [\040\t]* )* # If comment found, allow more spaces.
1436     (?:
1437     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1438     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1439     |
1440     \[ # [
1441     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1442     \] # ]
1443     )
1444     [\040\t]* # Nab whitespace.
1445     (?:
1446     \( # (
1447     [^\\\x80-\xff\n\015()] * # normal*
1448     (?: # (
1449     (?: \\ [^\x80-\xff] |
1450     \( # (
1451     [^\\\x80-\xff\n\015()] * # normal*
1452     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1453     \) # )
1454     ) # special
1455     [^\\\x80-\xff\n\015()] * # normal*
1456     )* # )*
1457     \) # )
1458     [\040\t]* )* # If comment found, allow more spaces.
1459     # optional trailing comments
1460     )*
1461     (?: ,
1462     [\040\t]* # Nab whitespace.
1463     (?:
1464     \( # (
1465     [^\\\x80-\xff\n\015()] * # normal*
1466     (?: # (
1467     (?: \\ [^\x80-\xff] |
1468     \( # (
1469     [^\\\x80-\xff\n\015()] * # normal*
1470     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1471     \) # )
1472     ) # special
1473     [^\\\x80-\xff\n\015()] * # normal*
1474     )* # )*
1475     \) # )
1476     [\040\t]* )* # If comment found, allow more spaces.
1477     @
1478     [\040\t]* # Nab whitespace.
1479     (?:
1480     \( # (
1481     [^\\\x80-\xff\n\015()] * # normal*
1482     (?: # (
1483     (?: \\ [^\x80-\xff] |
1484     \( # (
1485     [^\\\x80-\xff\n\015()] * # normal*
1486     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1487     \) # )
1488     ) # special
1489     [^\\\x80-\xff\n\015()] * # normal*
1490     )* # )*
1491     \) # )
1492     [\040\t]* )* # If comment found, allow more spaces.
1493     (?:
1494     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1495     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1496     |
1497     \[ # [
1498     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1499     \] # ]
1500     )
1501     [\040\t]* # Nab whitespace.
1502     (?:
1503     \( # (
1504     [^\\\x80-\xff\n\015()] * # normal*
1505     (?: # (
1506     (?: \\ [^\x80-\xff] |
1507     \( # (
1508     [^\\\x80-\xff\n\015()] * # normal*
1509     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1510     \) # )
1511     ) # special
1512     [^\\\x80-\xff\n\015()] * # normal*
1513     )* # )*
1514     \) # )
1515     [\040\t]* )* # If comment found, allow more spaces.
1516     # optional trailing comments
1517     (?:
1518     \.
1519     [\040\t]* # Nab whitespace.
1520     (?:
1521     \( # (
1522     [^\\\x80-\xff\n\015()] * # normal*
1523     (?: # (
1524     (?: \\ [^\x80-\xff] |
1525     \( # (
1526     [^\\\x80-\xff\n\015()] * # normal*
1527     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1528     \) # )
1529     ) # special
1530     [^\\\x80-\xff\n\015()] * # normal*
1531     )* # )*
1532     \) # )
1533     [\040\t]* )* # If comment found, allow more spaces.
1534     (?:
1535     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1536     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1537     |
1538     \[ # [
1539     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1540     \] # ]
1541     )
1542     [\040\t]* # Nab whitespace.
1543     (?:
1544     \( # (
1545     [^\\\x80-\xff\n\015()] * # normal*
1546     (?: # (
1547     (?: \\ [^\x80-\xff] |
1548     \( # (
1549     [^\\\x80-\xff\n\015()] * # normal*
1550     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1551     \) # )
1552     ) # special
1553     [^\\\x80-\xff\n\015()] * # normal*
1554     )* # )*
1555     \) # )
1556     [\040\t]* )* # If comment found, allow more spaces.
1557     # optional trailing comments
1558     )*
1559     )* # additional domains
1560     :
1561     [\040\t]* # Nab whitespace.
1562     (?:
1563     \( # (
1564     [^\\\x80-\xff\n\015()] * # normal*
1565     (?: # (
1566     (?: \\ [^\x80-\xff] |
1567     \( # (
1568     [^\\\x80-\xff\n\015()] * # normal*
1569     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1570     \) # )
1571     ) # special
1572     [^\\\x80-\xff\n\015()] * # normal*
1573     )* # )*
1574     \) # )
1575     [\040\t]* )* # If comment found, allow more spaces.
1576     # optional trailing comments
1577     )? # optional route
1578     (?:
1579     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1580     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1581     # Atom
1582     | # or
1583     " # "
1584     [^\\\x80-\xff\n\015"] * # normal
1585     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1586     " # "
1587     # Quoted string
1588     )
1589     [\040\t]* # Nab whitespace.
1590     (?:
1591     \( # (
1592     [^\\\x80-\xff\n\015()] * # normal*
1593     (?: # (
1594     (?: \\ [^\x80-\xff] |
1595     \( # (
1596     [^\\\x80-\xff\n\015()] * # normal*
1597     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1598     \) # )
1599     ) # special
1600     [^\\\x80-\xff\n\015()] * # normal*
1601     )* # )*
1602     \) # )
1603     [\040\t]* )* # If comment found, allow more spaces.
1604     (?:
1605     \.
1606     [\040\t]* # Nab whitespace.
1607     (?:
1608     \( # (
1609     [^\\\x80-\xff\n\015()] * # normal*
1610     (?: # (
1611     (?: \\ [^\x80-\xff] |
1612     \( # (
1613     [^\\\x80-\xff\n\015()] * # normal*
1614     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1615     \) # )
1616     ) # special
1617     [^\\\x80-\xff\n\015()] * # normal*
1618     )* # )*
1619     \) # )
1620     [\040\t]* )* # If comment found, allow more spaces.
1621     (?:
1622     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1623     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1624     # Atom
1625     | # or
1626     " # "
1627     [^\\\x80-\xff\n\015"] * # normal
1628     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1629     " # "
1630     # Quoted string
1631     )
1632     [\040\t]* # Nab whitespace.
1633     (?:
1634     \( # (
1635     [^\\\x80-\xff\n\015()] * # normal*
1636     (?: # (
1637     (?: \\ [^\x80-\xff] |
1638     \( # (
1639     [^\\\x80-\xff\n\015()] * # normal*
1640     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1641     \) # )
1642     ) # special
1643     [^\\\x80-\xff\n\015()] * # normal*
1644     )* # )*
1645     \) # )
1646     [\040\t]* )* # If comment found, allow more spaces.
1647     # additional words
1648     )*
1649     @
1650     [\040\t]* # Nab whitespace.
1651     (?:
1652     \( # (
1653     [^\\\x80-\xff\n\015()] * # normal*
1654     (?: # (
1655     (?: \\ [^\x80-\xff] |
1656     \( # (
1657     [^\\\x80-\xff\n\015()] * # normal*
1658     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1659     \) # )
1660     ) # special
1661     [^\\\x80-\xff\n\015()] * # normal*
1662     )* # )*
1663     \) # )
1664     [\040\t]* )* # If comment found, allow more spaces.
1665     (?:
1666     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1667     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1668     |
1669     \[ # [
1670     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1671     \] # ]
1672     )
1673     [\040\t]* # Nab whitespace.
1674     (?:
1675     \( # (
1676     [^\\\x80-\xff\n\015()] * # normal*
1677     (?: # (
1678     (?: \\ [^\x80-\xff] |
1679     \( # (
1680     [^\\\x80-\xff\n\015()] * # normal*
1681     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1682     \) # )
1683     ) # special
1684     [^\\\x80-\xff\n\015()] * # normal*
1685     )* # )*
1686     \) # )
1687     [\040\t]* )* # If comment found, allow more spaces.
1688     # optional trailing comments
1689     (?:
1690     \.
1691     [\040\t]* # Nab whitespace.
1692     (?:
1693     \( # (
1694     [^\\\x80-\xff\n\015()] * # normal*
1695     (?: # (
1696     (?: \\ [^\x80-\xff] |
1697     \( # (
1698     [^\\\x80-\xff\n\015()] * # normal*
1699     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1700     \) # )
1701     ) # special
1702     [^\\\x80-\xff\n\015()] * # normal*
1703     )* # )*
1704     \) # )
1705     [\040\t]* )* # If comment found, allow more spaces.
1706     (?:
1707     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1708     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1709     |
1710     \[ # [
1711     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1712     \] # ]
1713     )
1714     [\040\t]* # Nab whitespace.
1715     (?:
1716     \( # (
1717     [^\\\x80-\xff\n\015()] * # normal*
1718     (?: # (
1719     (?: \\ [^\x80-\xff] |
1720     \( # (
1721     [^\\\x80-\xff\n\015()] * # normal*
1722     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1723     \) # )
1724     ) # special
1725     [^\\\x80-\xff\n\015()] * # normal*
1726     )* # )*
1727     \) # )
1728     [\040\t]* )* # If comment found, allow more spaces.
1729     # optional trailing comments
1730     )*
1731     # address spec
1732     > # >
1733     # name and address
1734     )
1735     /x
1736     Alan Other <user\@dom.ain>
1737     0: Alan Other <user@dom.ain>
1738     <user\@dom.ain>
1739     0: user@dom.ain
1740     user\@dom.ain
1741     0: user@dom.ain
1742     \"A. Other\" <user.1234\@dom.ain> (a comment)
1743     0: "A. Other" <user.1234@dom.ain>
1744     A. Other <user.1234\@dom.ain> (a comment)
1745     0: Other <user.1234@dom.ain>
1746     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1747     0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
1748     A missing angle <user\@some.where
1749     0: user@some.where
1750     *** Failers
1751     No match
1752     The quick brown fox
1753     No match
1754    
1755     /abc\0def\00pqr\000xyz\0000AB/
1756     abc\0def\00pqr\000xyz\0000AB
1757     0: abc\x00def\x00pqr\x00xyz\x000AB
1758     abc456 abc\0def\00pqr\000xyz\0000ABCDE
1759     0: abc\x00def\x00pqr\x00xyz\x000AB
1760    
1761     /abc\x0def\x00pqr\x000xyz\x0000AB/
1762     abc\x0def\x00pqr\x000xyz\x0000AB
1763     0: abc\x0def\x00pqr\x000xyz\x0000AB
1764     abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
1765     0: abc\x0def\x00pqr\x000xyz\x0000AB
1766    
1767     /^[\000-\037]/
1768     \0A
1769     0: \x00
1770     \01B
1771     0: \x01
1772     \037C
1773     0: \x1f
1774    
1775     /\0*/
1776     \0\0\0\0
1777     0: \x00\x00\x00\x00
1778    
1779     /A\x0{2,3}Z/
1780     The A\x0\x0Z
1781     0: A\x00\x00Z
1782     An A\0\x0\0Z
1783     0: A\x00\x00\x00Z
1784     *** Failers
1785     No match
1786     A\0Z
1787     No match
1788     A\0\x0\0\x0Z
1789     No match
1790    
1791     /^(cow|)\1(bell)/
1792     cowcowbell
1793     0: cowcowbell
1794     1: cow
1795     2: bell
1796     bell
1797     0: bell
1798     1:
1799     2: bell
1800     *** Failers
1801     No match
1802     cowbell
1803     No match
1804    
1805     /^\s/
1806     \040abc
1807     0:
1808     \x0cabc
1809     0: \x0c
1810     \nabc
1811     0: \x0a
1812     \rabc
1813     0: \x0d
1814     \tabc
1815     0: \x09
1816     *** Failers
1817     No match
1818     abc
1819     No match
1820    
1821     /^a b
1822    
1823     c/x
1824     abc
1825     0: abc
1826    
1827     /^(a|)\1*b/
1828     ab
1829     0: ab
1830     1: a
1831     aaaab
1832     0: aaaab
1833     1: a
1834     b
1835     0: b
1836     1:
1837     *** Failers
1838     No match
1839     acb
1840     No match
1841    
1842     /^(a|)\1+b/
1843     aab
1844     0: aab
1845     1: a
1846     aaaab
1847     0: aaaab
1848     1: a
1849     b
1850     0: b
1851     1:
1852     *** Failers
1853     No match
1854     ab
1855     No match
1856    
1857     /^(a|)\1?b/
1858     ab
1859     0: ab
1860     1: a
1861     aab
1862     0: aab
1863     1: a
1864     b
1865     0: b
1866     1:
1867     *** Failers
1868     No match
1869     acb
1870     No match
1871    
1872     /^(a|)\1{2}b/
1873     aaab
1874     0: aaab
1875     1: a
1876     b
1877     0: b
1878     1:
1879     *** Failers
1880     No match
1881     ab
1882     No match
1883     aab
1884     No match
1885     aaaab
1886     No match
1887    
1888     /^(a|)\1{2,3}b/
1889     aaab
1890     0: aaab
1891     1: a
1892     aaaab
1893     0: aaaab
1894     1: a
1895     b
1896     0: b
1897     1:
1898     *** Failers
1899     No match
1900     ab
1901     No match
1902     aab
1903     No match
1904     aaaaab
1905     No match
1906    
1907     /ab{1,3}bc/
1908     abbbbc
1909     0: abbbbc
1910     abbbc
1911     0: abbbc
1912     abbc
1913     0: abbc
1914     *** Failers
1915     No match
1916     abc
1917     No match
1918     abbbbbc
1919     No match
1920    
1921     /([^.]*)\.([^:]*):[T ]+(.*)/
1922     track1.title:TBlah blah blah
1923     0: track1.title:TBlah blah blah
1924     1: track1
1925     2: title
1926     3: Blah blah blah
1927    
1928     /([^.]*)\.([^:]*):[T ]+(.*)/i
1929     track1.title:TBlah blah blah
1930     0: track1.title:TBlah blah blah
1931     1: track1
1932     2: title
1933     3: Blah blah blah
1934    
1935     /([^.]*)\.([^:]*):[t ]+(.*)/i
1936     track1.title:TBlah blah blah
1937     0: track1.title:TBlah blah blah
1938     1: track1
1939     2: title
1940     3: Blah blah blah
1941    
1942     /^[W-c]+$/
1943     WXY_^abc
1944     0: WXY_^abc
1945     ***Failers
1946     No match
1947     wxy
1948     No match
1949    
1950     /^[W-c]+$/i
1951     WXY_^abc
1952     0: WXY_^abc
1953     wxy_^ABC
1954     0: wxy_^ABC
1955    
1956     /^[\x3f-\x5F]+$/i
1957     WXY_^abc
1958     0: WXY_^abc
1959     wxy_^ABC
1960     0: wxy_^ABC
1961    
1962     /^abc$/m
1963     abc
1964     0: abc
1965     qqq\nabc
1966     0: abc
1967     abc\nzzz
1968     0: abc
1969     qqq\nabc\nzzz
1970     0: abc
1971    
1972     /^abc$/
1973     abc
1974     0: abc
1975     *** Failers
1976     No match
1977     qqq\nabc
1978     No match
1979     abc\nzzz
1980     No match
1981     qqq\nabc\nzzz
1982     No match
1983    
1984     /\Aabc\Z/m
1985     abc
1986     0: abc
1987     abc\n
1988     0: abc
1989     *** Failers
1990     No match
1991     qqq\nabc
1992     No match
1993     abc\nzzz
1994     No match
1995     qqq\nabc\nzzz
1996     No match
1997    
1998     /\A(.)*\Z/s
1999     abc\ndef
2000     0: abc\x0adef
2001     1: f
2002    
2003     /\A(.)*\Z/m
2004     *** Failers
2005     0: *** Failers
2006     1: s
2007     abc\ndef
2008     No match
2009    
2010     /(?:b)|(?::+)/
2011     b::c
2012     0: b
2013     c::b
2014     0: ::
2015    
2016     /[-az]+/
2017     az-
2018     0: az-
2019     *** Failers
2020     0: a
2021     b
2022     No match
2023    
2024     /[az-]+/
2025     za-
2026     0: za-
2027     *** Failers
2028     0: a
2029     b
2030     No match
2031    
2032     /[a\-z]+/
2033     a-z
2034     0: a-z
2035     *** Failers
2036     0: a
2037     b
2038     No match
2039    
2040     /[a-z]+/
2041     abcdxyz
2042     0: abcdxyz
2043    
2044     /[\d-]+/
2045     12-34
2046     0: 12-34
2047     *** Failers
2048     No match
2049     aaa
2050     No match
2051    
2052     /[\d-z]+/
2053     12-34z
2054     0: 12-34z
2055     *** Failers
2056     No match
2057     aaa
2058     No match
2059    
2060     /\x5c/
2061     \\
2062     0: \
2063    
2064     /\x20Z/
2065     the Zoo
2066     0: Z
2067     *** Failers
2068     No match
2069     Zulu
2070     No match
2071    
2072     /(abc)\1/i
2073     abcabc
2074     0: abcabc
2075     1: abc
2076     ABCabc
2077     0: ABCabc
2078     1: ABC
2079     abcABC
2080     0: abcABC
2081     1: abc
2082    
2083     /(main(O)?)+/
2084     mainmain
2085     0: mainmain
2086     1: main
2087     mainOmain
2088     0: mainOmain
2089     1: main
2090     2: O
2091    
2092     /ab{3cd/
2093     ab{3cd
2094     0: ab{3cd
2095    
2096     /ab{3,cd/
2097     ab{3,cd
2098     0: ab{3,cd
2099    
2100     /ab{3,4a}cd/
2101     ab{3,4a}cd
2102     0: ab{3,4a}cd
2103    
2104     /{4,5a}bc/
2105     {4,5a}bc
2106     0: {4,5a}bc
2107    
2108     /^a.b/
2109     a\rb
2110     0: a\x0db
2111     *** Failers
2112     No match
2113     a\nb
2114     No match
2115    
2116     /abc$/
2117     abc
2118     0: abc
2119     abc\n
2120     0: abc
2121     *** Failers
2122     No match
2123     abc\ndef
2124     No match
2125    
2126     /(abc)\123/
2127     abc\x53
2128     0: abcS
2129     1: abc
2130    
2131     /(abc)\223/
2132     abc\x93
2133     0: abc\x93
2134     1: abc
2135    
2136     /(abc)\323/
2137     abc\xd3
2138     0: abc\xd3
2139     1: abc
2140    
2141     /(abc)\500/
2142     abc\x40
2143     0: abc@
2144     1: abc
2145     abc\100
2146     0: abc@
2147     1: abc
2148    
2149     /(abc)\5000/
2150     abc\x400
2151     0: abc@0
2152     1: abc
2153     abc\x40\x30
2154     0: abc@0
2155     1: abc
2156     abc\1000
2157     0: abc@0
2158     1: abc
2159     abc\100\x30
2160     0: abc@0
2161     1: abc
2162     abc\100\060
2163     0: abc@0
2164     1: abc
2165     abc\100\60
2166     0: abc@0
2167     1: abc
2168    
2169     /abc\81/
2170     abc\081
2171     0: abc\x0081
2172     abc\0\x38\x31
2173     0: abc\x0081
2174    
2175     /abc\91/
2176     abc\091
2177     0: abc\x0091
2178     abc\0\x39\x31
2179     0: abc\x0091
2180    
2181     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
2182     abcdefghijkllS
2183     0: abcdefghijkllS
2184     1: a
2185     2: b
2186     3: c
2187     4: d
2188     5: e
2189     6: f
2190     7: g
2191     8: h
2192     9: i
2193     10: j
2194     11: k
2195     12: l
2196    
2197     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
2198     abcdefghijk\12S
2199     0: abcdefghijk\x0aS
2200     1: a
2201     2: b
2202     3: c
2203     4: d
2204     5: e
2205     6: f
2206     7: g
2207     8: h
2208     9: i
2209     10: j
2210     11: k
2211    
2212     /ab\gdef/
2213     abgdef
2214     0: abgdef
2215    
2216     /a{0}bc/
2217     bc
2218     0: bc
2219    
2220     /(a|(bc)){0,0}?xyz/
2221     xyz
2222     0: xyz
2223    
2224     /abc[\10]de/
2225     abc\010de
2226     0: abc\x08de
2227    
2228     /abc[\1]de/
2229     abc\1de
2230     0: abc\x01de
2231    
2232     /(abc)[\1]de/
2233     abc\1de
2234     0: abc\x01de
2235     1: abc
2236    
2237     /a.b(?s)/
2238     a\nb
2239     0: a\x0ab
2240    
2241     /^([^a])([^\b])([^c]*)([^d]{3,4})/
2242     baNOTccccd
2243     0: baNOTcccc
2244     1: b
2245     2: a
2246     3: NOT
2247     4: cccc
2248     baNOTcccd
2249     0: baNOTccc
2250     1: b
2251     2: a
2252     3: NOT
2253     4: ccc
2254     baNOTccd
2255     0: baNOTcc
2256     1: b
2257     2: a
2258     3: NO
2259     4: Tcc
2260     bacccd
2261     0: baccc
2262     1: b
2263     2: a
2264     3:
2265     4: ccc
2266     *** Failers
2267     0: *** Failers
2268     1: *
2269     2: *
2270     3: * Fail
2271     4: ers
2272     anything
2273     No match
2274     b\bc
2275     No match
2276     baccd
2277     No match
2278    
2279     /[^a]/
2280     Abc
2281     0: A
2282    
2283     /[^a]/i
2284     Abc
2285     0: b
2286    
2287     /[^a]+/
2288     AAAaAbc
2289     0: AAA
2290    
2291     /[^a]+/i
2292     AAAaAbc
2293     0: bc
2294    
2295     /[^a]+/
2296     bbb\nccc
2297     0: bbb\x0accc
2298    
2299     /[^k]$/
2300     abc
2301     0: c
2302     *** Failers
2303     0: s
2304     abk
2305     No match
2306    
2307     /[^k]{2,3}$/
2308     abc
2309     0: abc
2310     kbc
2311     0: bc
2312     kabc
2313     0: abc
2314     *** Failers
2315     0: ers
2316     abk
2317     No match
2318     akb
2319     No match
2320     akk
2321     No match
2322    
2323     /^\d{8,}\@.+[^k]$/
2324     12345678\@a.b.c.d
2325     0: 12345678@a.b.c.d
2326     123456789\@x.y.z
2327     0: 123456789@x.y.z
2328     *** Failers
2329     No match
2330     12345678\@x.y.uk
2331     No match
2332     1234567\@a.b.c.d
2333     No match
2334    
2335     /(a)\1{8,}/
2336     aaaaaaaaa
2337     0: aaaaaaaaa
2338     1: a
2339     aaaaaaaaaa
2340     0: aaaaaaaaaa
2341     1: a
2342     *** Failers
2343     No match
2344     aaaaaaa
2345     No match
2346    
2347     /[^a]/
2348     aaaabcd
2349     0: b
2350     aaAabcd
2351     0: A
2352    
2353     /[^a]/i
2354     aaaabcd
2355     0: b
2356     aaAabcd
2357     0: b
2358    
2359     /[^az]/
2360     aaaabcd
2361     0: b
2362     aaAabcd
2363     0: A
2364    
2365     /[^az]/i
2366     aaaabcd
2367     0: b
2368     aaAabcd
2369     0: b
2370    
2371     /\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/
2372     \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
2373     0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
2374    
2375     /P[^*]TAIRE[^*]{1,6}?LL/
2376     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
2377     0: PSTAIREISLL
2378    
2379     /P[^*]TAIRE[^*]{1,}?LL/
2380     xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
2381     0: PSTAIREISLL
2382    
2383     /(\.\d\d[1-9]?)\d+/
2384     1.230003938
2385     0: .230003938
2386     1: .23
2387     1.875000282
2388     0: .875000282
2389     1: .875
2390     1.235
2391     0: .235
2392     1: .23
2393    
2394     /(\.\d\d((?=0)|\d(?=\d)))/
2395     1.230003938
2396     0: .23
2397     1: .23
2398     2:
2399     1.875000282
2400     0: .875
2401     1: .875
2402     2: 5
2403     *** Failers
2404     No match
2405     1.235
2406     No match
2407    
2408     /a(?)b/
2409     ab
2410     0: ab
2411    
2412     /\b(foo)\s+(\w+)/i
2413     Food is on the foo table
2414     0: foo table
2415     1: foo
2416     2: table
2417    
2418     /foo(.*)bar/
2419     The food is under the bar in the barn.
2420     0: food is under the bar in the bar
2421     1: d is under the bar in the
2422    
2423     /foo(.*?)bar/
2424     The food is under the bar in the barn.
2425     0: food is under the bar
2426     1: d is under the
2427    
2428     /(.*)(\d*)/
2429     I have 2 numbers: 53147
2430     0: I have 2 numbers: 53147
2431     1: I have 2 numbers: 53147
2432     2:
2433    
2434     /(.*)(\d+)/
2435     I have 2 numbers: 53147
2436     0: I have 2 numbers: 53147
2437     1: I have 2 numbers: 5314
2438     2: 7
2439    
2440     /(.*?)(\d*)/
2441     I have 2 numbers: 53147
2442     0:
2443     1:
2444     2:
2445    
2446     /(.*?)(\d+)/
2447     I have 2 numbers: 53147
2448     0: I have 2
2449     1: I have
2450     2: 2
2451    
2452     /(.*)(\d+)$/
2453     I have 2 numbers: 53147
2454     0: I have 2 numbers: 53147
2455     1: I have 2 numbers: 5314
2456     2: 7
2457    
2458     /(.*?)(\d+)$/
2459     I have 2 numbers: 53147
2460     0: I have 2 numbers: 53147
2461     1: I have 2 numbers:
2462     2: 53147
2463    
2464     /(.*)\b(\d+)$/
2465     I have 2 numbers: 53147
2466     0: I have 2 numbers: 53147
2467     1: I have 2 numbers:
2468     2: 53147
2469    
2470     /(.*\D)(\d+)$/
2471     I have 2 numbers: 53147
2472     0: I have 2 numbers: 53147
2473     1: I have 2 numbers:
2474     2: 53147
2475    
2476     /^\D*(?!123)/
2477     ABC123
2478     0: AB
2479    
2480     /^(\D*)(?=\d)(?!123)/
2481     ABC445
2482     0: ABC
2483     1: ABC
2484     *** Failers
2485     No match
2486     ABC123
2487     No match
2488    
2489     /^[W-]46]/
2490     W46]789
2491     0: W46]
2492     -46]789
2493     0: -46]
2494     *** Failers
2495     No match
2496     Wall
2497     No match
2498     Zebra
2499     No match
2500     42
2501     No match
2502     [abcd]
2503     No match
2504     ]abcd[
2505     No match
2506    
2507     /^[W-\]46]/
2508     W46]789
2509     0: W
2510     Wall
2511     0: W
2512     Zebra
2513     0: Z
2514     Xylophone
2515     0: X
2516     42
2517     0: 4
2518     [abcd]
2519     0: [
2520     ]abcd[
2521     0: ]
2522     \\backslash
2523     0: \
2524     *** Failers
2525     No match
2526     -46]789
2527     No match
2528     well
2529     No match
2530    
2531     /\d\d\/\d\d\/\d\d\d\d/
2532     01/01/2000
2533     0: 01/01/2000
2534    
2535     /word (?:[a-zA-Z0-9]+ ){0,10}otherword/
2536     word cat dog elephant mussel cow horse canary baboon snake shark otherword
2537     0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
2538     word cat dog elephant mussel cow horse canary baboon snake shark
2539     No match
2540    
2541     /word (?:[a-zA-Z0-9]+ ){0,300}otherword/
2542     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
2543     No match
2544    
2545     /^(a){0,0}/
2546     bcd
2547     0:
2548     abc
2549     0:
2550     aab
2551     0:
2552    
2553     /^(a){0,1}/
2554     bcd
2555     0:
2556     abc
2557     0: a
2558     1: a
2559     aab
2560     0: a
2561     1: a
2562    
2563     /^(a){0,2}/
2564     bcd
2565     0:
2566     abc
2567     0: a
2568     1: a
2569     aab
2570     0: aa
2571     1: a
2572    
2573     /^(a){0,3}/
2574     bcd
2575     0:
2576     abc
2577     0: a
2578     1: a
2579     aab
2580     0: aa
2581     1: a
2582     aaa
2583     0: aaa
2584     1: a
2585    
2586     /^(a){0,}/
2587     bcd
2588     0:
2589     abc
2590     0: a
2591     1: a
2592     aab
2593     0: aa
2594     1: a
2595     aaa
2596     0: aaa
2597     1: a
2598     aaaaaaaa
2599     0: aaaaaaaa
2600     1: a
2601    
2602     /^(a){1,1}/
2603     bcd
2604     No match
2605     abc
2606     0: a
2607     1: a
2608     aab
2609     0: a
2610     1: a
2611    
2612     /^(a){1,2}/
2613     bcd
2614     No match
2615     abc
2616     0: a
2617     1: a
2618     aab
2619     0: aa
2620     1: a
2621    
2622     /^(a){1,3}/
2623     bcd
2624     No match
2625     abc
2626     0: a
2627     1: a
2628     aab
2629     0: aa
2630     1: a
2631     aaa
2632     0: aaa
2633     1: a
2634    
2635     /^(a){1,}/
2636     bcd
2637     No match
2638     abc
2639     0: a
2640     1: a
2641     aab
2642     0: aa
2643     1: a
2644     aaa
2645     0: aaa
2646     1: a
2647     aaaaaaaa
2648     0: aaaaaaaa
2649     1: a
2650    
2651     /.*\.gif/
2652     borfle\nbib.gif\nno
2653     0: bib.gif
2654    
2655     /.{0,}\.gif/
2656     borfle\nbib.gif\nno
2657     0: bib.gif
2658    
2659     /.*\.gif/m
2660     borfle\nbib.gif\nno
2661     0: bib.gif
2662    
2663     /.*\.gif/s
2664     borfle\nbib.gif\nno
2665     0: borfle\x0abib.gif
2666    
2667     /.*\.gif/ms
2668     borfle\nbib.gif\nno
2669     0: borfle\x0abib.gif
2670    
2671     /.*$/
2672     borfle\nbib.gif\nno
2673     0: no
2674    
2675     /.*$/m
2676     borfle\nbib.gif\nno
2677     0: borfle
2678    
2679     /.*$/s
2680     borfle\nbib.gif\nno
2681     0: borfle\x0abib.gif\x0ano
2682    
2683     /.*$/ms
2684     borfle\nbib.gif\nno
2685     0: borfle\x0abib.gif\x0ano
2686    
2687     /.*$/
2688     borfle\nbib.gif\nno\n
2689     0: no
2690    
2691     /.*$/m
2692     borfle\nbib.gif\nno\n
2693     0: borfle
2694    
2695     /.*$/s
2696     borfle\nbib.gif\nno\n
2697     0: borfle\x0abib.gif\x0ano\x0a
2698    
2699     /.*$/ms
2700     borfle\nbib.gif\nno\n
2701     0: borfle\x0abib.gif\x0ano\x0a
2702    
2703     /(.*X|^B)/
2704     abcde\n1234Xyz
2705     0: 1234X
2706     1: 1234X
2707     BarFoo
2708     0: B
2709     1: B
2710     *** Failers
2711     No match
2712     abcde\nBar
2713     No match
2714    
2715     /(.*X|^B)/m
2716     abcde\n1234Xyz
2717     0: 1234X
2718     1: 1234X
2719     BarFoo
2720     0: B
2721     1: B
2722     abcde\nBar
2723     0: B
2724     1: B
2725    
2726     /(.*X|^B)/s
2727     abcde\n1234Xyz
2728     0: abcde\x0a1234X
2729     1: abcde\x0a1234X
2730     BarFoo
2731     0: B
2732     1: B
2733     *** Failers
2734     No match
2735     abcde\nBar
2736     No match
2737    
2738     /(.*X|^B)/ms
2739     abcde\n1234Xyz
2740     0: abcde\x0a1234X
2741     1: abcde\x0a1234X
2742     BarFoo
2743     0: B
2744     1: B
2745     abcde\nBar
2746     0: B
2747     1: B
2748    
2749     /(?s)(.*X|^B)/
2750     abcde\n1234Xyz
2751     0: abcde\x0a1234X
2752     1: abcde\x0a1234X
2753     BarFoo
2754     0: B
2755     1: B
2756     *** Failers
2757     No match
2758     abcde\nBar
2759     No match
2760    
2761     /(?s:.*X|^B)/
2762     abcde\n1234Xyz
2763     0: abcde\x0a1234X
2764     BarFoo
2765     0: B
2766     *** Failers
2767     No match
2768     abcde\nBar
2769     No match
2770    
2771     /^.*B/
2772     **** Failers
2773     No match
2774     abc\nB
2775     No match
2776    
2777     /(?s)^.*B/
2778     abc\nB
2779     0: abc\x0aB
2780    
2781     /(?m)^.*B/
2782     abc\nB
2783     0: B
2784    
2785     /(?ms)^.*B/
2786     abc\nB
2787     0: abc\x0aB
2788    
2789     /(?ms)^B/
2790     abc\nB
2791     0: B
2792    
2793     /(?s)B$/
2794     B\n
2795     0: B
2796    
2797     /^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
2798     123456654321
2799     0: 123456654321
2800    
2801     /^\d\d\d\d\d\d\d\d\d\d\d\d/
2802     123456654321
2803     0: 123456654321
2804    
2805     /^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
2806     123456654321
2807     0: 123456654321
2808    
2809     /^[abc]{12}/
2810     abcabcabcabc
2811     0: abcabcabcabc
2812    
2813     /^[a-c]{12}/
2814     abcabcabcabc
2815     0: abcabcabcabc
2816    
2817     /^(a|b|c){12}/
2818     abcabcabcabc
2819     0: abcabcabcabc
2820     1: c
2821    
2822     /^[abcdefghijklmnopqrstuvwxy0123456789]/
2823     n
2824     0: n
2825     *** Failers
2826     No match
2827     z
2828     No match
2829    
2830     /abcde{0,0}/
2831     abcd
2832     0: abcd
2833     *** Failers
2834     No match
2835     abce
2836     No match
2837    
2838     /ab[cd]{0,0}e/
2839     abe
2840     0: abe
2841     *** Failers
2842     No match
2843     abcde
2844     No match
2845    
2846     /ab(c){0,0}d/
2847     abd
2848     0: abd
2849     *** Failers
2850     No match
2851     abcd
2852     No match
2853    
2854     /a(b*)/
2855     a
2856     0: a
2857     1:
2858     ab
2859     0: ab
2860     1: b
2861     abbbb
2862     0: abbbb
2863     1: bbbb
2864     *** Failers
2865     0: a
2866     1:
2867     bbbbb
2868     No match
2869    
2870     /ab\d{0}e/
2871     abe
2872     0: abe
2873     *** Failers
2874     No match
2875     ab1e
2876     No match
2877    
2878     /"([^\\"]+|\\.)*"/
2879     the \"quick\" brown fox
2880     0: "quick"
2881     1: quick
2882     \"the \\\"quick\\\" brown fox\"
2883     0: "the \"quick\" brown fox"
2884     1: brown fox
2885    
2886     /.*?/g+
2887     abc
2888     0:
2889     0+ abc
2890     0: a
2891     0+ bc
2892     0:
2893     0+ bc
2894     0: b
2895     0+ c
2896     0:
2897     0+ c
2898     0: c
2899     0+
2900     0:
2901     0+
2902    
2903     /\b/g+
2904     abc
2905     0:
2906     0+ abc
2907     0:
2908     0+
2909    
2910     /\b/+g
2911     abc
2912     0:
2913     0+ abc
2914     0:
2915     0+
2916    
2917     //g
2918     abc
2919     0:
2920     0:
2921     0:
2922     0:
2923    
2924 nigel 49 /<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
2925     <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>
2926     0: <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>
2927     1: BGCOLOR='#DBE9E9'
2928     2: align=left valign=top
2929     3: 43.
2930     4: <a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)
2931     5:
2932     6:
2933     7: <unset>
2934     8: align=left valign=top
2935     9: Lega lstaff.com
2936     10: align=left valign=top
2937     11: CA - Statewide
2938 nigel 41
2939 nigel 49 /a[^a]b/
2940     acb
2941     0: acb
2942     a\nb
2943     0: a\x0ab
2944    
2945     /a.b/
2946     acb
2947     0: acb
2948     *** Failers
2949     No match
2950     a\nb
2951     No match
2952    
2953     /a[^a]b/s
2954     acb
2955     0: acb
2956     a\nb
2957     0: a\x0ab
2958    
2959     /a.b/s
2960     acb
2961     0: acb
2962     a\nb
2963     0: a\x0ab
2964    
2965     / End of testinput1 /
2966    

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12