1

如何从 php/mysql 中的电子邮件地址中提取网站名称。在这里爆炸太昂贵了,因为我必须为数据库中的数千个数据做这件事

original data
test@example.com
test@example1.com

needed data
example.com
example1.com
4

6 回答 6

3
function getDomain( $email ) {
    return substr( $email, strpos( $email, '@' ) + 1 );
}

$website = getDomain( 'test@example.com' );
于 2012-05-31T16:01:59.073 回答
1

使用 查找@ 的索引,strrpos然后使用 对剩余部分进行子串化substr

$atpos = strrpos($eaddress, '@');
$domain = substr($eaddress, $atpos + 1);
于 2012-05-31T16:00:37.300 回答
1

使用strpos查找@substr以获取它之后的部分。

于 2012-05-31T16:00:41.017 回答
1
foreach(... as $email) {
  $domains[] = substr($email, strpos('@', $email) + 1);
}

这应该可以很好地工作 - 请注意,没有验证strpos返回 false,表示该行不包含 @ 符号。

于 2012-05-31T16:03:15.437 回答
1

如果您在数据库中有很长的电子邮件列表,那么最好从数据库中修剪网站而不是在 Web 服务器上查询应该是

SELECT SUBSTRING_INDEX(email_field, '@', -1) FROM email_table;

因为-1右侧字符串将在第一次出现@后返回

希望有帮助

于 2012-05-31T16:11:07.480 回答
0

只是有点不同:preg_match域名捕获:

<?php
  $address = array("test@example.com","test@example.co.uk","test2@ez.example.com");
  foreach ($address as $email) {
   preg_match(";\b.+@([a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,}))\b;", $email,$matches);
   echo $matches[1];
   echo "\n";
  }
?>

输出:

example.com
example.co.uk
ez.example.com
于 2012-05-31T16:15:24.393 回答