2012-10-16 57 views
1

可能重複:
RegEx match open tags except XHTML self-contained tags的preg_match反覆HTML內容

我想TU從外部網站拉一些數據。 HTML字符串看起來像這樣(沒有的img標籤之間的空格/行符):

<img class="car-type231" src="/2f36b523259e9871bfade01983c9cc91.png" title="toyota"/> 
<img class="car-type211" src="/0abc9b3ae3ba4bbcb6d3593fad6c1450.png" title="nissan"/> 
<img class="car-type311" src="/4528e30bb510b4289121b4c70cb48ea3.png" title="bmw"/> 
<img class="car-type332" src="/64575fee55553623896c7fd587a33ac3.png" title="mercedes"/> 
<img class="car-type544" src="/a4f32dd95976d76704795c471c9a08b8.png" title="audi"/> 
etc... 

我想拉每一個SRC路徑,並創建一個數組,應該是這樣的:

$matches[0] = '/2f36b523259e9871bfade01983c9cc91.png'; 
$matches[1] = '/0abc9b3ae3ba4bbcb6d3593fad6c1450.png'; 
etc... 

我試着用preg_match和這個參數:'#src="(.*?)"#',但它不起作用,因爲它返回所有的html。

任何幫助,將不勝感激!

回答

4

The pony he comes...

使用解析器如DOM文檔:

$dom = new DOMDocument(); 
$dom->loadHTML($html); 
$imgs = $dom->getElementsByTagName('img'); 
$l = $imgs->length; 
$srcs = []; // Array() in earlier versions of PHP 
for($i=0; $i<$l; $i++) { 
    $srcs[$i] = $imgs->item($i)->getAttribute("src"); 
} 
+0

我會與小馬回答,但你第一次做到了!我也認爲你不應該使用正則表達式來解析html –

0

你會得到很多痛苦的想拉這個東西了使用正則表達式,而不是使用適當的文件/ HTML解析器,但我個人認爲在這種情況下使用RegEx沒有問題,因爲HTML非常簡單 - 而且您的目標也很簡單。

試試這個:

preg_match_all('#src="(.*?)"#',$htmlstring,$matches); 
print_r($matches[1]); //the array you want 
+0

你也應該看看http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – Baba

+0

只有這個人沒有試圖解析所有HTML的複雜性 - 他試圖從一個非常重複的HTML中取出所有src =「」屬性,我認爲它總是會一樣的。使用上述解決方案沒有任何問題。 –

+0

關於該問題的第二條評論完全反映了我的想法 - http://stackoverflow.com/a/1733489/755900 –