2015-11-23 24 views
6

Ich möchte aus einem String E-Mail-Adresse extrahieren, zum Beispiel:Extract E-Mail-Adresse aus string - php

<?php // code 
$string = 'Ruchika <[email protected]>'; 
?> 

Aus der obigen Zeichenfolge möchte ich nur E-Mail-Adresse erhalten [email protected].

Bitte, empfehlen, wie dies zu erreichen ist.

+0

Sie sollten phps preg * Funktionen nutzen, dies zu tun. Es ist keine einfache Aufgabe, einen regulären Ausdruck zu erstellen, der jeder einzelnen E-Mail-Adresse entspricht. Weitere Informationen finden Sie in dieser Diskussion: http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email -Adresse – maxhb

Antwort

9

Versuchen Sie, diese

<?php 
    $string = 'Ruchika <[email protected]>'; 
    $pattern = '/[a-z0-9_\-\+\.][email protected][a-z0-9\-]+\.([a-z]{2,4})(?:\.[a-z]{2})?/i'; 
    preg_match_all($pattern, $string, $matches); 
    var_dump($matches[0]); 
?> 

demo here

Zweite Methode

<?php 
    $text = 'Ruchika <[email protected]>'; 
    preg_match_all("/[\._a-zA-Z0-9-][email protected][\._a-zA-Z0-9-]+/i", $text, $matches); 
    print_r($matches[0]); 
?> 

Siehe demo here

+0

Danke! Es funktioniert perfekt für mich :) –

+0

froh, dass es dir geholfen hat. in Betracht ziehen, die Antwort zu akzeptieren :) –

+1

FYI - funktioniert nur auf grundlegenden Domain-Namen wie gmail.com. Es funktioniert mit einer E-Mail-Adresse von einem Mail-Sub-Domain-Namen wie [email protected] –

1

Schauen Sie sich diese beiden Beiträge sehen Stackoverflow:

No. 1 Für weitere Informationen.

No. 2 Für weitere Informationen.

1

versuchen Sie diesen Code.

<?php 

function extract_emails_from($string){ 
    preg_match_all("/[\._a-zA-Z0-9-][email protected][\._a-zA-Z0-9-]+/i", $string, $matches); 
    return $matches[0]; 
} 

$text = "blah blah blah blah blah blah [email protected]"; 

$emails = extract_emails_from($text); 

print(implode("\n", $emails)); 

?> 

Dies wird funktionieren.

Danke.

0

Diese auf Niranjan Antwort beruht, vorausgesetzt, Sie die Eingabe E-Mail innerhalb < und>) eingeschlossen haben. Anstatt einen regulären Ausdruck zu verwenden, um die E-Mail-Adresse zu erfassen, erhalte ich hier den Textteil zwischen den Zeichen < und>. Ansonsten verwende ich die Zeichenfolge, um die gesamte E-Mail zu erhalten. Natürlich habe ich die E-Mail-Adresse nicht überprüft, dies hängt von Ihrem Szenario ab.

<?php 
    $string = 'Ruchika <[email protected]>'; 
    $pattern = '/<(.*?)>/i'; 

    preg_match_all($pattern, $string, $matches); 
    var_dump($matches); 
    $email = $matches[1][0] ?? $string; 
    echo $email; 
?> 

Hier ist a forked demo.

Natürlich, wenn meine Annahme nicht korrekt ist, wird dieser Ansatz fehlschlagen. Aber basierend auf Ihrer Eingabe, glaube ich, wollten Sie E-Mails extrahieren, die in < und> chars enthalten sind.

1

Parsen von E-Mail-Adressen ist eine wahnsinnige Arbeit und würde zu einem sehr komplizierten regulären Ausdruck führen. Betrachten Sie zum Beispiel diesen offiziellen regulären Ausdruck zum Abfangen einer E-Mail-Adresse: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Erstaunlich, oder?

Stattdessen gibt es eine Standard-PHP-Funktion, um dies zu tun: mailparse_rfc822_parse_addresses() und dokumentiert here.

Er nimmt eine Zeichenfolge als Argument und gibt ein Array assoziativen Arrays mit den Tasten display, address und is_group zurück.

So

$to = 'Wez Furlong <[email protected]>, [email protected]'; 
var_dump(mailparse_rfc822_parse_addresses($to)); 

ergäbe:

array(2) { 
    [0]=> 
    array(3) { 
    ["display"]=> 
    string(11) "Wez Furlong" 
    ["address"]=> 
    string(15) "[email protected]" 
    ["is_group"]=> 
    bool(false) 
    } 
    [1]=> 
    array(3) { 
    ["display"]=> 
    string(15) "do[email protected]" 
    ["address"]=> 
    string(15) "[email protected]" 
    ["is_group"]=> 
    bool(false) 
    } 
}