首页 > 解决方案 > 删除部分电子邮件并删除重复项

问题描述

我有一个包含各种名称、标签和电子邮件的文本文件。我已设法提取数据,以便仅电子邮件显示在列表中。现在我需要删除直到 @ 符号的字符串数据。换句话说,应该只留下域部分(如 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() 函数,因为这不是一个数组。有任何想法吗?

标签: phpfile

解决方案


你可以通过三种方式实现......

正则表达式

$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

推荐阅读