Avatar billede C:\> Juniormester
14. september 2003 - 18:31 Der er 5 kommentarer og
1 løsning

Regular Expressions

Jeg er kørt lidt fast med de regulære udtryk og kryber nu til korset.
Jeg vil gerne have hevet konto eller email adressen ud af en tekststreng, som f.eks. kunne se sådan ud:

Sep 12 00:18:05 zamm sendmail[17038]: h8BMI5H17038: from=root, size=406, class=0, nrcpts=1, msgid=<200309112218.h8BMI5H17038@zamm.dk>, relay=root@localhost
Sep 12 03:45:57 zamm sendmail[18789]: h8C1juj18789: from=<errors-phpclases=zamm.dk@phpclasses.org>, size=7495, class=-60, nrcpts=1, msgid=<20030912024301.5070.errors-phpclases--mm-dk@phpclasses.org>, proto=SMTP, daemon=MTA, relay=ftp.linux.pt [194.65.79.226]

Altså efter from=  og indtil ,
evt. < og > må gerne fjernes.
Hvis du også lige kan hive size= værdien ud, vil jeg blive mægtig glad, da det hele skal ende op med en sammentælling af antal bytes pr. email konto eller adr.

Leif.,
Avatar billede C:\> Juniormester
14. september 2003 - 18:34 #1
Eksemplet skal læses som 2 linier:

Sep 12 00:18:05 zamm sendmail[17038]: h8BMI5H17038: from=root, size=406, ...

Sep 12 03:45:57 zamm sendmail[18789]: h8C1juj18789: from=<errors-phpclases=zamm.dk@phpclasses.org>, size=7495, ...
Avatar billede _darkstar_ Nybegynder
14. september 2003 - 18:37 #2
Så er det

from=([^<]*<)?([^,]+)>?

Altså

ereg("from=([^<]*<)?([^,]+)>?", $tekststrengen, $resultatet);

hvorefter resultatet er i $resultatet.
Avatar billede _darkstar_ Nybegynder
14. september 2003 - 18:40 #3
...øvrige felter hentes ud analogt. F. eks. vil

ereg("size=([^,]+).+from=([^<]*<)?([^,]+)>?", $tekststrengen, $resultatet);

hente både størrelse og from-felt ud. Du kan godt få den til at kigge i to linier på samme tid, men jeg har glemt hvad flaget hedder.

Tag et kig på http://dk2.php.net/manual/en/ref.pcre.php
Avatar billede erikjacobsen Ekspert
14. september 2003 - 18:44 #4
Et andet eksempel ... jeg går ud fra du læser linie for linie, og selv
kan modificere den del.

  $fil[]="Sep 12 00:18:05 zamm sendmail[17038]: h8BMI5H17038: from=root, size=406, ...";
  $fil[]="Sep 12 03:45:57 zamm sendmail[18789]: h8C1juj18789: from=<errors-phpclases=zamm.dk@phpclasses.org>, size=7495, ...";

  foreach ($fil as $linie) {
    if (preg_match('/from=<?(.*?)>?,.*?size=(\d+)/',$linie,$reg)) {
      print "match: $reg[1] $reg[2]<br>\n";
    }
  }
Avatar billede C:\> Juniormester
14. september 2003 - 18:54 #5
>erikjacobsen - Den der lige i øjet og til at putte direkte ind i koden.  Kan jeg få et svar.
Avatar billede erikjacobsen Ekspert
14. september 2003 - 19:13 #6
oki
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester