【问题标题】:Find links in string在字符串中查找链接
【发布时间】:2011-12-08 20:22:47
【问题描述】:

我找到了一个页面,其中包含测试有效 url 的正则表达式列表。 http://mathiasbynens.be/demo/url-regex

Diego Pernini 的那个似乎是最好的选择。 https://gist.github.com/729294

现在我无法让这个正则表达式在字符串中查找 url。

我想隔离这个字符串中的url:

$string = 'Really digging new the twitter design! http://t.co/71dEuIY8';

这个正则表达式给了我 0

preg_match_all('%^(?:(?:https?|ftp)://)(?:\S+(?::\S*)?@|\d{1,3}(?:\.\d{1,3}){3}|(?:(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)(?:\.(?:[a-z\d\x{00a1}-\x{ffff}]+-?)*[a-z\d\x{00a1}-\x{ffff}]+)*(?:\.[a-z\x{00a1}-\x{ffff}]{2,6}))(?::\d+)?(?:[^\s]*)?$%iu', $string, $match);

当我使用一个只包含一个 url 的字符串时,它确实匹配一个有效的 url:

$string = 'http://t.co/71dEuIY8';

我如何调整这个正则表达式来隔离一个或多个有效的 url,在一个不仅仅是一个 url 的字符串中?

【问题讨论】:

  • 之前问过很多次,先搜索一下。
  • 这些正则表达式不打算用于在字符串中查找 URL,它们旨在验证字符串是否为有效 URL。你究竟想做什么?例如,您想在文本中查找 URL 并将它们转换为链接吗?例如,该正则表达式在www.example.comhttp://www.google.com?q=test 上失败,这两者在任何浏览器的地址栏中都可以正常工作。它还将解析尾随标点符号作为 URL 的一部分。例如。在Go to http://stackoverflow.com/questions! 中,! 将成为 URL 的一部分,这将使您最终进入 404 页面。

标签: php regex url preg-match


【解决方案1】:

您的问题是开头的 ^ 和结尾的 $。 这意味着链接必须以这种方式开始和结束。这就是为什么它匹配孤立的链接而不是字符串。

【讨论】:

  • 这种情况发生在有人刚刚使用 regexp 进行了一些复制/粘贴以进行 URL 验证并尝试将其用于不同目的而没有真正了解该 regexp 的作用。
猜你喜欢
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 2011-01-11
相关资源
最近更新 更多