• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP:正则表达式匹配任意类型的网址

php 搞代码 3年前 (2022-01-25) 20次浏览 已收录 0个评论
文章目录[隐藏]

网上找了个匹配网址的正则表达式(^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\-\@?^=%&/~\+#])?
执行效率不知道有没有更快的

本&文来源gao@daima#com搞(%代@#码网@

回复内容:

网上找了个匹配网址的正则表达式(^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 的作者之一写的正则表达式(原文在这)。他把这个表达式都改进了好几年了,应该比较全面而且保险:

<code>(?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`!()\[\]{};:\'".,?«»“”‘’]))</code>

测试代码:

<code><?php//注意,这里把上面的正则表达式中的单引号用反斜杠转义了,不然没法放在字符串里$regex = '@(?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`!()\[\]{};:\'".,?«»“”‘’]))@';var_dump( preg_match($regex, 'http://segmentfault.com/q/1010000000584340') );  //true</code>

除非涉及的数据量特别特别大,否则单单一个正则表达式还达不到影响性能的程度吧。基本不必担心效率问题的。

<code>/^((http|ftp|https):\/\/)?[\w-_.]+(\/[\w-_]+)*\/?$/</code>

这个可以匹配你上给的网址。
其实正则怎么写,还是得看你要匹配什么样的url。

既然是任意類型的網址,那就無所謂協議。/[a-z]+:\/\/[a-z0-9_\-\/.%]+/i


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP:正则表达式匹配任意类型的网址

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址