2011-12-08 55 views
-1

我找到了一个包含正则表达式列表的页面,用于测试有效的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*)[email protected]|\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,而不仅仅是一个字符串L·

+2

以前问过很多次,先搜索一下。 – 2011-12-08 20:25:10

+0

查看任何[regexp分析器](http://xenon.stanford.edu/~xusch/regexp/analyzer.html?regex=%5E%28%3F%3A%28%3F%3Ahttps%3F%7Cftp%29% 3A//%29%28%3F%3A%5CS+%28%3F%3A%3A%5CS*%29%[email protected]%7C%5Cd%7B1%2C3%7D%28%3F%3A%5C.%5Cd %7B1%2C3%7D%29%7B3%7D%7C%28%3F%3A%28%3F%3A%5Ba上-Z%5CD%5CX%7B00a1%7D-%5CX%7Bffff%7D%5D + - %3F %29 *%5Ba上-Z%5CD%5CX%7B00a1%7D-%5CX%7Bffff%7D%5D +%29%28%3F%3A%5C。%28%3F%3A%5Ba上-Z%5CD%5CX% 7B00a1%7D-%5CX%7Bffff%7D%5D + - %3F%29 *%5Ba上-Z%5CD%5CX%7B00a1%7D-%5CX%7Bffff%7D%5D +%29 *%28%3F%3A%5C %5Ba上-Z%5CX%7B00a1%7D-%5CX%7Bffff%7D%5D%7B2%2C6%7D%29%29%28%3F%3A%3A%5CD +%29%3F%28%3F%3A %5B%5E%5Cs%5D *%29%3F&env = env_perl) – mario

+0

这些正则表达式不是用来查找字符串中的URL,而是用来验证字符串是否为有效的URL。你究竟想要做什么?比如说,你是否想在文本中查找URL并将它们转换为链接?例如,这个正则表达式在'www.example.com'和'http://www.google.com?q = test'上失败,这两种方法在任何浏览器的地址栏中都可以很好地工作。它还将解析尾部标点符号作为URL的一部分。例如。在'转到http://stackoverflow.com/questions!'中,'!'将成为URL的一部分,这将使你最终成为404页面。 – mercator

回答

1

你的问题是^在开始和$在结束。 这些链接必须以这种方式开始和结束。这就是为什么它匹配孤立的链接,但不是在字符串中。

+2

发生这种情况时,有人刚刚用regexp做了一些URL复制/粘贴的复制/粘贴,并试图将其用于不同的目的,但实际上并未明白该正则表达式的作用。 –