2015-11-23 10 views
6

Chcę, aby wyodrębnić adres e-mail z ciągiem, na przykład:Extract adres e-mail z łańcucha - php

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

Z powyższego napisu Chcę tylko, aby uzyskać adres email [email protected].

Prosimy, jak to osiągnąć.

+0

Należy użyć phps preg * funkcje, aby to zrobić. Budowanie wyrażenia regularnego, które pasuje do każdego adresu e-mail nie jest zadaniem łatwym, zobacz szczegóły w tej dyskusji: http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email -address – maxhb

Odpowiedz

9

Spróbuj

<?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]); 
?> 

zobaczyć demo here

Druga metoda

<?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]); 
?> 

Zobacz demo here

+0

Dziękujemy! Działa to idealnie dla mnie :) –

+0

cieszę się, że ci pomogło. rozważ zaakceptowanie odpowiedzi :) –

+1

FYI - działa tylko w przypadku podstawowych nazw domen, takich jak gmail.com. Będzie działać na adres e-mail z nazwy subdomeny poczty, takiej jak [email protected] –

1

spróbuj tego kodu.

<?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)); 

?> 

To zadziała.

Dzięki.

0

ta opiera się na odpowiedzi Niranjan za, zakładając, że masz email wejście zamknięte w < and> znaków). Zamiast używać wyrażeń regularnych do przechwytywania adresu e-mail, tutaj otrzymuję część tekstu między znakami < i>. W przeciwnym razie używam ciągu znaków, aby uzyskać cały e-mail. Oczywiście nie dokonałem żadnej weryfikacji na adres e-mail, to będzie zależeć od twojego scenariusza.

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

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

Oto a forked demo.

Oczywiście, jeśli moje założenie nie jest poprawne, to takie podejście zakończy się niepowodzeniem. Ale w oparciu o Twój wkład myślę, że chciałeś wyodrębnić e-maile zawarte w < i> chars.

1

Analizowanie adresów e-mail jest szaloną pracą i może powodować bardzo skomplikowane wyrażenia regularne. Na przykład rozważ to oficjalne wyrażenie regularne, aby złapać adres e-mail: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Niesamowite prawo?

Zamiast tego istnieje standardowa funkcja php do wykonania tej czynności o nazwie mailparse_rfc822_parse_addresses() i udokumentowana here.

Przyjmuje ciąg jako argument i zwraca tablicę asocjacyjnej tablicy z wyświetlaniem klawiszy, adresem i grupą is_group.

Więc

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

przyniósłby:

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) "[email protected]" 
    ["address"]=> 
    string(15) "[email protected]" 
    ["is_group"]=> 
    bool(false) 
    } 
}