josef martaler: email-adressen aus string filtern

guten tag !

ich möchte alle email-adressen, die in einem string vorhanden sind, herausfilter können. am liebsten hätte ich nachher alle einzelnen email-adressen in einem array.
vorweg weiss ich schon mal, dass das irgendwie mit regex und ereg funktionieren muss, doch ich blick da nicht ganz durch.

kann mir da jemand weiterhelfen ?

wäre euch sehr dankbar
gruss, josef

  1. Γειά σου, josef!

    ich möchte alle email-adressen, die in einem string vorhanden sind, herausfilter können. am liebsten hätte ich nachher alle einzelnen email-adressen in einem array.

    Dann brauchst du idealerweise die Funktion preg_match_all().

    vorweg weiss ich schon mal, dass das irgendwie mit regex und ereg funktionieren muss, doch ich blick da nicht ganz durch.

    Dazu habe ich vor kurzem das hier geschrieben: https://forum.selfhtml.org/?t=112306&m=709593.

    Sollten noch Fragen offen sein, stelle sie ruhig. ;-)

    Пока!
    Sven aus Bonn

    --
    Do it yourSELF! ;-)
    Selfcode: ie:% fl:( br:> va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:) mo:} zu:) - Selfcode dekodieren - Selfcode-Info
    Athen rückt in Sichtweite. ;-)
    1. vielen dank schonmal für die schnelle hilfe. jetzt habe ich aber noch ein paar probleme:

      ich hab ein normales formular mit dem der string an das script geschickt wird. mein script sieht bis jetzt so aus:

      ---[PHP]---
      <?php
      if ($_POST['submit']) {

      preg_match_all("(([a-z0-9_]|-|>.)+@(([a-z0-9_]|-)+.)+[a-z]{2,4})", $_POST['text'], $ausgabe, PREG_PATTERN_ORDER);

      foreach($ausgabe[0] as $email_now) {
        echo $email_now . "<br>";
          }
      }
      ?>
      ---[/PHP]---

      wenn ich meinem script jetzt als test zum beispiel das

      ---[string]---

      chantimaag8@hotmail.com, csfblackcobra@hotmail.com,

      debsy_1@hotmail.com, hardstylemaster86@hotmail.com, jbaechli@msn.com,
      karolette_89@hotmail.com, krocki_88@msn.com,
      larissa_charmed@hotmail.com, leaminder@hotmail.com,
      liv_gelpke@hotmail.com, mex_meets_schlumpf@hotmail.com,
      manuelatiziani@hispeed.ch, naschu13@hotmail.com,
      raegewoermli@hotmail.com, rahelma@msn.com, rockrockt@hotmail.com,
      roooney_schulthi@hotmail.com, schnuggihaesli_89@hotmail.com,
      sunneschii_60@hotmail.com, tobi.meier@gmx.ch
      Date: Fri, 01 Jul 2005 13:48:03 +0200

      ---[/string]---

      "füttere", kommt als ausgabe das raus:

      ---[ausgabe]---

      chantimaag8@hotmail.com
      csfblackcobra@hotmail.com

      debsy_1@hotmail.com

      hardstylemaster86@hotmail.com
      jbaechli@msn.com

      karolette_89@hotmail.com

      krocki_88@msn.com

      larissa_charmed@hotmail.com

      leaminder@hotmail.com

      liv_gelpke@hotmail.com

      mex_meets_schlumpf@hotmail.com

      manuelatiziani@hispeed.ch

      naschu13@hotmail.com

      raegewoermli@hotmail.com

      rahelma@msn.com
      rockrockt@hotmail.com

      roooney_schulthi@hotmail.com

      schnuggihaesli_89@hotmail.com

      sunneschii_60@hotmail.com

      meier@gmx.ch

      ---[/ausgabe]---

      jetzt möchte ich gerne noch die  ">>>" und sonstige nicht erlaubte zeichen in einer email adresse "verbannt" haben ..
      aufgefallen ist mir auch noch, dass er die letzte adresse "tobi.meier@gmx.ch" nur noch als "meier@gmx.ch" ausgibt.

      vielen dank schon mal im voraus, josef

      1. Γειά σου, josef!

        ich hab ein normales formular mit dem der string an das script geschickt wird. mein script sieht bis jetzt so aus:

        [...]
        preg_match_all("(([a-z0-9_]|-|>.)+@(([a-z0-9_]|-)+.)+[a-z]{2,4})", $_POST['text'], $ausgabe, PREG_PATTERN_ORDER);
        [...]

        Warum so kompliziert? Bei diesen Daten...

        chantimaag8@hotmail.com, csfblackcobra@hotmail.com,

        debsy_1@hotmail.com, hardstylemaster86@hotmail.com, jbaechli@msn.com,
        karolette_89@hotmail.com, krocki_88@msn.com,
        larissa_charmed@hotmail.com, leaminder@hotmail.com,
        liv_gelpke@hotmail.com, mex_meets_schlumpf@hotmail.com,
        manuelatiziani@hispeed.ch, naschu13@hotmail.com,
        raegewoermli@hotmail.com, rahelma@msn.com, rockrockt@hotmail.com,
        roooney_schulthi@hotmail.com, schnuggihaesli_89@hotmail.com,
        sunneschii_60@hotmail.com, tobi.meier@gmx.ch
        Date: Fri, 01 Jul 2005 13:48:03 +0200

        und obiger RegExp kommen selbstverständlich auch Ausgeben wie...

        debsy_1@hotmail.com

        heraus, weil du auch auf > matchst.

        IMHO reicht folgende - von mir anhand deiner Daten kurz erprobte - RegExp in deinem Fall aus:

        /([a-zA-Z0-9._-]+)@([a-zA-Z0-9._-]+).([a-zA-Z0-9._-]+)/

        jetzt möchte ich gerne noch die  ">>>" und sonstige nicht erlaubte zeichen in einer email adresse "verbannt" haben ..

        Wenn du die > nicht im Ergebnis haben möchtest, dürfen sie in deiner RegExp nicht in einer der Klammern stehen, da du dein Ergebnis aus den Teilzeichenketten zusammenstellst, auf die die geklammerten Ausdrücke deiner RegExp matchen.

        aufgefallen ist mir auch noch, dass er die letzte adresse "tobi.meier@gmx.ch" nur noch als "meier@gmx.ch" ausgibt.

        Du matchst in deiner RegExp vor dem @-Zeichen auf den . (Punkt). Der Punkt steht jedoch für ein beliebiges Zeichen (außer dem Newline \n). Um auf einen "richtigen" Punkt zu matchen musst du ihn mit dem Backslash maskieren. So: .

        Пока & Gute Nacht! ;-)
        Sven aus Bonn

        --
        Do it yourSELF! ;-)
        Selfcode: ie:% fl:( br:> va:} ls:[ fo:) rl:( n4:{ ss:| de:> js:| ch:) mo:} zu:) - Selfcode dekodieren - Selfcode-Info
        Athen rückt in Sichtweite. ;-)
        1. ich glaubs ja nicht, es funktioniert alles einwandfrei !
          vielen dank nochmals für deine ausführliche hilfe ;-)

          hier noch der code für interessierte & suchende:

            
          <?php  
          if ($_POST['submit']) {  
            preg_match_all("/([a-zA-Z0-9\._-]+)@([a-zA-Z0-9\._-]+)\.([a-zA-Z0-9\._-]+)/", $_POST['text'], $ausgabe, PREG_PATTERN_ORDER);  
            
            foreach($ausgabe[0] as $email_now) {  
              echo $email_now . "<br>";  
            }  
          }  
          ?>  
          
          

          grüsse, josef