【问题标题】:PHP preg_match_all - how to get a content from HTML?PHP preg_match_all - 如何从 HTML 中获取内容?
【发布时间】:2012-05-31 11:26:12
【问题描述】:

$Content 包含 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 '('

你们能帮帮我吗? 编辑:$contents = curl_exec ($ch)

已解决:该错误是由于 CURLed 网站上的 HTML 错误造成的:

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

代替:

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

我没想到有人会写错 HTML。谢谢大家帮忙!

【问题讨论】:

标签: php html regex


【解决方案1】:

您忘记了第一个分隔符 (@):

$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
        )

)
*/

【讨论】:

  • 谢谢,但现在我看到一个空数组:array(2) { [0]=> array(0) { } [1]=> array(0) { } }
  • $content 看起来像这样:somehtml Artur $2000 somehtml Mark $1000
  • 换句话说:当我回显 $contents 时,我看到了从 CURL 获得的所有 HTML。
【解决方案2】:

你应该把这个符号“|”放在你的正则表达式的开头和结尾:

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

【讨论】:

  • 我仍然看到:array(2) { [0]=> array(0) { } [1]=> array(0) { } } 内容包含来自 CURL 的 html 文档:$contents = curl_exec ($ch);
  • 您应该使用它从 php $contents = file_get_contents("path/to/your/domain"); 中的任何站点的内容中获取数据;
  • 不幸的是,我需要发送 POST[id] 来查看该站点的内容,这就是我在这里使用 CURL 的原因
  • 您的 $contents 是空数据,您可以尝试回显它!
  • 你需要把它放在你的代码中 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);使用 CURL 从您的帖子页面获取返回数据
猜你喜欢
  • 2012-01-02
  • 1970-01-01
  • 2014-08-21
  • 2016-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 1970-01-01
相关资源
最近更新 更多