正则表达式从字符串中获取url

时间:2016-10-07 15:52:29

标签: php regex

在php中我正在做一项任务 -
我想要一个像

一样的正则表达式
$str = "this is my friend's website http://example1.com I think it is coll some text example.com some text t.com/2000 some text rs.500 some text http://www some text"

如何在regex的帮助下获取以下内容 -

http://example1.com
example.com
t.com/2000
http://www

必须避免使用rs.500!

实际上我需要这样一个可以满足任何链接的正则表达式

请帮助我

1 个答案:

答案 0 :(得分:2)

这个正则表达式是你正在寻找的(mandatory regex101 link):

(https?:\/\/\S+)|([a-z]+\.[a-z]+(?:\/\S+)?)

基本上将两个正则表达式https?:\/\/\S+[a-z]+\.[a-z]+(?:\/\S+)?置于捕获组中(以便您可以使用全局搜索提取所有URL),然后与OR结合使用。

https?:\/\/\S+通过匹配找到以http://https://为前缀的网址:

  • 字符串“http”字面上为http,后跟
  • 可选的“s”s?后跟
  • 冒号和两个正斜杠:\/\/,然后是
  • 一个或多个非空白字符\S+

如果https?:\/\/\S+不匹配,则[a-z]+\.[a-z]+(?:\/\S+)?会启动,并找到前缀为http://https://且其网址为顶级域名不包含匹配的数字:

  • 一个或多个小写字母[a-z]+,后跟
  • \.,后跟
  • 一个或多个小写字母[a-z]+,后跟
  • 一个可选组,由...组成
    • 正斜杠\/,后跟
    • 一个或多个非空白字符\S+