提取 URL 的正则表达式

有个朋友问我一个在复杂文本中提取 URL 的正则表达式,在网上搜索了一下,鼓捣了好久,综合了多方资源,写出这么一个正则表达式:

加上点注释,我们来分析下:

于是能看懂了么?

测试了些正常的 URL,都很正确。

  • http://orzfly.com/
  • http://orzfly:8080/orztech.php?tel=123456
  • https://orzfly.com/
  • http://www.williamlong.info/script/common.js
  • relatedlinks.googlelabs.com/client/client.js?url=shcom&referrer=&relatedlinks_id=10065_599317151813484&title=
  • ……

测试了些不正确的 URL:

  • www.1a.exe:没有匹配,正确。
  • www.1@22.ci:没有匹配,正确。
  • 123%ww.com:没有匹配,正确。
  • www.煞笔.com:没有匹配,不正确。应该能匹配,但是由于支持国际域名难度较大,抛弃。
  • www.a/b.cc:没有匹配,正确。
  • g.cn/a/b.exe:没有匹配,正确。
  • www.g.cnmmmg.cnlllhttp:123.123.123.123:80hhhwok.cshdn.comsdfsdf:能完整匹配,但是这个肯定不正确。求高人指点。

参考资料:

10 thoughts on “提取 URL 的正则表达式

  1. xiao3

    你知道怎么弄那个Ajax提交评论的效果么?
    嘻嘻,你也用这个在链接前面加图标的效果啊?是使用的Google缓存的那个服务么?

    1. orzFly Post author

      @xiao3 , Ajax提交评论?不清楚。我的博客有么?我甚至连这个都不知道。

      那个链接前加图标的效果,是直接从你代码里挖掉的……所以呢,也是用的Google缓存的。倘若直接输出 http://omgxxx.xxx/favicon.ico 的图片这样加载速度太慢了。……这个代码有很多问题,很多不该加图标的也加了……

  2. hapi

    貌似我打开Emeditor自定义宏,输入你说的这正则,出现语法错误。
    我别的地方找来的正则,貌似很管用,有2种分别如下。

    ([w-]+.)+[w-]+(/[w- ./?%&=]*)?

    http(s)?://([w-]+.)+[w-]+(/[w- ./?%&=]*)?

  3. guaishou

    你好,在em搜索框里的结果很准确,用这个宏http://www.cppblog.com/woaidongmao/archive/2010/10/02/65720.html就会出现错误了。

  4. Pingback: 求一个提取网址的正则表达式 - C# - 开发者

  5. woyaowenzi

    在NotePad++中使用了一下,notepad++直接Crash了。貌似不支持Notepad++的一些规则。

Comments are closed.