正则表达式以提取包含在字符串中的URL

时间:2012-12-18 23:03:05

标签: php regex url

  

可能重复:
  How to match URIs in text?
  What is the best regular expression to check if a string is a valid URL?

我需要使用regexp(PHP)从包含许多URL的字符串中提取zip文件的URL。

一个简单的例子应该会有所帮助:

目标:提取网址http://en.wikipedia.org/wiki/Kettle.zip

基本字符串:

/url?q=http://en.wikipedia.org/wiki/Kettle.zip&sa=U&ei=VpnIUP22Js blah /url?q=http://en.wikipedia.org/wiki/Kettle&sa=U&ei=VpnIUP22Js blah /url?q=http://en.wikipedia.org/wiki/Kettle.rar&sa=U&ei=VpnIUP22Js

更新; 让我们说基本字符串是

href =“http://en.wikipedia.org/wiki/Kettle.zip”>有些文字/ a>其他一些文字来自href =“http://google.com/wiki/Kettle”&gt ; / A>

我需要提取 http://en.wikipedia.org/wiki/Kettle.zip

任何方法都可以......正则表达式。

1 个答案:

答案 0 :(得分:1)

不要使用正则表达式。 Regexes不是一个魔术棒,可以解决与字符串相关的所有问题。

使用parse_url()拆分您的网址,然后使用explode拆分&上的查询字符串。

$url = "http://example.com/url?q=http://en.wikipedia.org/wiki/Kettle.zip&sa=U&ei=VpnIUP22Js";
$query = parse_url($url, PHP_URL_QUERY);
print "query is: $query\n";
$args = explode( '&', $query );
print_r( $args );

运行此命令:

query is: q=http://en.wikipedia.org/wiki/Kettle.zip&sa=U&ei=VpnIUP22Js
Array
(
    [0] => q=http://en.wikipedia.org/wiki/Kettle.zip
    [1] => sa=U
    [2] => ei=VpnIUP22Js 
)

从那里走过阵列,找到你想要的那个。