时间:2021-07-01 10:21:17 帮助过:5人阅读
^http:\/\/[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
),但是有很多网址不能匹配到http://www.sz.gov.cn/cn/hdjl/zxts/dfyj/
boolean false
(意思就是这不是个网址)((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
网上找了个匹配网址的正则表达式(^http:\/\/[_a-zA-Z0-9-]+(.[_a-zA-Z0-9-]+)*$
),但是有很多网址不能匹配到
比如:
网址:http://www.sz.gov.cn/cn/hdjl/zxts/dfyj/
执行结果:boolean false
(意思就是这不是个网址)
求一个能匹配任意网址的正则表达式(执行效率越快越好)。
谢谢
找了一个可用的:((http|ftp|https):\/\/)?[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?
执行效率不知道有没有更快的
这有一个 Markdown 的作者之一写的正则表达式(原文在这)。他把这个表达式都改进了好几年了,应该比较全面而且保险:
(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))
测试代码:
]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”‘’]))@';
var_dump( preg_match($regex, 'http://segmentfault.com/q/1010000000584340') ); //true
除非涉及的数据量特别特别大,否则单单一个正则表达式还达不到影响性能的程度吧。基本不必担心效率问题的。
/^((http|ftp|https):\/\/)?[\w-_.]+(\/[\w-_]+)*\/?$/
这个可以匹配你上给的网址。
其实正则怎么写,还是得看你要匹配什么样的url。
既然是任意類型的網址,那就無所謂協議。/[a-z]+:\/\/[a-z0-9_\-\/.%]+/i