【发布时间】: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.com和http://www.google.com?q=test上失败,这两者在任何浏览器的地址栏中都可以正常工作。它还将解析尾随标点符号作为 URL 的一部分。例如。在Go to http://stackoverflow.com/questions!中,!将成为 URL 的一部分,这将使您最终进入 404 页面。
标签: php regex url preg-match