PHP正则表达式检测网站的URL,而不是电子邮件


PHP regex to detect website URL only and not email

我试过很多regex,但大多数都能检测到电子邮件。

例如,

http://www.google.com检测正常。但是email link也检测到andreweuwhd38@hotmail.com

Regex尝试:

#[-a-zA-Z0-9:%_'+.~'#?&//=]{2,256}'.[a-z]{2,4}'b('/[-a-zA-Z0-9@:%_'+.~'#?&//=]*)?#si
#((http|https|ftp)://('S*?'.'S*?))('s|';|')|']|'[|'{|'}|,|'"|'|:|'<|$|'.'s)#
#[-a-zA-Z0-9@:%_'+.~'#?&//=]{2,256}'.[a-z]{2,4}'b('/[-a-zA-Z0-9@:%_'+.~'#?&//=]*)?#si

我不能使用FILTER_VALIDATE函数,因为我需要捕获url并对其进行更改

我猜这将是一个(相当好的通用正则表达式)为常规url(不使用用户名,端口,unicode字符…)

(ht|f)tp(s?):'/{2}(www'.)?([a-z0-9-]+'.)?([a-z0-9-]+'.)?([a-z]{2,4})([a-z0-9'/?&=_()#-]*)