删除部分电子邮件并删除重复项

时间:2018-07-20 12:16:52

标签: php file

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

2 个答案:

答案 0 :(得分:1)

您可以通过三种方式进行操作......

正则表达式

$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

答案 1 :(得分:0)

最终,这是解决问题的代码

<?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);
$domains = [];
if($result) {
    foreach(array_unique($matches[0]) as $email) {
    $domain = strstr($email, '@', false);
    $domain1 = str_replace('@', '', $domain);
    $domains[$domain1] = $domain1;
} 
asort($domains);
foreach($domains as $domain) {
    echo $domain . '<br />';
}
}