Bestimmten Teil eines Strings auslesen - ereg/spli

Hallo,

ich hab n Textfile in welchen sich eine Mailadresse befindet, welche ich auslesen muss um damit einen Ordner mit mkdir anzulegen.

Der Aufbau des Texfiles sieht in etwa immer gleich aus etwa so -->
sdfsdfsdfsdfsdfsdfsdfsf
Return-Path:
Delivered-To: sdfsadfsdfsafsdfsadfsadfsadfsdf

jetzt muss ich „Return-Path: Delivered-To:“

den Rest abschneiden.

Da die Mail-Adresse klar immer unterchiedlich lang is habe ich mit

$array[14] = substr($array[14], 23, -3); 

keine Chance.

Hab ich da ne Möglichkeit dies mit ereg oder split hinzu bekommen? Oder jemand ne bessere oder überhaupt ne Idee?

Gruß Rolf

Hoi…

also grundsätzlich sollte preg_match emailadressen aus Strings extrahieren können.
d.h. je nachdem ob Dir das als Array oder String vorliegt müsstest Du es eben auf jeden Schritt anwenden oder eben das erste gefundene verwenden (Sofern vorher nicht noch eine Delivered-to oder andere emailadresse drinsteckt…
Allerdings kannst Du in Deinem Fall ja die Bedingung auf den

"Return-Path: ausweiten...

Leider kenne ich mich nicht ausreichend mit regex aus um Dir das zu formulieren...

Vielleicht kannst Du Dir aber auch einfach selbst eine Regel bauen um es zu finden :smile:

Dazu erst mal ein Link:
http://snipplr.com/view/18759/check-for-valid-email-address/
Auf der Seite kannst Du - falls Dir der Code da nichts hilft auch nach anderen Snipplets suchen, die Dir ggf weiterhelfen werden...

ein paar weitere Hinweise weiter unten...



> jetzt muss ich "Return-Path: Delivered-To:"  
> den Rest abschneiden.  
> Da die Mail-Adresse klar immer unterchiedlich lang is habe ich  
> mit 
> 
> $array[14] = substr($array[14], 23, -3); 
> 
>   
> keine Chance.


Nun... Eine leicht verständliche Herangehensweise ist, dass Du nach dem vorkommen eines Dir bekannten und immer gleichen Strings suchst - den hast Du gegeben mit "Return-Path:".
Also ermittelst Du davon nun einfach die Position (strpos).
Wenn Du die Position hast, dann schneidest Du alles, was vorher kommt ab (substr), und suchst in Folge das bzw die Zeichen, das Deine emailadresse eingrenzt.
In Deinem Fall sind das die Zeichen 

    \>

 und 

    .
    Mit der weiteren verwendung von substr kannst Du das Ergebnis dann eben weiter kürzen und das Ergebnis ggf mit der Verlinkten Funktion auf validität prüfen.
    Es ist sicherlich nicht die eleganteste und auch nicht die performanteste Art dies zu tun - aber es ist die, die ich für am leichtesten Nachvollziehbar halte :wink:
    
    Grüße
    Munich

Okokok,

also ich geh folgendermassen vor -->

Ich les das Text-File ein mit

$datei = "C:/test/test.txt"; // Name der Datei
 $array = file($datei); // Datei in ein Array einlesen
 echo "
";

Dann suche ich über strpos meinen „festen“ Text - nehme den Text der ab da bis zu einem anderen „festen“ Text steht und „extrahiere“ mir das raus in eine Variable oder Array …

Versteh ichs richtig?

Gruß Rolf

nicht ganz…

$datei = „C:/test/test.txt“; // Name der Datei
$array = file($datei); // Datei in ein Array einlesen
echo "
";

Dann suche ich über strpos meinen „festen“ Text - nehme
den Text der ab da bis zu einem anderen „festen“ Text steht
und „extrahiere“ mir das raus in eine Variable oder Array …

wenn Du ein Array hast, dann musst Du entweder das Array zum String machen (implode) oder alle Elemente des Arrays einzeln prüfen.
Nachdem das aber relativ weit oben stehen dürfte würde ich da einfach eine kleine schleife bauen, die dann aussteigt, wenn der betreffende Text gefunden wurde (ausser es muss mehr gefunden werden - etwa bei weitergeleiteten Mails mit weiteren Headern weiter unten)

Wenn Du also file bzw das daraus resultierende Array verwendest musst Du darauf achten, dass sowohl das „feste Zeichen“ davor, wie auch das danach noch in der gleichen Zeile stehen…

ansonsten hast Du es richtig erfasst :smile:

Grüße
Munich

1 Like