Beat: MAIL MBOX-Format , Regulärer Ausdruck?

Beitrag lesen

ich bräuchte einen Regulären Ausdruck , um dieses Format zu erkennen
From Gooldogds@artasia.co.kr Wed Apr 04 00:24:53 2007
"/^From *@*              w{3} w{3} d{2} d{2}:d{2}:d{2} d{4}$i/"
       ------------------

Ich habe mir jetzt dieses Pattren gebastelt, bin aber nicht sicher, ob es richtig ist.
$pattern = "=^From (.+) (\w{3}) (\w{3}) (\d{2}) (\d{2}):(\d{2}):(\d{2}) (\d{4})$=iU";
Die Zeilen der Datei werden einzeln damit geprüft.
Es funktioniert, aber das hat ja nicht unbedingt was zu sagen ...

Wenn du zeilenweise einliest
a) welche Garantie hast du, dass eine erste Messag-zeile immer in deinem Format vorliegt? Sprich wie konsistent setzt das Mailprogramm, das diese Einträge schreibt, das Format MBOX um?
Da eine Emailadresse ein ziemlich unberechenbares Format hat, würde ich das so _in Perl_ aufbauen:
(Bin in PHP gänzlich unbewandert).

Es handelt sich um externen Input, Deshalb solltest du alle Felder auf Länge überprüfen.

my $from_format = qr/[A_Za-z0-9.:"'()-]{1,100}@[\w.]{1,100}.[a-z]{2,4}/;
                 ^^^^
                 was hier noch wohl hinzugehört???
oder wenn du sicher bist, dass dein Data nicht kompromitiert sein kann:
my $from_format = qr/\S+/; # None-Whitespace

my ($from, $wday, $month, $day, $time, $year ) =
   ( $line =~ /^
    From \s+               # dein Keywort
    ($from_format) \s+     # from
    (\w{3}) \s+            # wday
    (\w{3}) \s+            # month
    (\d{1,2}) \s+          # day
    (\d{2}:\d{2}:\d{2}) \s+ # time
    (\d{2,4}) \s+          # year
    $/x );
From Gooldogds@artasia.co.kr Wed Apr 04 00:24:53 2007

mfg Beat