2012-05-31 68 views
1

$內容包含HTML文檔PHP preg_match_all - 如何從HTML獲取內容?

$contents = curl_exec ($ch) 

我需要從內容:

<span class="Menu1">Artur €2000</span> 

它反覆幾次,所以我想將它保存到數組

我嘗試這樣做,這樣:

preg_match_all('<span class=\"Menu1\">(.*?)</span>@si',$contents,$wynik2); 

但是我有一個錯誤

Warning: preg_match_all() [function.preg-match-all]: Unknown modifier '('

你們能幫助我嗎? 編輯:$內容= curl_exec($ CH)

解決:錯誤是套管becasue上捲曲的網站錯誤的HTML:中

<span class="Menu1">Content</tr> 

代替:

<span class="Menu1">Content</tr> 

我沒有預計有人會寫錯HTML。謝謝你們的幫助!

+1

它肯定會更好將HTML解析爲DOM,然後從所需元素中提取內容。 –

+0

請參閱[PHP:DOMDocument - Manual](http://php.net/manual/en/class.domdocument.php) – Herbert

回答

6

你忘了第一個分隔符(@):

$contents = '<span class="Menu1">Artur $2000</span> somehtml <span class="Menu1">Mark $1000</span>'; 
preg_match_all('@<span class="Menu1">(.*?)</span>@si', $contents, $wynik2); 

print_r($wynik2); 
/* 
Array 
(
    [0] => Array 
     (
      [0] => <span class="Menu1">Artur $2000</span> 
      [1] => <span class="Menu1">Mark $1000</span> 
     ) 

    [1] => Array 
     (
      [0] => Artur $2000 
      [1] => Mark $1000 
     ) 

) 
*/ 
+0

謝謝,但現在我看到一個空數組: array(2){[0] = > array(0){} [1] => array(0){}} –

+0

嘗試編輯後的正則表達式。我取代'\ 「菜單1 \」'和' 「菜單1」' – flowfree

+0

它仍然是空的 –

0

你應該把在開始這個標誌「|」和正則表達式的結尾:

preg_match_all("|<span class=\"Menu1\">(.*?)</span>|U",$contents,$wynik2); 
+0

我仍然看到: array(2){[0] => array(0){} [1] => array(0){}} 內容包含來自CURL的html文檔: $ contents = curl_exec $ CH); –

+0

你應該使用這個來從任何網站的內容獲取數據在php $ contents = file_get_contents(「path/to/your/domain」); – Kannika

+0

不幸的是,我需要發送POST [ID]來查看該網站的內容,這就是爲什麼我在這裏使用CURL –