我正在从文本中的电子邮件中搜索域,电子邮件的“格式”类似于:[mailto:name@domain.com],我正在使用这个基本的正则表达式来查找它们:
$r = '/mailto:.*\]/';
然后我应用这个:
substr(strrchr($matches[1][0], "@"), 1);
最终结果类似于
域名.com]
所以问题是,如何摆脱“]”或更好的方法来从 [mailto:name@domain.com] 内的电子邮件中仅获取域的任何建议?提前致谢!
谢谢!
您可以在正则表达式中尝试前瞻:
$r = '/mailto:.*(?=\])/';
或者只是使用以下命令将其从结果中删除trim:
$final = substr(strrchr($matches[1][0], "@"),1).trim("]");
顺便说一句,你可以只使用lookbehind,所以你不需要使用substr:
$r = '/(?<=\[mailto:[^@]*@).*(?=\])/';
把你的表情改成这样。
$r = '/mailto:[^@]+@[^]]+/';
您可以在不使用substr基本正则表达式的情况下执行此操作。
preg_match_all('/\[mailto:[^@]+@([^@]+)\]/', $str, $matches);
print_r($matches[1]);
查看工作演示
使用 rtrim
'domain.com]'.rtrim("]");
或者您可以尝试从字符串中提取可能的元素:
([\\w-+]+(?:\\.[\\w-+]+)*@(?:[\\w-]+\\.)+[a-zA-Z]{2,7})