我有一个文本块,我想从中提取有效的电子邮件地址并将它们放入一个数组中.到目前为止我有......
$string = file_get_contents("example.txt"); // Load text file contents
$matches = array(); //create array
$pattern = '/[A-Za-z0-9_-]+@[A-Za-z0-9_-]+\.([A-Za-z0-9_-][A-Za-z0-9_]+)/'; //regex for pattern of e-mail address
preg_match($pattern, $string, $matches); //find matching pattern
Run Code Online (Sandbox Code Playgroud)
但是,我得到一个只有一个地址的数组.因此,我猜我需要以某种方式循环这个过程.我怎么做?
我想从字符串中提取电子邮件地址,例如:
<?php // code
$string = 'Ruchika <ruchika@example.com>';
?>
Run Code Online (Sandbox Code Playgroud)
从上面的字符串我只想获得电子邮件地址ruchika@example.com.
请注意,建议如何实现这一目标.
我正在尝试创建一个函数,将给定字符串中每个出现的纯文本电子邮件地址转换为它的html化版本.
假设我有以下代码,htmlizeEmails我正在寻找的功能在哪里:
$str = "Send me an email to bob@example.com.";
echo htmlizeEmails($str); // Echoes "Send me an email to <a href="mailto:bob@example.com">bob@example.com</a>."
Run Code Online (Sandbox Code Playgroud)
如果可能,我希望此功能使用该filter_var功能来检查电子邮件是否有效.
有谁知道如何做到这一点?谢谢!
感谢您的答案,我用令人震惊的正则表达式匹配潜在的电子邮件地址,然后,只有当filter_var验证它,它就会被取代.
function htmlizeEmails($text)
preg_match_all('/([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6})/', $text, $potentialEmails, PREG_SET_ORDER);
$potentialEmailsCount = count($potentialEmails);
for ($i = 0; $i < $potentialEmailsCount; $i++) {
if (filter_var($potentialEmails[$i][0], FILTER_VALIDATE_EMAIL)) {
$text = str_replace($potentialEmails[$i][0], '<a href="mailto:' . $potentialEmails[$i][0] .'">' . $potentialEmails[$i][0] .'</a>', $text);
}
}
}
Run Code Online (Sandbox Code Playgroud)