1

我想匹配网页上的一系列 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]也有一个有效的字符串。

任何帮助将不胜感激,干杯。

4

3 回答 3

1

看起来你在 rapidshare 之前有一个杂散的反斜杠

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

应该

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

\r是回车符)

于 2010-01-06T00:02:03.357 回答
1

rapidshare.com 有很多非逻辑 HTTPS 链接,您可以在 google 上找到它们:“https://rapidshare.com/files/”

我建议将您的正则表达式更改为包含https?:.

于 2011-07-18T15:18:38.593 回答
0

为了避免你在 URL 中转义斜杠的疯狂,我会为我的正则表达式使用另一个分隔符#-例如;\这将有助于看到你之前有太多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)
于 2010-01-06T00:06:37.483 回答