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