Извлечь адрес электронной почты из строки

Я хочу извлечь адрес электронной почты из строки, например:

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

Из приведенной выше строки я хочу получить только адрес электронной почты [email protected],

Просьба порекомендовать, как этого добиться.

8

Решение

Попробуй это

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

увидеть демо здесь

Второй метод

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

Увидеть демо здесь

18

Другие решения

Парсинг адресов электронной почты — безумная работа, которая может привести к очень сложному регулярному выражению. Например, рассмотрим это официальное регулярное выражение, чтобы поймать адрес электронной почты: http://www.ex-parrot.com/pdw/Mail-RFC822-Address.html

Удивительно верно?

Вместо этого есть стандартная функция php, которая называется mailparse_rfc822_parse_addresses() и задокументировано Вот.

Он принимает строку в качестве аргумента и возвращает массив ассоциативного массива с ключами display, address и is_group.

Так,

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

даст:

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)
}
}
12

Это основано на ответе Ниранджана, при условии, что у вас есть входящий адрес электронной почты, заключенный в < и> персонажи). Вместо использования регулярного выражения для получения адреса электронной почты, здесь я получаю текстовую часть между < и> персонажи. В противном случае я использую строку, чтобы получить всю электронную почту. Конечно, я не проверял адрес электронной почты, это будет зависеть от вашего сценария.

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

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

Вот раздвоенный демо.

Конечно, если мое предположение неверно, то такой подход не удастся. Но, исходя из вашего вклада, я считаю, что вы хотели извлечь письма, вложенные в < и> символы.

2

попробуйте этот код.

<?php

function extract_emails_from($string){
preg_match_all("/[\._a-zA-Z0-9-]+@[\._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));

?>

Это будет работать

Благодарю.

1

Вы также можете попробовать:

email=re.findall(r'\S+@\S+','[email protected]')
print email

где \S означает любой не пробельный символ

-1

Нашел несколько полезных коды как ниже,

<?php
// input: My Test Email <[email protected]>

function get_displayname_from_rfc_email($rfc_email_string) {
// match all words and whitespace, will be terminated by '<'
$name = preg_match('/[\w\s]+/', $rfc_email_string, $matches);
$matches[0] = trim($matches[0]);
return $matches[0];
}
// Output: My Test Email

function get_email_from_rfc_email($rfc_email_string) {
// extract parts between the two parentheses
$mailAddress = preg_match('/(?:<)(.+)(?:>)$/', $rfc_email_string, $matches);
return $matches[1];
}
// Output: [email protected]
?>

Надеюсь, это кому-нибудь поможет.

-1

использовать (мою) функцию getEmailArrayFromString легко извлечь адреса электронной почты из заданной строки.

<?php

function getEmailArrayFromString($sString = '')
{
$sPattern = '/[\._\p{L}\p{M}\p{N}-]+@[\._\p{L}\p{M}\p{N}-]+/u';
preg_match_all($sPattern, $sString, $aMatch);
$aMatch = array_keys(array_flip(current($aMatch)));

return $aMatch;
}

// Example
$sString = '[email protected] XXX [email protected] XXX <[email protected]>';

$aEmail = getEmailArrayFromString($sString);

/**
* array(3) {
[0]=>
string(15) "[email protected]"[1]=>
string(15) "[email protected]"[2]=>
string(15) "[email protected]"}
*/
var_dump($aEmail);
-1
По вопросам рекламы [email protected]