2

我正在从文本中的电子邮件中搜索域,电子邮件的“格式”类似于:[mailto:name@domain.com],我正在使用这个基本的正则表达式来查找它们:

 $r = '/mailto:.*\]/';

然后我应用这个:

substr(strrchr($matches[1][0], "@"), 1);

最终结果类似于

域名.com]

所以问题是,如何摆脱“]”或更好的方法来从 [mailto:name@domain.com] 内的电子邮件中仅获取域的任何建议?提前致谢!

谢谢!

4

4 回答 4

4

您可以在正则表达式中尝试前瞻:

$r = '/mailto:.*(?=\])/';

或者只是使用以下命令将其从结果中删除trim

$final = substr(strrchr($matches[1][0], "@"),1).trim("]");

顺便说一句,你可以只使用lookbehind,所以你不需要使用substr

$r = '/(?<=\[mailto:[^@]*@).*(?=\])/';
于 2013-10-16T08:05:12.933 回答
2

把你的表情改成这样。

$r = '/mailto:[^@]+@[^]]+/';

您可以在不使用substr基本正则表达式的情况下执行此操作。

preg_match_all('/\[mailto:[^@]+@([^@]+)\]/', $str, $matches);
print_r($matches[1]);

查看工作演示

于 2013-10-16T08:15:25.983 回答
1

使用 rtrim

  'domain.com]'.rtrim("]");
于 2013-10-16T08:09:48.997 回答
0

或者您可以尝试从字符串中提取可能的元素:

([\\w-+]+(?:\\.[\\w-+]+)*@(?:[\\w-]+\\.)+[a-zA-Z]{2,7})

于 2013-10-16T08:11:56.223 回答