如何从php中的字符串中提取Web地址

时间:2015-07-30 06:30:55

标签: php regex

我知道如何从url中提取网址,如下所示:

  

https://www.youtube.com/watch?v=j__wz7NtNgM

我可以提取" youtube.com"从它。

我不知道如何从像这样的字符串中提取网址

  

我喜欢的网站是youtube.com snel ip

如何提取" youtube.com"从它?

2 个答案:

答案 0 :(得分:0)

您可以使用不同的功能。 有:

  1. preg_match
  2. trim
  3. parse_url
  4. 我建议你使用parse_url函数,你可以更轻松地使用它。 要使用preg_match函数检查url,您必须声明整个 网址的正则表达式。使用修剪功能,您可以拆开部件, 例如http://xxx部分或本节背后的部分

答案 1 :(得分:0)

即使您在PHP中实现它,它仍然是正则表达式的问题,对吧?

就像完整的网址一样,您可以从任何文本匹配主机名和TLD的片段。前者的优势在于,坦率地说,它以https?开头,这不容易被误解。另一方面,很难分辨出它是否是一个网址或是否有人错过了空间:

  

我喜欢的网站是 youtube.com snel ip并且打击.museum 已关闭,对吧?

一种可能的权衡是检测以协议或dubdubdub开头的地址:

(https?:\/\/([a-z]+\.)*|www\.)([a-z0-9]+\.[a-z]{2,})(\/)?

这有点安全,但它与你的例子不符。因此,另一种不完美的方法是检测链接是否存在某种边界:

(^|\b|\s)([a-z0-9]+\.[a-z]{2,})(\b|\W|$)

您可以通过制作像(com|net)这样的TLD白名单来缩小不匹配,但我不这样做;记得有IDNs。如果你希望支持像http://موقع.وزارة-الاتصالات.مصر/这样的东西,它会变得更复杂一些。

上面的正则表达式确实有效,但它们的目的只是为了进一步调整您的需求并分别提出另一种解决方案。