2012-03-20 58 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)