匹配Rapidshare链接与正则表达式

时间:2010-01-06 00:01:00

标签: php regex rapidshare

我想在网页上匹配一系列Rapidshare链接。链接看起来像:

http://rapidshare.com/files/326251387/file_name.rar

我写了这段代码:

if(preg_match_all('/http:\/\/\rapidshare\.com\/files\/.*?\/.*?/', $links[1], $links))
{
    echo 'Found links.';
} else {
    die('Cannot find links :(');
}

每次都会重新Cannot find links :(。请注意,我想返回整个匹配,因此它会将页面上的每个Rapidshare链接带回一个数组。

$links[1]也有一个有效的字符串。

任何帮助都将受到赞赏,欢呼。

3 个答案:

答案 0 :(得分:1)

看起来你之前有一个迷路反斜杠

if(preg_match_all('/http:\/\/\rapidshare\.com\/files\/.*?\/.*?/', $links[1], $links))

应该是

if(preg_match_all('/http:\/\/rapidshare\.com\/files\/.*?\/[^\s"']+/', $links[1], $links))

\r是一个回车符)

答案 1 :(得分:1)

有许多非Blackic HTTPS链接到rapidshare.com,您可以在谷歌上找到它们: “https://rapidshare.com/files/”

我建议您更改正则表达式以包含https?:

答案 2 :(得分:0)

为了避免这种疯狂,你要在URL中转义斜杠,我会使用另一个delimiter作为我的正则表达式 - 例如#;这有助于在\之前看到你有太多rapideshare


然后,你可能会看到这样的东西:
(灵感来自你的 - 最后只是改变了一点,因为它没有返回文件的名称;;你可能想要更多地调整这一点,但是,除了一些其他字符,而不仅仅是白色空格,如"

$str = 'blah http://rapidshare.com/files/326251387/file_name.rar blah';
if(preg_match_all('#http://rapidshare\.com/files/(.*?)/([^\s]+)#', $str, $m)) {
    var_dump($m);
}


在这里,您将获得:

array
  0 => 
    array
      0 => string 'http://rapidshare.com/files/326251387/file_name.rar' (length=51)
  1 => 
    array
      0 => string '326251387' (length=9)
  2 => 
    array
      0 => string 'file_name.rar' (length=13)