2012-03-20 59 views
0

我试图从css文件下载所有图像。这些图像是在url(https://www...image.png)格式下载CSS文件中的图像

<?php 
$result = file_get_contents("global-61.css"); 
$path = 'found/'; 

preg_match_all('https:\/\/www.[^0-9]+.(png|jpg|jpeg|gif)', $result, $output, PREG_SET_ORDER); 
foreach($output as $item) 
{ 
    copy($item, $path . basename($item)); 
} 
?> 

的链接是从不同的网站 - 但我想我的正则表达式是不正确的。当我尝试运行脚本时,它不匹配任何图像。如果正则表达式没问题,这里可能会出错吗?热链接保护?

回答

2

尝试:

preg_match_all('/\bhttps:\/\/www\.[^0-9]+\.(png|jpg|jpeg|gif)\b/m' 

你失踪的正则表达式的封装元素(/人的),你需要告诉它使用\所以它成为上述逃脱它匹配文本点。

一些改进:

  1. 如果你想匹配的主机没有WWW,你可以WWW之后添加?
  2. 由于KAMELEON博士建议,你也可以匹配HTTPS和HTTP很容易

    preg_match_all('/\bhttps?:\/\/(www)?\.[^0-9]+\.(png|jpg|jpeg|gif)\b/'

+0

哇谢谢你这方面的知识了解正则表达式。正则表达式很混乱...... – Kyle 2012-03-20 02:42:57

+0

你不需要'/ m',它只影响不被使用的'^'和'$'。 – Qtax 2012-03-20 07:05:00

+0

谢谢Qtax,会编辑 – 2012-03-20 07:07:17

2

一些注意事项:

  • 为什么只是“https”。你可以搜索对HTTP/HTTP:http(s)?
  • 最好不要使用[^0-9],像[A-Za-z\-]+会更好
  • “” (点)必须转义

那么,什么是这样的:

http(s)?:\/\/www\.[A-Za-z0-9\-]+\.(png|jp(e)?g|gif)