我正在寻找与有效的在线网址匹配的正则表达式。
例如:
exmaple.com
http://exmaple.com
https://exmaple.com
www.exmaple.com
http://www.example.com
https://www.example.com
特殊域名和扩展名如:
t.co
example.deals
sh.party
依此类推,但不会匹配所有复杂的内容,例如ftp
,get
查询或2.3.3.1
等网址。
我一直在使用'#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i'
,但它会检测日期,例如3.3.2017
。
我需要这样,因为我将get_headers
应用于每个找到的网址,当我get_headers
为无效网址(如日期)执行时,我得到:
get_headers(http://03.03.2017): failed to open stream: Connection timed out
TL; DR:我正在寻找一个匹配仅网址的正则表达式,您可以get_headers()
开启。
感谢您的帮助!
答案 0 :(得分:2)
我想说Regex不是检查有效URL的最佳解决方案。最好使用FILTER_VALIDATE_URL:
<?php
$url = "https://www.w3schools.com";
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
echo("$url is a valid URL");
} else {
echo("$url is not a valid URL");
}
?>
答案 1 :(得分:1)
#(https?:\/\/)?([a-z0-9_~-]+\.)+[a-z]{2,5}(\/\S*)?#i
编辑:第三次尝试:开始时可选的http或https。在此之后至少有一个域名和一个点,然后是一个2-5个字母的顶级域和一个反斜杠和其他非空格字符的可选尾部。