从string-php提取电子邮件地址
我想从字符串中提取电子邮件地址,例如:从string-php提取电子邮件地址,php,Php,我想从字符串中提取电子邮件地址,例如: <?php // code $string = 'Ruchika <ruchika@example.com>'; ?> 从上面的字符串中,我只想获得电子邮件地址ruchika@example.com 请推荐如何实现这一点。试试这个 <?php $string = 'Ruchika < ruchika@example.com >'; $pattern = '/[a-z0-9_\-\+\.]+@
<?php // code
$string = 'Ruchika <ruchika@example.com>';
?>
从上面的字符串中,我只想获得电子邮件地址ruchika@example.com
请推荐如何实现这一点。试试这个
<?php
$string = 'Ruchika < ruchika@example.com >';
$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 < ruchika@example.com >';
preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $text, $matches);
print_r($matches[0]);
?>
请参见尝试此代码
<?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 email2@address.com";
$emails = extract_emails_from($text);
print(implode("\n", $emails));
?>
这会奏效的
谢谢 您也可以尝试:
email=re.findall(r'\S+@\S+','ruchika@example.com')
print email
其中,
\S
表示任何非空白字符这基于Niranjan的回复,假设您的输入电子邮件包含在<?php
$string = 'Ruchika <ruchika@example.com>';
$pattern = '/<(.*?)>/i';
preg_match_all($pattern, $string, $matches);
var_dump($matches);
$email = $matches[1][0] ?? $string;
echo $email;
?>
这是
当然,如果我的假设不正确,那么这种方法将失败。但是根据您的输入,我相信您希望提取包含在
mailparse\u rfc822\u parse\u addresses()
,并有文档记录
它以字符串作为参数,并返回一个关联数组数组,其中包含键display、address和is_group
所以
发现了一些有用的东西,比如贝娄
<?php
// input: My Test Email <some.test.email@somewhere.net>
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: some.test.email@somewhere.net
?>
希望这能对其他人有所帮助。使用(我的)函数从给定字符串中轻松提取电子邮件地址
<?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 = 'foo@example.com XXX bar@example.com XXX <baz@example.com>';
$aEmail = getEmailArrayFromString($sString);
/**
* array(3) {
[0]=>
string(15) "foo@example.com"
[1]=>
string(15) "bar@example.com"
[2]=>
string(15) "baz@example.com"
}
*/
var_dump($aEmail);
这甚至可以在子域上使用。它从文本中提取所有电子邮件
$marches[0]
包含所有电子邮件
$pattern = "/[a-zA-Z0-9-_]{1,}@[a-zA-Z0-9-_]{1,}(.[a-zA-Z]{1,}){1,}/";
preg_match_all ($pattern , $string, $matches);
print_r($matches);
Array
(
[0] => Array
(
[0] => clotdesormakilgehr@prednisonecy.com
[1] => **********@******.co.za.com
[2] => clotdesormakilgehr@prednisonecy.com
[3] => clotdesormakilgehr@prednisonecy.mikedomain.com
[4] => clotdesormakilgehr@prednisonecy.com
)
[1] => Array
(
[0] => .com
[1] => .com
[2] => .com
[3] => .com
[4] => .com
)
)
$marches[0]
包含所有电子邮件
$pattern = "/[a-zA-Z0-9-_]{1,}@[a-zA-Z0-9-_]{1,}(.[a-zA-Z]{1,}){1,}/";
preg_match_all ($pattern , $string, $matches);
print_r($matches);
Array
(
[0] => Array
(
[0] => clotdesormakilgehr@prednisonecy.com
[1] => **********@******.co.za.com
[2] => clotdesormakilgehr@prednisonecy.com
[3] => clotdesormakilgehr@prednisonecy.mikedomain.com
[4] => clotdesormakilgehr@prednisonecy.com
)
[1] => Array
(
[0] => .com
[1] => .com
[2] => .com
[3] => .com
[4] => .com
)
)
一种相对直接的方法是使用PHP内置方法将文本拆分为单词并验证电子邮件:
function fetchEmails($text) {
$words = str_word_count($text, 1, '.@-_1234567890');
return array_filter($words, function($word) {return filter_var($word, FILTER_VALIDATE_EMAIL);});
}
将返回文本变量中的电子邮件地址。基于Priya Rajaram的代码,我对该函数进行了进一步优化,使每个电子邮件地址只显示一次
例如,如果一个HTML文档被解析,您通常会得到所有内容两次,因为邮件地址也会在mailto链接中使用
function extract_emails_from($string){
preg_match_all("/[\._a-zA-Z0-9-]+@[\._a-zA-Z0-9-]+/i", $string, $matches);
return array_values(array_unique($matches[0]));
}
这非常有效,而且非常简单:
$email=strpos($from,'您应该使用phps preg*函数来实现这一点。构建一个匹配每个邮件地址的正则表达式不是一件容易的任务,有关详细信息,请参阅本讨论:在这里,您可以找到一篇有用的文章,从java中的字符串获取所有电子邮件地址,您可以将其修改为用于PHP。为什么不使用filter\u var\u数组($string,FILTER\u VALIDATE\u EMAIL)
建议?仅供参考-仅适用于基本域名,如gmail.com。它将适用于邮件子域名的电子邮件地址,如email@mg.website.comThe第一版(/[a-z0-9\-\+\.]+@[a-z0-9\-]+\.([a-z]{2,4})(?:\.[a-z]{2})?/i)从“foo”中省略了“foo”。bar@example.com"!我认为这个正则表达式更适合查找电子邮件。“[A-Z0-9a-z.\%+-]+@[A-Za-Z0-9.-]+\.[A-Za-z]{2,6}”这里的细节对研究人员来说并没有什么教育意义。另外,在第二种模式中,如果您只使用第一个捕获组,则没有理由使用lookarounds。在第一种模式中,您匹配尾随空间,然后手动修剪尾随空间——这意味着您的模式没有经过优化。这是一种从中获取电子邮件地址的好方法一个电子邮件地址列表,但它在随机自由文本中的电子邮件地址上效果不太好…@ftrotter是的,它不打算这样做,这也不是OP要求的。它旨在从一个类似于邮件信封中的列表中提取电子邮件地址。这是迄今为止最干净的解决方案“i”修饰符是amb我在正则表达式中使用,因为给定的模式中没有字母字符。它不是PHP,所以它不是这个问题的答案。抱歉,但如果电子邮件地址中有句点,那么它将失败。例如:bob。smith@example.com.它只返回“smith@example.com"谢谢。这可以正确处理带句点的电子邮件地址。例如:bob。smith@example.co.whatever.com.列出的其他一些解决方案不起作用。当电子邮件包含非字母字符(如数字)时不起作用。如果它不包含数字,我更正了此问题。您可以按地址添加电子邮件中允许的缺失字符,但这将匹配大多数现实世界的电子邮件地址。您运行strpos($from',这取决于字符串长度,对于较小的字符串,不应该有任何可见的CPU浪费时间,这也是因为另一种解决方案是将结果存储在变量中,这也需要CPU时间。