我搜索了许多 Stackoverflow 正则表达式帖子,但找不到我的答案。我正在使用以下内容查找给定$text
字符串中的所有 URL:
$pattern = "#((http|https|ftp|ftps)://)?([a-zA-Z0-9\-]*\.)+[a-zA-Z0-9]{2,4}(/[a-zA-Z0-9=.?&-]*)?#";
(同意可能更精确/更有效/......但这不是问题......但是)。
现在使用此文本输入:
$text = "Website: www.example.com, ";
$text .= "Contact us: http://www.example.com/cu?t=contactus#anchor, ";
$text .= "Email: contact@example.com";
然后一个
preg_match_all($pattern, $text, $matches);
将返回这些:
www.example.com
http://www.example.com/cu?t=contactus
example.com
最后一个example.com
来自电子邮件,我希望能够排除它。
我尝试了很多组合[^@]
,(?!@)
...无济于事,我仍然收到电子邮件结果。
我能做的最好的事情是@
在开头包含一个可选的,这样它就会返回@example.com
,然后我循环我的结果以排除以@
.
有没有更好的解决方案?一个不包含电子邮件子字符串的模式?