我想在网页上匹配一系列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]
也有一个有效的字符串。
任何帮助都将受到赞赏,欢呼。
答案 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)