2012-05-31 58 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 –