php - 删除部分电子邮件并删除重复项
问题描述
我有一个包含各种名称、标签和电子邮件的文本文件。我已设法提取数据,以便仅电子邮件显示在列表中。现在我需要删除直到 @ 符号的字符串数据。换句话说,应该只留下域部分(如 domain.com)。
然后,我需要删除重复的域。我将如何做这个练习的最后一点?这是我到目前为止的 php 代码:
<?php
$string = file_get_contents('text.txt');
$pattern = '/[a-z0-9_\-\+]+@[a-z0-9\-]+\.([a-z]{2,3})(?:\.[a-z]{2})?/i';
$result = preg_match_all($pattern, $string, $matches);
if($result) {
foreach(array_unique($matches[0]) as $email) {
echo $email . "<br />";
}
}
编辑:好的,所以我在 if 语句中添加了以下代码:
if($result) {
foreach(array_unique($matches[0]) as $email) {
$domain = strstr($email, '@', false);
$domain1 = str_replace('@', '', $domain);
echo $domain1 . '<br />';
}
}
这给了我电子邮件的域部分。现在我需要 1. 删除所有重复项和 2. 按域名字母顺序排序
似乎我不能使用 array_unique() 函数,因为这不是一个数组。有任何想法吗?
解决方案
你可以通过三种方式实现......
正则表达式
$email = 'someone@domain.com';
preg_match("/\@(.*)/", $email, $domain);
echo $domain[1];
使用爆炸
$email = 'someone@domain.com';
$domain = explode ("@", $email);
echo $domain[1];
使用 substr
$email = 'someone@domain.com';
$domain = substr($email, strpos($email, "@") + 1);
echo $domain;
以上所有都给出了相同的输出。
domain.com
推荐阅读
- amazon-web-services - 通过负载均衡器过滤 *.my-site.com/ 流量并撤消其余流量
- c - STM32 - 为什么代码没有像它应该的那样修改寄存器?
- javascript - 清除包含特定字符串 discord.js 的消息
- android - 如何在颤振中使用 onesignal 修复警告 - 警告:[unchecked] unchecked cast
- python-3.x - 使用 reddit 的 api 如何下载选定的线程?
- sql - 在数据库中的现有表上启用系统版本控制
- google-sheets - 如何在不同范围内的arrayformula中求和
- javascript - 在 inversify 中注入异步依赖
- checkbox - 如何更改复选框小部件的图标?
- reactjs - Reactjs 应用部署问题