/[pcre]/code/tags/pcre-1.03/testoutput
ViewVC logotype

Contents of /code/tags/pcre-1.03/testoutput

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10 - (hide annotations) (download)
Sat Feb 24 21:38:15 2007 UTC (7 years, 8 months ago) by nigel
File size: 54789 byte(s)
Tag code/trunk as code/tags/pcre-1.03.

1 nigel 3 Testing Perl-Compatible Regular Expressions
2 nigel 9 PCRE version 1.03 18-Dec-1997
3 nigel 3
4     /the quick brown fox/
5     the quick brown fox
6     0: the quick brown fox
7     The quick brown FOX
8     No match
9     What do you know about the quick brown fox?
10     0: the quick brown fox
11     What do you know about THE QUICK BROWN FOX?
12     No match
13    
14     /The quick brown fox/i
15     the quick brown fox
16     0: the quick brown fox
17     The quick brown FOX
18     0: The quick brown FOX
19     What do you know about the quick brown fox?
20     0: the quick brown fox
21     What do you know about THE QUICK BROWN FOX?
22     0: THE QUICK BROWN FOX
23    
24     /abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
25     abcd\t\n\r\f\a\e9;\$\\?caxyz
26     0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
27    
28     /a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
29     abxyzpqrrrabbxyyyypqAzz
30     0: abxyzpqrrrabbxyyyypqAzz
31     abxyzpqrrrabbxyyyypqAzz
32     0: abxyzpqrrrabbxyyyypqAzz
33     aabxyzpqrrrabbxyyyypqAzz
34     0: aabxyzpqrrrabbxyyyypqAzz
35     aaabxyzpqrrrabbxyyyypqAzz
36     0: aaabxyzpqrrrabbxyyyypqAzz
37     aaaabxyzpqrrrabbxyyyypqAzz
38     0: aaaabxyzpqrrrabbxyyyypqAzz
39     abcxyzpqrrrabbxyyyypqAzz
40     0: abcxyzpqrrrabbxyyyypqAzz
41     aabcxyzpqrrrabbxyyyypqAzz
42     0: aabcxyzpqrrrabbxyyyypqAzz
43     aaabcxyzpqrrrabbxyyyypAzz
44     0: aaabcxyzpqrrrabbxyyyypAzz
45     aaabcxyzpqrrrabbxyyyypqAzz
46     0: aaabcxyzpqrrrabbxyyyypqAzz
47     aaabcxyzpqrrrabbxyyyypqqAzz
48     0: aaabcxyzpqrrrabbxyyyypqqAzz
49     aaabcxyzpqrrrabbxyyyypqqqAzz
50     0: aaabcxyzpqrrrabbxyyyypqqqAzz
51     aaabcxyzpqrrrabbxyyyypqqqqAzz
52     0: aaabcxyzpqrrrabbxyyyypqqqqAzz
53     aaabcxyzpqrrrabbxyyyypqqqqqAzz
54     0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
55     aaabcxyzpqrrrabbxyyyypqqqqqqAzz
56     0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
57     aaaabcxyzpqrrrabbxyyyypqAzz
58     0: aaaabcxyzpqrrrabbxyyyypqAzz
59     abxyzzpqrrrabbxyyyypqAzz
60     0: abxyzzpqrrrabbxyyyypqAzz
61     aabxyzzzpqrrrabbxyyyypqAzz
62     0: aabxyzzzpqrrrabbxyyyypqAzz
63     aaabxyzzzzpqrrrabbxyyyypqAzz
64     0: aaabxyzzzzpqrrrabbxyyyypqAzz
65     aaaabxyzzzzpqrrrabbxyyyypqAzz
66     0: aaaabxyzzzzpqrrrabbxyyyypqAzz
67     abcxyzzpqrrrabbxyyyypqAzz
68     0: abcxyzzpqrrrabbxyyyypqAzz
69     aabcxyzzzpqrrrabbxyyyypqAzz
70     0: aabcxyzzzpqrrrabbxyyyypqAzz
71     aaabcxyzzzzpqrrrabbxyyyypqAzz
72     0: aaabcxyzzzzpqrrrabbxyyyypqAzz
73     aaaabcxyzzzzpqrrrabbxyyyypqAzz
74     0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
75     aaaabcxyzzzzpqrrrabbbxyyyypqAzz
76     0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
77     aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
78     0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
79     aaabcxyzpqrrrabbxyyyypABzz
80     0: aaabcxyzpqrrrabbxyyyypABzz
81     aaabcxyzpqrrrabbxyyyypABBzz
82     0: aaabcxyzpqrrrabbxyyyypABBzz
83     >>>aaabxyzpqrrrabbxyyyypqAzz
84     0: aaabxyzpqrrrabbxyyyypqAzz
85     >aaaabxyzpqrrrabbxyyyypqAzz
86     0: aaaabxyzpqrrrabbxyyyypqAzz
87     >>>>abcxyzpqrrrabbxyyyypqAzz
88     0: abcxyzpqrrrabbxyyyypqAzz
89     *** Failers
90     No match
91     abxyzpqrrabbxyyyypqAzz
92     No match
93     abxyzpqrrrrabbxyyyypqAzz
94     No match
95     abxyzpqrrrabxyyyypqAzz
96     No match
97     aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
98     No match
99     aaaabcxyzzzzpqrrrabbbxyyypqAzz
100     No match
101     aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
102     No match
103    
104     /^(abc){1,2}zz/
105     abczz
106     0: abczz
107     1: abc
108     abcabczz
109     0: abcabczz
110     1: abc
111     *** Failers
112     No match
113     zz
114     No match
115     abcabcabczz
116     No match
117     >>abczz
118     No match
119    
120     /^(b+?|a){1,2}?c/
121     bc
122     0: bc
123     1: b
124     bbc
125     0: bbc
126     1: b
127     bbbc
128     0: bbbc
129     1: bb
130     bac
131     0: bac
132     1: a
133     bbac
134     0: bbac
135     1: a
136     aac
137     0: aac
138     1: a
139     abbbbbbbbbbbc
140     0: abbbbbbbbbbbc
141     1: bbbbbbbbbbb
142     bbbbbbbbbbbac
143     0: bbbbbbbbbbbac
144     1: a
145     *** Failers
146     No match
147     aaac
148     No match
149     abbbbbbbbbbbac
150     No match
151    
152     /^(b+|a){1,2}c/
153     bc
154     0: bc
155     1: b
156     bbc
157     0: bbc
158     1: bb
159     bbbc
160     0: bbbc
161     1: bbb
162     bac
163     0: bac
164     1: a
165     bbac
166     0: bbac
167     1: a
168     aac
169     0: aac
170     1: a
171     abbbbbbbbbbbc
172     0: abbbbbbbbbbbc
173     1: bbbbbbbbbbb
174     bbbbbbbbbbbac
175     0: bbbbbbbbbbbac
176     1: a
177     *** Failers
178     No match
179     aaac
180     No match
181     abbbbbbbbbbbac
182     No match
183    
184     /^(b+|a){1,2}?bc/
185     bbc
186     0: bbc
187     1: b
188    
189     /^(b*|ba){1,2}?bc/
190     babc
191     0: babc
192     1: ba
193     bbabc
194     0: bbabc
195     1: ba
196     bababc
197     0: bababc
198     1: ba
199     *** Failers
200     No match
201     bababbc
202     No match
203     babababc
204     No match
205    
206     /^(ba|b*){1,2}?bc/
207     babc
208     0: babc
209     1: ba
210     bbabc
211     0: bbabc
212     1: ba
213     bababc
214     0: bababc
215     1: ba
216     *** Failers
217     No match
218     bababbc
219     No match
220     babababc
221     No match
222    
223     /^\ca\cA\c[\c{\c:/
224     \x01\x01\e;z
225     0: \x01\x01\x1b;z
226    
227     /^[ab\]cde]/
228     athing
229     0: a
230     bthing
231     0: b
232     ]thing
233     0: ]
234     cthing
235     0: c
236     dthing
237     0: d
238     ething
239     0: e
240     *** Failers
241     No match
242     fthing
243     No match
244     [thing
245     No match
246     \\thing
247     No match
248    
249     /^[]cde]/
250     ]thing
251     0: ]
252     cthing
253     0: c
254     dthing
255     0: d
256     ething
257     0: e
258     *** Failers
259     No match
260     athing
261     No match
262     fthing
263     No match
264    
265     /^[^ab\]cde]/
266     fthing
267     0: f
268     [thing
269     0: [
270     \\thing
271     0: \
272     *** Failers
273     0: *
274     athing
275     No match
276     bthing
277     No match
278     ]thing
279     No match
280     cthing
281     No match
282     dthing
283     No match
284     ething
285     No match
286    
287     /^[^]cde]/
288     athing
289     0: a
290     fthing
291     0: f
292     *** Failers
293     0: *
294     ]thing
295     No match
296     cthing
297     No match
298     dthing
299     No match
300     ething
301     No match
302    
303     /^\/
304    
305     0: \x81
306    
307     /^/
308    
309     0: \xff
310    
311     /^[0-9]+$/
312     0
313     0: 0
314     1
315     0: 1
316     2
317     0: 2
318     3
319     0: 3
320     4
321     0: 4
322     5
323     0: 5
324     6
325     0: 6
326     7
327     0: 7
328     8
329     0: 8
330     9
331     0: 9
332     10
333     0: 10
334     100
335     0: 100
336     *** Failers
337     No match
338     abc
339     No match
340    
341     /^.*nter/
342     enter
343     0: enter
344     inter
345     0: inter
346     uponter
347     0: uponter
348    
349     /^xxx[0-9]+$/
350     xxx0
351     0: xxx0
352     xxx1234
353     0: xxx1234
354     *** Failers
355     No match
356     xxx
357     No match
358    
359     /^.+[0-9][0-9][0-9]$/
360     x123
361     0: x123
362     xx123
363     0: xx123
364     123456
365     0: 123456
366     *** Failers
367     No match
368     123
369     No match
370     x1234
371     0: x1234
372    
373     /^.+?[0-9][0-9][0-9]$/
374     x123
375     0: x123
376     xx123
377     0: xx123
378     123456
379     0: 123456
380     *** Failers
381     No match
382     123
383     No match
384     x1234
385     0: x1234
386    
387     /^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
388     abc!pqr=apquxz.ixr.zzz.ac.uk
389     0: abc!pqr=apquxz.ixr.zzz.ac.uk
390     1: abc
391     2: pqr
392     *** Failers
393     No match
394     !pqr=apquxz.ixr.zzz.ac.uk
395     No match
396     abc!=apquxz.ixr.zzz.ac.uk
397     No match
398     abc!pqr=apquxz:ixr.zzz.ac.uk
399     No match
400     abc!pqr=apquxz.ixr.zzz.ac.ukk
401     No match
402    
403     /:/
404     Well, we need a colon: somewhere
405     0: :
406     *** Fail if we don't
407     No match
408    
409     /([\da-f:]+)$/i
410     0abc
411     0: 0abc
412     1: 0abc
413     abc
414     0: abc
415     1: abc
416     fed
417     0: fed
418     1: fed
419     E
420     0: E
421     1: E
422     ::
423     0: ::
424     1: ::
425     5f03:12C0::932e
426     0: 5f03:12C0::932e
427     1: 5f03:12C0::932e
428     fed def
429     0: def
430     1: def
431     Any old stuff
432     0: ff
433     1: ff
434     *** Failers
435     No match
436     0zzz
437     No match
438     gzzz
439     No match
440     fed\x20
441     No match
442     Any old rubbish
443     No match
444    
445     /^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
446     .1.2.3
447     0: .1.2.3
448     1: 1
449     2: 2
450     3: 3
451     A.12.123.0
452     0: A.12.123.0
453     1: 12
454     2: 123
455     3: 0
456     *** Failers
457     No match
458     .1.2.3333
459     No match
460     1.2.3
461     No match
462     1234.2.3
463     No match
464    
465     /^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
466     1 IN SOA non-sp1 non-sp2(
467     0: 1 IN SOA non-sp1 non-sp2(
468     1: 1
469     2: non-sp1
470     3: non-sp2
471     1 IN SOA non-sp1 non-sp2 (
472     0: 1 IN SOA non-sp1 non-sp2 (
473     1: 1
474     2: non-sp1
475     3: non-sp2
476     *** Failers
477     No match
478     1IN SOA non-sp1 non-sp2(
479     No match
480    
481     /^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
482     a.
483     0: a.
484     Z.
485     0: Z.
486     2.
487     0: 2.
488     ab-c.pq-r.
489     0: ab-c.pq-r.
490     1: .pq-r
491     sxk.zzz.ac.uk.
492     0: sxk.zzz.ac.uk.
493     1: .uk
494     x-.y-.
495     0: x-.y-.
496     1: .y-
497     *** Failers
498     No match
499     -abc.peq.
500     No match
501    
502     /^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
503     *.a
504     0: *.a
505     *.b0-a
506     0: *.b0-a
507     1: 0-a
508     *.c3-b.c
509     0: *.c3-b.c
510     1: 3-b
511     2: .c
512     *.c-a.b-c
513     0: *.c-a.b-c
514     1: -a
515     2: .b-c
516     3: -c
517     *** Failers
518     No match
519     *.0
520     No match
521     *.a-
522     No match
523     *.a-b.c-
524     No match
525     *.c-a.0-c
526     No match
527    
528     /^(?=ab(de))(abd)(e)/
529     abde
530     0: abde
531     1: de
532     2: abd
533     3: e
534    
535     /^(?!(ab)de|x)(abd)(f)/
536     abdf
537     0: abdf
538     1: <unset>
539     2: abd
540     3: f
541    
542     /^(?=(ab(cd)))(ab)/
543     abcd
544     0: ab
545     1: abcd
546     2: cd
547     3: ab
548    
549     /^[\da-f](\.[\da-f])*$/i
550     a.b.c.d
551     0: a.b.c.d
552     1: .d
553     A.B.C.D
554     0: A.B.C.D
555     1: .D
556     a.b.c.1.2.3.C
557     0: a.b.c.1.2.3.C
558     1: .C
559    
560     /^\".*\"\s*(;.*)?$/
561     \"1234\"
562     0: "1234"
563     \"abcd\" ;
564     0: "abcd" ;
565     1: ;
566     \"\" ; rhubarb
567     0: "" ; rhubarb
568     1: ; rhubarb
569     *** Failers
570     No match
571     \"1234\" : things
572     No match
573    
574     /^$/
575     \
576     0:
577     *** Failers
578     No match
579    
580     / ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/x
581     ab c
582     0: ab c
583     *** Failers
584     No match
585     abc
586     No match
587     ab cde
588     No match
589    
590     /(?x) ^ a (?# begins with a) b\sc (?# then b c) $ (?# then end)/
591     ab c
592     0: ab c
593     *** Failers
594     No match
595     abc
596     No match
597     ab cde
598     No match
599    
600     /^ a\ b[c ]d $/x
601     a bcd
602     0: a bcd
603     a b d
604     0: a b d
605     *** Failers
606     No match
607     abcd
608     No match
609     ab d
610     No match
611    
612     /^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
613     abcdefhijklm
614     0: abcdefhijklm
615     1: abc
616     2: bc
617     3: c
618     4: def
619     5: ef
620     6: f
621     7: hij
622     8: ij
623     9: j
624     10: klm
625     11: lm
626     12: m
627    
628     /^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
629     abcdefhijklm
630     0: abcdefhijklm
631     1: bc
632     2: c
633     3: ef
634     4: f
635     5: ij
636     6: j
637     7: lm
638     8: m
639    
640     /^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
641     a+ Z0+\x08\n\x1d\x12
642     0: a+ Z0+\x08\x0a\x1d\x12
643    
644     /^[.^$|()*+?{,}]+/
645     .^\$(*+)|{?,?}
646     0: .^$(*+)|{?,?}
647    
648     /^a*\w/
649     z
650     0: z
651     az
652     0: az
653     aaaz
654     0: aaaz
655     a
656     0: a
657     aa
658     0: aa
659     aaaa
660     0: aaaa
661     a+
662     0: a
663     aa+
664     0: aa
665    
666     /^a*?\w/
667     z
668     0: z
669     az
670     0: a
671     aaaz
672     0: a
673     a
674     0: a
675     aa
676     0: a
677     aaaa
678     0: a
679     a+
680     0: a
681     aa+
682     0: a
683    
684     /^a+\w/
685     az
686     0: az
687     aaaz
688     0: aaaz
689     aa
690     0: aa
691     aaaa
692     0: aaaa
693     aa+
694     0: aa
695    
696     /^a+?\w/
697     az
698     0: az
699     aaaz
700     0: aa
701     aa
702     0: aa
703     aaaa
704     0: aa
705     aa+
706     0: aa
707    
708     /^\d{8}\w{2,}/
709     1234567890
710     0: 1234567890
711     12345678ab
712     0: 12345678ab
713     12345678__
714     0: 12345678__
715     *** Failers
716     No match
717     1234567
718     No match
719    
720     /^[aeiou\d]{4,5}$/
721     uoie
722     0: uoie
723     1234
724     0: 1234
725     12345
726     0: 12345
727     aaaaa
728     0: aaaaa
729     *** Failers
730     No match
731     123456
732     No match
733    
734     /^[aeiou\d]{4,5}?/
735     uoie
736     0: uoie
737     1234
738     0: 1234
739     12345
740     0: 1234
741     aaaaa
742     0: aaaa
743     123456
744     0: 1234
745    
746     /\A(abc|def)=(\1){2,3}\Z/
747     abc=abcabc
748     0: abc=abcabc
749     1: abc
750     2: abc
751     def=defdefdef
752     0: def=defdefdef
753     1: def
754     2: def
755     *** Failers
756     No match
757     abc=defdef
758     No match
759    
760     /^(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\11*(\3\4)\1(?#)2$/
761     abcdefghijkcda2
762     0: abcdefghijkcda2
763     1: a
764     2: b
765     3: c
766     4: d
767     5: e
768     6: f
769     7: g
770     8: h
771     9: i
772     10: j
773     11: k
774     12: cd
775     abcdefghijkkkkcda2
776     0: abcdefghijkkkkcda2
777     1: a
778     2: b
779     3: c
780     4: d
781     5: e
782     6: f
783     7: g
784     8: h
785     9: i
786     10: j
787     11: k
788     12: cd
789    
790     /(cat(a(ract|tonic)|erpillar)) \1()2(3)/
791     cataract cataract23
792     0: cataract cataract23
793     1: cataract
794     2: aract
795     3: ract
796     4:
797     5: 3
798     catatonic catatonic23
799     0: catatonic catatonic23
800     1: catatonic
801     2: atonic
802     3: tonic
803     4:
804     5: 3
805     caterpillar caterpillar23
806     0: caterpillar caterpillar23
807     1: caterpillar
808     2: erpillar
809     3: <unset>
810     4:
811     5: 3
812    
813    
814     /^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]/
815     From abcd Mon Sep 01 12:33:02 1997
816     0: From abcd Mon Sep 01 12:33
817     1: abcd
818    
819     /^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
820     From abcd Mon Sep 01 12:33:02 1997
821     0: From abcd Mon Sep 01 12:33
822     1: Sep
823     From abcd Mon Sep 1 12:33:02 1997
824     0: From abcd Mon Sep 1 12:33
825     1: Sep
826     *** Failers
827     No match
828     From abcd Sep 01 12:33:02 1997
829     No match
830    
831     /^12.34/s
832     12\n34
833     0: 12\x0a34
834     12\r34
835     0: 12\x0d34
836    
837     /\w+(?=\t)/
838     the quick brown\t fox
839     0: brown
840    
841     /foo(?!bar)(.*)/
842     foobar is foolish see?
843     0: foolish see?
844     1: lish see?
845    
846     /(?:(?!foo)...|^.{0,2})bar(.*)/
847     foobar crowbar etc
848     0: rowbar etc
849     1: etc
850     barrel
851     0: barrel
852     1: rel
853     2barrel
854     0: 2barrel
855     1: rel
856     A barrel
857     0: A barrel
858     1: rel
859    
860     /^(\D*)(?=\d)(?!123)/
861     abc456
862     0: abc
863     1: abc
864     *** Failers
865     No match
866     abc123
867     No match
868    
869     /^1234(?# test newlines
870     inside)/
871     1234
872     0: 1234
873    
874     /^1234 #comment in extended re
875     /x
876     1234
877     0: 1234
878    
879     /#rhubarb
880     abcd/x
881     abcd
882     0: abcd
883    
884     /^abcd#rhubarb/x
885     abcd
886     0: abcd
887    
888     /^(a)\1{2,3}(.)/
889     aaab
890     0: aaab
891     1: a
892     2: b
893     aaaab
894     0: aaaab
895     1: a
896     2: b
897     aaaaab
898     0: aaaaa
899     1: a
900     2: a
901     aaaaaab
902     0: aaaaa
903     1: a
904     2: a
905    
906     /(?!^)abc/
907     the abc
908     0: abc
909     *** Failers
910     No match
911     abc
912     No match
913    
914     /(?=^)abc/
915     abc
916     0: abc
917     *** Failers
918     No match
919     the abc
920     No match
921    
922     /^[ab]{1,3}(ab*|b)/
923     aabbbbb
924     0: aabb
925     1: b
926    
927     /^[ab]{1,3}?(ab*|b)/
928     aabbbbb
929     0: aabbbbb
930     1: abbbbb
931    
932     /^[ab]{1,3}?(ab*?|b)/
933     aabbbbb
934     0: aa
935     1: a
936    
937     /^[ab]{1,3}(ab*?|b)/
938     aabbbbb
939     0: aabb
940     1: b
941    
942     / (?: [\040\t] | \(
943     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
944     \) )* # optional leading comment
945     (?: (?:
946     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
947     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
948     |
949     " (?: # opening quote...
950     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
951     | # or
952     \\ [^\x80-\xff] # Escaped something (something != CR)
953     )* " # closing quote
954     ) # initial word
955     (?: (?: [\040\t] | \(
956     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
957     \) )* \. (?: [\040\t] | \(
958     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
959     \) )* (?:
960     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
961     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
962     |
963     " (?: # opening quote...
964     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
965     | # or
966     \\ [^\x80-\xff] # Escaped something (something != CR)
967     )* " # closing quote
968     ) )* # further okay, if led by a period
969     (?: [\040\t] | \(
970     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
971     \) )* @ (?: [\040\t] | \(
972     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
973     \) )* (?:
974     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
975     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
976     | \[ # [
977     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
978     \] # ]
979     ) # initial subdomain
980     (?: #
981     (?: [\040\t] | \(
982     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
983     \) )* \. # if led by a period...
984     (?: [\040\t] | \(
985     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
986     \) )* (?:
987     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
988     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
989     | \[ # [
990     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
991     \] # ]
992     ) # ...further okay
993     )*
994     # address
995     | # or
996     (?:
997     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
998     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
999     |
1000     " (?: # opening quote...
1001     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1002     | # or
1003     \\ [^\x80-\xff] # Escaped something (something != CR)
1004     )* " # closing quote
1005     ) # one word, optionally followed by....
1006     (?:
1007     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] | # atom and space parts, or...
1008     \(
1009     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1010     \) | # comments, or...
1011    
1012     " (?: # opening quote...
1013     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1014     | # or
1015     \\ [^\x80-\xff] # Escaped something (something != CR)
1016     )* " # closing quote
1017     # quoted strings
1018     )*
1019     < (?: [\040\t] | \(
1020     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1021     \) )* # leading <
1022     (?: @ (?: [\040\t] | \(
1023     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1024     \) )* (?:
1025     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1026     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1027     | \[ # [
1028     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1029     \] # ]
1030     ) # initial subdomain
1031     (?: #
1032     (?: [\040\t] | \(
1033     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1034     \) )* \. # if led by a period...
1035     (?: [\040\t] | \(
1036     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1037     \) )* (?:
1038     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1039     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1040     | \[ # [
1041     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1042     \] # ]
1043     ) # ...further okay
1044     )*
1045    
1046     (?: (?: [\040\t] | \(
1047     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1048     \) )* , (?: [\040\t] | \(
1049     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1050     \) )* @ (?: [\040\t] | \(
1051     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1052     \) )* (?:
1053     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1054     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1055     | \[ # [
1056     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1057     \] # ]
1058     ) # initial subdomain
1059     (?: #
1060     (?: [\040\t] | \(
1061     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1062     \) )* \. # if led by a period...
1063     (?: [\040\t] | \(
1064     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1065     \) )* (?:
1066     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1067     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1068     | \[ # [
1069     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1070     \] # ]
1071     ) # ...further okay
1072     )*
1073     )* # further okay, if led by comma
1074     : # closing colon
1075     (?: [\040\t] | \(
1076     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1077     \) )* )? # optional route
1078     (?:
1079     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1080     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1081     |
1082     " (?: # opening quote...
1083     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1084     | # or
1085     \\ [^\x80-\xff] # Escaped something (something != CR)
1086     )* " # closing quote
1087     ) # initial word
1088     (?: (?: [\040\t] | \(
1089     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1090     \) )* \. (?: [\040\t] | \(
1091     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1092     \) )* (?:
1093     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1094     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1095     |
1096     " (?: # opening quote...
1097     [^\\\x80-\xff\n\015"] # Anything except backslash and quote
1098     | # or
1099     \\ [^\x80-\xff] # Escaped something (something != CR)
1100     )* " # closing quote
1101     ) )* # further okay, if led by a period
1102     (?: [\040\t] | \(
1103     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1104     \) )* @ (?: [\040\t] | \(
1105     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1106     \) )* (?:
1107     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1108     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1109     | \[ # [
1110     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1111     \] # ]
1112     ) # initial subdomain
1113     (?: #
1114     (?: [\040\t] | \(
1115     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1116     \) )* \. # if led by a period...
1117     (?: [\040\t] | \(
1118     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1119     \) )* (?:
1120     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1121     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1122     | \[ # [
1123     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1124     \] # ]
1125     ) # ...further okay
1126     )*
1127     # address spec
1128     (?: [\040\t] | \(
1129     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1130     \) )* > # trailing >
1131     # name and address
1132     ) (?: [\040\t] | \(
1133     (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] | \( (?: [^\\\x80-\xff\n\015()] | \\ [^\x80-\xff] )* \) )*
1134     \) )* # optional trailing comment
1135     /x
1136     Alan Other <user\@dom.ain>
1137     0: Alan Other <user@dom.ain>
1138     <user\@dom.ain>
1139     0: user@dom.ain
1140     user\@dom.ain
1141     0: user@dom.ain
1142     \"A. Other\" <user.1234\@dom.ain> (a comment)
1143     0: "A. Other" <user.1234@dom.ain> (a comment)
1144     A. Other <user.1234\@dom.ain> (a comment)
1145     0: Other <user.1234@dom.ain> (a comment)
1146     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1147     0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
1148     A missing angle <user\@some.where
1149     0: user@some.where
1150     *** Failers
1151     No match
1152     The quick brown fox
1153     No match
1154    
1155     /[\040\t]* # Nab whitespace.
1156     (?:
1157     \( # (
1158     [^\\\x80-\xff\n\015()] * # normal*
1159     (?: # (
1160     (?: \\ [^\x80-\xff] |
1161     \( # (
1162     [^\\\x80-\xff\n\015()] * # normal*
1163     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1164     \) # )
1165     ) # special
1166     [^\\\x80-\xff\n\015()] * # normal*
1167     )* # )*
1168     \) # )
1169     [\040\t]* )* # If comment found, allow more spaces.
1170     # optional leading comment
1171     (?:
1172     (?:
1173     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1174     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1175     # Atom
1176     | # or
1177     " # "
1178     [^\\\x80-\xff\n\015"] * # normal
1179     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1180     " # "
1181     # Quoted string
1182     )
1183     [\040\t]* # Nab whitespace.
1184     (?:
1185     \( # (
1186     [^\\\x80-\xff\n\015()] * # normal*
1187     (?: # (
1188     (?: \\ [^\x80-\xff] |
1189     \( # (
1190     [^\\\x80-\xff\n\015()] * # normal*
1191     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1192     \) # )
1193     ) # special
1194     [^\\\x80-\xff\n\015()] * # normal*
1195     )* # )*
1196     \) # )
1197     [\040\t]* )* # If comment found, allow more spaces.
1198     (?:
1199     \.
1200     [\040\t]* # Nab whitespace.
1201     (?:
1202     \( # (
1203     [^\\\x80-\xff\n\015()] * # normal*
1204     (?: # (
1205     (?: \\ [^\x80-\xff] |
1206     \( # (
1207     [^\\\x80-\xff\n\015()] * # normal*
1208     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1209     \) # )
1210     ) # special
1211     [^\\\x80-\xff\n\015()] * # normal*
1212     )* # )*
1213     \) # )
1214     [\040\t]* )* # If comment found, allow more spaces.
1215     (?:
1216     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1217     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1218     # Atom
1219     | # or
1220     " # "
1221     [^\\\x80-\xff\n\015"] * # normal
1222     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1223     " # "
1224     # Quoted string
1225     )
1226     [\040\t]* # Nab whitespace.
1227     (?:
1228     \( # (
1229     [^\\\x80-\xff\n\015()] * # normal*
1230     (?: # (
1231     (?: \\ [^\x80-\xff] |
1232     \( # (
1233     [^\\\x80-\xff\n\015()] * # normal*
1234     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1235     \) # )
1236     ) # special
1237     [^\\\x80-\xff\n\015()] * # normal*
1238     )* # )*
1239     \) # )
1240     [\040\t]* )* # If comment found, allow more spaces.
1241     # additional words
1242     )*
1243     @
1244     [\040\t]* # Nab whitespace.
1245     (?:
1246     \( # (
1247     [^\\\x80-\xff\n\015()] * # normal*
1248     (?: # (
1249     (?: \\ [^\x80-\xff] |
1250     \( # (
1251     [^\\\x80-\xff\n\015()] * # normal*
1252     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1253     \) # )
1254     ) # special
1255     [^\\\x80-\xff\n\015()] * # normal*
1256     )* # )*
1257     \) # )
1258     [\040\t]* )* # If comment found, allow more spaces.
1259     (?:
1260     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1261     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1262     |
1263     \[ # [
1264     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1265     \] # ]
1266     )
1267     [\040\t]* # Nab whitespace.
1268     (?:
1269     \( # (
1270     [^\\\x80-\xff\n\015()] * # normal*
1271     (?: # (
1272     (?: \\ [^\x80-\xff] |
1273     \( # (
1274     [^\\\x80-\xff\n\015()] * # normal*
1275     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1276     \) # )
1277     ) # special
1278     [^\\\x80-\xff\n\015()] * # normal*
1279     )* # )*
1280     \) # )
1281     [\040\t]* )* # If comment found, allow more spaces.
1282     # optional trailing comments
1283     (?:
1284     \.
1285     [\040\t]* # Nab whitespace.
1286     (?:
1287     \( # (
1288     [^\\\x80-\xff\n\015()] * # normal*
1289     (?: # (
1290     (?: \\ [^\x80-\xff] |
1291     \( # (
1292     [^\\\x80-\xff\n\015()] * # normal*
1293     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1294     \) # )
1295     ) # special
1296     [^\\\x80-\xff\n\015()] * # normal*
1297     )* # )*
1298     \) # )
1299     [\040\t]* )* # If comment found, allow more spaces.
1300     (?:
1301     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1302     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1303     |
1304     \[ # [
1305     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1306     \] # ]
1307     )
1308     [\040\t]* # Nab whitespace.
1309     (?:
1310     \( # (
1311     [^\\\x80-\xff\n\015()] * # normal*
1312     (?: # (
1313     (?: \\ [^\x80-\xff] |
1314     \( # (
1315     [^\\\x80-\xff\n\015()] * # normal*
1316     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1317     \) # )
1318     ) # special
1319     [^\\\x80-\xff\n\015()] * # normal*
1320     )* # )*
1321     \) # )
1322     [\040\t]* )* # If comment found, allow more spaces.
1323     # optional trailing comments
1324     )*
1325     # address
1326     | # or
1327     (?:
1328     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1329     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1330     # Atom
1331     | # or
1332     " # "
1333     [^\\\x80-\xff\n\015"] * # normal
1334     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1335     " # "
1336     # Quoted string
1337     )
1338     # leading word
1339     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # "normal" atoms and or spaces
1340     (?:
1341     (?:
1342     \( # (
1343     [^\\\x80-\xff\n\015()] * # normal*
1344     (?: # (
1345     (?: \\ [^\x80-\xff] |
1346     \( # (
1347     [^\\\x80-\xff\n\015()] * # normal*
1348     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1349     \) # )
1350     ) # special
1351     [^\\\x80-\xff\n\015()] * # normal*
1352     )* # )*
1353     \) # )
1354     |
1355     " # "
1356     [^\\\x80-\xff\n\015"] * # normal
1357     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1358     " # "
1359     ) # "special" comment or quoted string
1360     [^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] * # more "normal"
1361     )*
1362     <
1363     [\040\t]* # Nab whitespace.
1364     (?:
1365     \( # (
1366     [^\\\x80-\xff\n\015()] * # normal*
1367     (?: # (
1368     (?: \\ [^\x80-\xff] |
1369     \( # (
1370     [^\\\x80-\xff\n\015()] * # normal*
1371     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1372     \) # )
1373     ) # special
1374     [^\\\x80-\xff\n\015()] * # normal*
1375     )* # )*
1376     \) # )
1377     [\040\t]* )* # If comment found, allow more spaces.
1378     # <
1379     (?:
1380     @
1381     [\040\t]* # Nab whitespace.
1382     (?:
1383     \( # (
1384     [^\\\x80-\xff\n\015()] * # normal*
1385     (?: # (
1386     (?: \\ [^\x80-\xff] |
1387     \( # (
1388     [^\\\x80-\xff\n\015()] * # normal*
1389     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1390     \) # )
1391     ) # special
1392     [^\\\x80-\xff\n\015()] * # normal*
1393     )* # )*
1394     \) # )
1395     [\040\t]* )* # If comment found, allow more spaces.
1396     (?:
1397     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1398     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1399     |
1400     \[ # [
1401     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1402     \] # ]
1403     )
1404     [\040\t]* # Nab whitespace.
1405     (?:
1406     \( # (
1407     [^\\\x80-\xff\n\015()] * # normal*
1408     (?: # (
1409     (?: \\ [^\x80-\xff] |
1410     \( # (
1411     [^\\\x80-\xff\n\015()] * # normal*
1412     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1413     \) # )
1414     ) # special
1415     [^\\\x80-\xff\n\015()] * # normal*
1416     )* # )*
1417     \) # )
1418     [\040\t]* )* # If comment found, allow more spaces.
1419     # optional trailing comments
1420     (?:
1421     \.
1422     [\040\t]* # Nab whitespace.
1423     (?:
1424     \( # (
1425     [^\\\x80-\xff\n\015()] * # normal*
1426     (?: # (
1427     (?: \\ [^\x80-\xff] |
1428     \( # (
1429     [^\\\x80-\xff\n\015()] * # normal*
1430     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1431     \) # )
1432     ) # special
1433     [^\\\x80-\xff\n\015()] * # normal*
1434     )* # )*
1435     \) # )
1436     [\040\t]* )* # If comment found, allow more spaces.
1437     (?:
1438     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1439     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1440     |
1441     \[ # [
1442     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1443     \] # ]
1444     )
1445     [\040\t]* # Nab whitespace.
1446     (?:
1447     \( # (
1448     [^\\\x80-\xff\n\015()] * # normal*
1449     (?: # (
1450     (?: \\ [^\x80-\xff] |
1451     \( # (
1452     [^\\\x80-\xff\n\015()] * # normal*
1453     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1454     \) # )
1455     ) # special
1456     [^\\\x80-\xff\n\015()] * # normal*
1457     )* # )*
1458     \) # )
1459     [\040\t]* )* # If comment found, allow more spaces.
1460     # optional trailing comments
1461     )*
1462     (?: ,
1463     [\040\t]* # Nab whitespace.
1464     (?:
1465     \( # (
1466     [^\\\x80-\xff\n\015()] * # normal*
1467     (?: # (
1468     (?: \\ [^\x80-\xff] |
1469     \( # (
1470     [^\\\x80-\xff\n\015()] * # normal*
1471     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1472     \) # )
1473     ) # special
1474     [^\\\x80-\xff\n\015()] * # normal*
1475     )* # )*
1476     \) # )
1477     [\040\t]* )* # If comment found, allow more spaces.
1478     @
1479     [\040\t]* # Nab whitespace.
1480     (?:
1481     \( # (
1482     [^\\\x80-\xff\n\015()] * # normal*
1483     (?: # (
1484     (?: \\ [^\x80-\xff] |
1485     \( # (
1486     [^\\\x80-\xff\n\015()] * # normal*
1487     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1488     \) # )
1489     ) # special
1490     [^\\\x80-\xff\n\015()] * # normal*
1491     )* # )*
1492     \) # )
1493     [\040\t]* )* # If comment found, allow more spaces.
1494     (?:
1495     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1496     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1497     |
1498     \[ # [
1499     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1500     \] # ]
1501     )
1502     [\040\t]* # Nab whitespace.
1503     (?:
1504     \( # (
1505     [^\\\x80-\xff\n\015()] * # normal*
1506     (?: # (
1507     (?: \\ [^\x80-\xff] |
1508     \( # (
1509     [^\\\x80-\xff\n\015()] * # normal*
1510     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1511     \) # )
1512     ) # special
1513     [^\\\x80-\xff\n\015()] * # normal*
1514     )* # )*
1515     \) # )
1516     [\040\t]* )* # If comment found, allow more spaces.
1517     # optional trailing comments
1518     (?:
1519     \.
1520     [\040\t]* # Nab whitespace.
1521     (?:
1522     \( # (
1523     [^\\\x80-\xff\n\015()] * # normal*
1524     (?: # (
1525     (?: \\ [^\x80-\xff] |
1526     \( # (
1527     [^\\\x80-\xff\n\015()] * # normal*
1528     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1529     \) # )
1530     ) # special
1531     [^\\\x80-\xff\n\015()] * # normal*
1532     )* # )*
1533     \) # )
1534     [\040\t]* )* # If comment found, allow more spaces.
1535     (?:
1536     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1537     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1538     |
1539     \[ # [
1540     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1541     \] # ]
1542     )
1543     [\040\t]* # Nab whitespace.
1544     (?:
1545     \( # (
1546     [^\\\x80-\xff\n\015()] * # normal*
1547     (?: # (
1548     (?: \\ [^\x80-\xff] |
1549     \( # (
1550     [^\\\x80-\xff\n\015()] * # normal*
1551     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1552     \) # )
1553     ) # special
1554     [^\\\x80-\xff\n\015()] * # normal*
1555     )* # )*
1556     \) # )
1557     [\040\t]* )* # If comment found, allow more spaces.
1558     # optional trailing comments
1559     )*
1560     )* # additional domains
1561     :
1562     [\040\t]* # Nab whitespace.
1563     (?:
1564     \( # (
1565     [^\\\x80-\xff\n\015()] * # normal*
1566     (?: # (
1567     (?: \\ [^\x80-\xff] |
1568     \( # (
1569     [^\\\x80-\xff\n\015()] * # normal*
1570     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1571     \) # )
1572     ) # special
1573     [^\\\x80-\xff\n\015()] * # normal*
1574     )* # )*
1575     \) # )
1576     [\040\t]* )* # If comment found, allow more spaces.
1577     # optional trailing comments
1578     )? # optional route
1579     (?:
1580     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1581     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1582     # Atom
1583     | # or
1584     " # "
1585     [^\\\x80-\xff\n\015"] * # normal
1586     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1587     " # "
1588     # Quoted string
1589     )
1590     [\040\t]* # Nab whitespace.
1591     (?:
1592     \( # (
1593     [^\\\x80-\xff\n\015()] * # normal*
1594     (?: # (
1595     (?: \\ [^\x80-\xff] |
1596     \( # (
1597     [^\\\x80-\xff\n\015()] * # normal*
1598     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1599     \) # )
1600     ) # special
1601     [^\\\x80-\xff\n\015()] * # normal*
1602     )* # )*
1603     \) # )
1604     [\040\t]* )* # If comment found, allow more spaces.
1605     (?:
1606     \.
1607     [\040\t]* # Nab whitespace.
1608     (?:
1609     \( # (
1610     [^\\\x80-\xff\n\015()] * # normal*
1611     (?: # (
1612     (?: \\ [^\x80-\xff] |
1613     \( # (
1614     [^\\\x80-\xff\n\015()] * # normal*
1615     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1616     \) # )
1617     ) # special
1618     [^\\\x80-\xff\n\015()] * # normal*
1619     )* # )*
1620     \) # )
1621     [\040\t]* )* # If comment found, allow more spaces.
1622     (?:
1623     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1624     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1625     # Atom
1626     | # or
1627     " # "
1628     [^\\\x80-\xff\n\015"] * # normal
1629     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015"] * )* # ( special normal* )*
1630     " # "
1631     # Quoted string
1632     )
1633     [\040\t]* # Nab whitespace.
1634     (?:
1635     \( # (
1636     [^\\\x80-\xff\n\015()] * # normal*
1637     (?: # (
1638     (?: \\ [^\x80-\xff] |
1639     \( # (
1640     [^\\\x80-\xff\n\015()] * # normal*
1641     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1642     \) # )
1643     ) # special
1644     [^\\\x80-\xff\n\015()] * # normal*
1645     )* # )*
1646     \) # )
1647     [\040\t]* )* # If comment found, allow more spaces.
1648     # additional words
1649     )*
1650     @
1651     [\040\t]* # Nab whitespace.
1652     (?:
1653     \( # (
1654     [^\\\x80-\xff\n\015()] * # normal*
1655     (?: # (
1656     (?: \\ [^\x80-\xff] |
1657     \( # (
1658     [^\\\x80-\xff\n\015()] * # normal*
1659     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1660     \) # )
1661     ) # special
1662     [^\\\x80-\xff\n\015()] * # normal*
1663     )* # )*
1664     \) # )
1665     [\040\t]* )* # If comment found, allow more spaces.
1666     (?:
1667     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1668     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1669     |
1670     \[ # [
1671     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1672     \] # ]
1673     )
1674     [\040\t]* # Nab whitespace.
1675     (?:
1676     \( # (
1677     [^\\\x80-\xff\n\015()] * # normal*
1678     (?: # (
1679     (?: \\ [^\x80-\xff] |
1680     \( # (
1681     [^\\\x80-\xff\n\015()] * # normal*
1682     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1683     \) # )
1684     ) # special
1685     [^\\\x80-\xff\n\015()] * # normal*
1686     )* # )*
1687     \) # )
1688     [\040\t]* )* # If comment found, allow more spaces.
1689     # optional trailing comments
1690     (?:
1691     \.
1692     [\040\t]* # Nab whitespace.
1693     (?:
1694     \( # (
1695     [^\\\x80-\xff\n\015()] * # normal*
1696     (?: # (
1697     (?: \\ [^\x80-\xff] |
1698     \( # (
1699     [^\\\x80-\xff\n\015()] * # normal*
1700     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1701     \) # )
1702     ) # special
1703     [^\\\x80-\xff\n\015()] * # normal*
1704     )* # )*
1705     \) # )
1706     [\040\t]* )* # If comment found, allow more spaces.
1707     (?:
1708     [^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+ # some number of atom characters...
1709     (?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
1710     |
1711     \[ # [
1712     (?: [^\\\x80-\xff\n\015\[\]] | \\ [^\x80-\xff] )* # stuff
1713     \] # ]
1714     )
1715     [\040\t]* # Nab whitespace.
1716     (?:
1717     \( # (
1718     [^\\\x80-\xff\n\015()] * # normal*
1719     (?: # (
1720     (?: \\ [^\x80-\xff] |
1721     \( # (
1722     [^\\\x80-\xff\n\015()] * # normal*
1723     (?: \\ [^\x80-\xff] [^\\\x80-\xff\n\015()] * )* # (special normal*)*
1724     \) # )
1725     ) # special
1726     [^\\\x80-\xff\n\015()] * # normal*
1727     )* # )*
1728     \) # )
1729     [\040\t]* )* # If comment found, allow more spaces.
1730     # optional trailing comments
1731     )*
1732     # address spec
1733     > # >
1734     # name and address
1735     )
1736     /x
1737     Alan Other <user\@dom.ain>
1738     0: Alan Other <user@dom.ain>
1739     <user\@dom.ain>
1740     0: user@dom.ain
1741     user\@dom.ain
1742     0: user@dom.ain
1743     \"A. Other\" <user.1234\@dom.ain> (a comment)
1744     0: "A. Other" <user.1234@dom.ain>
1745     A. Other <user.1234\@dom.ain> (a comment)
1746     0: Other <user.1234@dom.ain>
1747     \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
1748     0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
1749     A missing angle <user\@some.where
1750     0: user@some.where
1751     *** Failers
1752     No match
1753     The quick brown fox
1754     No match
1755    
1756     /abc\0def\00pqr\000xyz\0000AB/
1757     abc\0def\00pqr\000xyz\0000AB
1758     0: abc\x00def\x00pqr\x00xyz\x000AB
1759     abc456 abc\0def\00pqr\000xyz\0000ABCDE
1760     0: abc\x00def\x00pqr\x00xyz\x000AB
1761    
1762     /abc\x0def\x00pqr\x000xyz\x0000AB/
1763     abc\x0def\x00pqr\x000xyz\x0000AB
1764     0: abc\x0def\x00pqr\x000xyz\x0000AB
1765     abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
1766     0: abc\x0def\x00pqr\x000xyz\x0000AB
1767    
1768     /^[\000-\037]/
1769     \0A
1770     0: \x00
1771     \01B
1772     0: \x01
1773     \037C
1774     0: \x1f
1775    
1776     /\0*/
1777     \0\0\0\0
1778     0: \x00\x00\x00\x00
1779    
1780     /A\x0{2,3}Z/
1781     The A\x0\x0Z
1782     0: A\x00\x00Z
1783     An A\0\x0\0Z
1784     0: A\x00\x00\x00Z
1785     *** Failers
1786     No match
1787     A\0Z
1788     No match
1789     A\0\x0\0\x0Z
1790     No match
1791    
1792     /^(cow|)\1(bell)/
1793     cowcowbell
1794     0: cowcowbell
1795     1: cow
1796     2: bell
1797     bell
1798     0: bell
1799     1:
1800     2: bell
1801     *** Failers
1802     No match
1803     cowbell
1804     No match
1805    
1806     /^\s/
1807     \040abc
1808     0:
1809     \x0cabc
1810     0: \x0c
1811     \nabc
1812     0: \x0a
1813     \rabc
1814     0: \x0d
1815     \tabc
1816     0: \x09
1817     *** Failers
1818     No match
1819     abc
1820     No match
1821    
1822     /^a b
1823    
1824     c/x
1825     abc
1826     0: abc
1827    
1828     /^(a|)\1*b/
1829     ab
1830     0: ab
1831     1: a
1832     aaaab
1833     0: aaaab
1834     1: a
1835     b
1836     0: b
1837     1:
1838     *** Failers
1839     No match
1840     acb
1841     No match
1842    
1843     /^(a|)\1+b/
1844     aab
1845     0: aab
1846     1: a
1847     aaaab
1848     0: aaaab
1849     1: a
1850     b
1851     0: b
1852     1:
1853     *** Failers
1854     No match
1855     ab
1856     No match
1857    
1858     /^(a|)\1?b/
1859     ab
1860     0: ab
1861     1: a
1862     aab
1863     0: aab
1864     1: a
1865     b
1866     0: b
1867     1:
1868     *** Failers
1869     No match
1870     acb
1871     No match
1872    
1873     /^(a|)\1{2}b/
1874     aaab
1875     0: aaab
1876     1: a
1877     b
1878     0: b
1879     1:
1880     *** Failers
1881     No match
1882     ab
1883     No match
1884     aab
1885     No match
1886     aaaab
1887     No match
1888    
1889     /^(a|)\1{2,3}b/
1890     aaab
1891     0: aaab
1892     1: a
1893     aaaab
1894     0: aaaab
1895     1: a
1896     b
1897     0: b
1898     1:
1899     *** Failers
1900     No match
1901     ab
1902     No match
1903     aab
1904     No match
1905     aaaaab
1906     No match
1907    
1908     /ab{1,3}bc/
1909     abbbbc
1910     0: abbbbc
1911     abbbc
1912     0: abbbc
1913     abbc
1914     0: abbc
1915     *** Failers
1916     No match
1917     abc
1918     No match
1919     abbbbbc
1920     No match
1921    
1922     /([^.]*)\.([^:]*):[T ]+(.*)/
1923     track1.title:TBlah blah blah
1924     0: track1.title:TBlah blah blah
1925     1: track1
1926     2: title
1927     3: Blah blah blah
1928    
1929     /([^.]*)\.([^:]*):[T ]+(.*)/i
1930     track1.title:TBlah blah blah
1931     0: track1.title:TBlah blah blah
1932     1: track1
1933     2: title
1934     3: Blah blah blah
1935    
1936     /([^.]*)\.([^:]*):[t ]+(.*)/i
1937     track1.title:TBlah blah blah
1938     0: track1.title:TBlah blah blah
1939     1: track1
1940     2: title
1941     3: Blah blah blah
1942    
1943     /^[W-c]+$/
1944     WXY_^abc
1945     0: WXY_^abc
1946     ***Failers
1947     No match
1948     wxy
1949     No match
1950    
1951     /^[W-c]+$/i
1952     WXY_^abc
1953     0: WXY_^abc
1954     wxy_^ABC
1955     0: wxy_^ABC
1956    
1957     /^[\x3f-\x5F]+$/i
1958     WXY_^abc
1959     0: WXY_^abc
1960     wxy_^ABC
1961     0: wxy_^ABC
1962    
1963     /^abc$/m
1964     abc
1965     0: abc
1966     qqq\nabc
1967     0: abc
1968     abc\nzzz
1969     0: abc
1970     qqq\nabc\nzzz
1971     0: abc
1972    
1973     /^abc$/
1974     abc
1975     0: abc
1976     *** Failers
1977     No match
1978     qqq\nabc
1979     No match
1980     abc\nzzz
1981     No match
1982     qqq\nabc\nzzz
1983     No match
1984    
1985     /\Aabc\Z/m
1986     abc
1987     0: abc
1988     *** Failers
1989     No match
1990     qqq\nabc
1991     No match
1992     abc\nzzz
1993     No match
1994     qqq\nabc\nzzz
1995     No match
1996    
1997     /\A(.)*\Z/s
1998     abc\ndef
1999     0: abc\x0adef
2000     1: f
2001    
2002     /\A(.)*\Z/m
2003     *** Failers
2004     0: *** Failers
2005     1: s
2006     abc\ndef
2007     No match
2008    
2009     /(?:b)|(?::+)/
2010     b::c
2011     0: b
2012     c::b
2013     0: ::
2014    
2015     /[-az]+/
2016     az-
2017     0: az-
2018     *** Failers
2019     0: a
2020     b
2021     No match
2022    
2023     /[az-]+/
2024     za-
2025     0: za-
2026     *** Failers
2027     0: a
2028     b
2029     No match
2030    
2031     /[a\-z]+/
2032     a-z
2033     0: a-z
2034     *** Failers
2035     0: a
2036     b
2037     No match
2038    
2039     /[a-z]+/
2040     abcdxyz
2041     0: abcdxyz
2042    
2043     /[\d-]+/
2044     12-34
2045     0: 12-34
2046     *** Failers
2047     No match
2048     aaa
2049     No match
2050    
2051     /[\d-z]+/
2052     12-34z
2053     0: 12-34z
2054     *** Failers
2055     No match
2056     aaa
2057     No match
2058    
2059     /\x5c/
2060     \\
2061     0: \
2062    
2063     /\x20Z/
2064     the Zoo
2065     0: Z
2066     *** Failers
2067     No match
2068     Zulu
2069     No match
2070    
2071     /(abc)\1/i
2072     abcabc
2073     0: abcabc
2074     1: abc
2075     ABCabc
2076     0: ABCabc
2077     1: ABC
2078     abcABC
2079     0: abcABC
2080     1: abc
2081    
2082     /(main(OPT)?)+/
2083     mainmain
2084     0: mainmain
2085     1: main
2086     mainOPTmain
2087     0: mainOPTmain
2088     1: main
2089     2: OPT
2090    
2091     /ab{3cd/
2092     ab{3cd
2093     0: ab{3cd
2094    
2095     /ab{3,cd/
2096     ab{3,cd
2097     0: ab{3,cd
2098    
2099     /ab{3,4a}cd/
2100     ab{3,4a}cd
2101     0: ab{3,4a}cd
2102    
2103     /{4,5a}bc/
2104     {4,5a}bc
2105     0: {4,5a}bc
2106    
2107     /^a.b/
2108     a\rb
2109     0: a\x0db
2110     *** Failers
2111     No match
2112     a\nb
2113     No match
2114    
2115     /abc$/
2116     abc
2117     0: abc
2118     abc\n
2119     0: abc
2120     *** Failers
2121     No match
2122     abc\ndef
2123     No match
2124    
2125     /(abc)\123/
2126     abc\x53
2127     0: abcS
2128     1: abc
2129    
2130     /(abc)\223/
2131     abc\x93
2132     0: abc\x93
2133     1: abc
2134    
2135     /(abc)\323/
2136     abc\xd3
2137     0: abc\xd3
2138     1: abc
2139    
2140     /(abc)\500/
2141     abc\x40
2142     0: abc@
2143     1: abc
2144     abc\100
2145     0: abc@
2146     1: abc
2147    
2148     /(abc)\5000/
2149     abc\x400
2150     0: abc@0
2151     1: abc
2152     abc\x40\x30
2153     0: abc@0
2154     1: abc
2155     abc\1000
2156     0: abc@0
2157     1: abc
2158     abc\100\x30
2159     0: abc@0
2160     1: abc
2161     abc\100\060
2162     0: abc@0
2163     1: abc
2164     abc\100\60
2165     0: abc@0
2166     1: abc
2167    
2168     /abc\81/
2169 nigel 9 abc\081
2170 nigel 3 0: abc\x0081
2171 nigel 9 abc\0\x38\x31
2172 nigel 3 0: abc\x0081
2173    
2174     /abc\91/
2175 nigel 9 abc\091
2176 nigel 3 0: abc\x0091
2177 nigel 9 abc\0\x39\x31
2178 nigel 3 0: abc\x0091
2179    
2180     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)\12\123/
2181     abcdefghijkllS
2182     0: abcdefghijkllS
2183     1: a
2184     2: b
2185     3: c
2186     4: d
2187     5: e
2188     6: f
2189     7: g
2190     8: h
2191     9: i
2192     10: j
2193     11: k
2194     12: l
2195    
2196     /(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
2197     abcdefghijk\12S
2198     0: abcdefghijk\x0aS
2199     1: a
2200     2: b
2201     3: c
2202     4: d
2203     5: e
2204     6: f
2205     7: g
2206     8: h
2207     9: i
2208     10: j
2209     11: k
2210    
2211     /ab\gdef/
2212     abgdef
2213     0: abgdef
2214    
2215     /a{0}bc/
2216     bc
2217     0: bc
2218    
2219     /(a|(bc)){0,0}?xyz/
2220     xyz
2221     0: xyz
2222    
2223     /abc[\10]de/
2224     abc\010de
2225     0: abc\x08de
2226    
2227     /abc[\1]de/
2228     abc\1de
2229     0: abc\x01de
2230    
2231     /(abc)[\1]de/
2232     abc\1de
2233     0: abc\x01de
2234     1: abc
2235    
2236     /a.b(?s)/
2237     a\nb
2238     0: a\x0ab
2239    
2240     /^([^a])([^\b])([^c]*)([^d]{3,4})/
2241     baNOTccccd
2242     0: baNOTcccc
2243     1: b
2244     2: a
2245     3: NOT
2246     4: cccc
2247     baNOTcccd
2248     0: baNOTccc
2249     1: b
2250     2: a
2251     3: NOT
2252     4: ccc
2253     baNOTccd
2254     0: baNOTcc
2255     1: b
2256     2: a
2257     3: NO
2258     4: Tcc
2259     bacccd
2260     0: baccc
2261     1: b
2262     2: a
2263     3:
2264     4: ccc
2265     *** Failers
2266     0: *** Failers
2267     1: *
2268     2: *
2269     3: * Fail
2270     4: ers
2271     anything
2272     No match
2273     b\bc
2274     No match
2275     baccd
2276     No match
2277    
2278     /[^a]/
2279 nigel 9 Abc
2280 nigel 3 0: A
2281    
2282     /[^a]/i
2283 nigel 9 Abc
2284 nigel 3 0: b
2285    
2286     /[^a]+/
2287 nigel 9 AAAaAbc
2288 nigel 3 0: AAA
2289    
2290     /[^a]+/i
2291 nigel 9 AAAaAbc
2292 nigel 3 0: bc
2293    
2294     /[^a]+/
2295 nigel 9 bbb\nccc
2296 nigel 3 0: bbb\x0accc
2297 nigel 9
2298     /[^k]$/
2299     abc
2300     0: c
2301     *** Failers
2302     0: s
2303     abk
2304     No match
2305    
2306     /[^k]{2,3}$/
2307     abc
2308     0: abc
2309     kbc
2310     0: bc
2311     kabc
2312     0: abc
2313     *** Failers
2314     0: ers
2315     abk
2316     No match
2317     akb
2318     No match
2319     akk
2320     No match
2321 nigel 3
2322 nigel 9 /^\d{8,}\@.+[^k]$/
2323     12345678\@a.b.c.d
2324     0: 12345678@a.b.c.d
2325     123456789\@x.y.z
2326     0: 123456789@x.y.z
2327     *** Failers
2328     No match
2329     12345678\@x.y.uk
2330     No match
2331     1234567\@a.b.c.d
2332     No match
2333    
2334     /(a)\1{8,}/
2335     aaaaaaaaa
2336     0: aaaaaaaaa
2337     1: a
2338     aaaaaaaaaa
2339     0: aaaaaaaaaa
2340     1: a
2341     *** Failers
2342     No match
2343     aaaaaaa
2344     No match
2345    
2346 nigel 3 / End of test input /
2347    

webmaster@exim.org
ViewVC Help
Powered by ViewVC 1.1.12