【问题标题】:preg_match_all not working with html tagspreg_match_all 不适用于 html 标签
【发布时间】:2015-08-22 12:25:59
【问题描述】:

我正在尝试从this page 接收<tbody> 标签的内容。

只有一个表只有一个标签<tbody>,我想从这个表中获取所有行

我尝试这样做

$page = file_get_contents('http://pk.zntu.edu.ua/fakultety-ta-napryamy-pidhotovky/derzhavne-zamovlennya-2011-bakalavr');

preg_match_all("/<tbody>(.+?)<\/tbody>/is", $page, $output_array);

var_dump($output_array);

我收到空数组:

array(2) { [0]=> array(0) { } [1]=> array(0) { } }

我尝试过不同的模式变体,例如

  • /&lt;tbody&gt;(.*?)&lt;\/tbody&gt;/is
  • /&lt;tbody&gt;.+?&lt;\/tbody&gt;/is
  • /&lt;tbody&gt;.*?&lt;\/tbody&gt;/is
  • /&lt;tbody&gt;.+&lt;\/tbody&gt;/is
  • /&lt;tbody&gt;.*&lt;\/tbody&gt;/is

但没有人工作

PCRE 和正则表达式库应该没问题

不知道是什么问题,请帮忙

【问题讨论】:

  • 将带有tbody 标记的内容包含在您在问题中获取的来源中。
  • /&lt;tbody\b[^&gt;]*&gt;(.*?)&lt;\/tbody&gt;/is
  • “尝试不同的变体”本质上只是猜测。 不要在编程时这样做。这是一种可怕的方法。了解您想要做什么,将其分解为步骤,了解语法的含义,然后弄清楚如何用该语法表达您的意图,最后进行测试。
  • 我没有从那个 url 得到任何 tbody :o 你得到什么回应?我刚得到一个
  • 您应该在这里阅读最佳答案:stackoverflow.com/questions/1732348/…

标签: php regex preg-match-all


【解决方案1】:

你的模式很简单,上面的regex应该没问题。但我认为问题来自file_get_contents。我只是尝试计算$page 变量中的行数,我得到了这个

71220

但我通过单击该网站并复制源代码然后手动计数来检查的真实代码,大约是1787 行。

这是什么意思?

这可能意味着您将其存储在$page 变量中的代码与您手动单击该网站时看到的 HTML 代码不同。实际上,当您打开一个网站时,可能会发生很多事情,例如侦听器方法正在工作,但是如果您将这些源代码直接下载到 PHP 变量中,则某些方法可能永远不会执行,这可能会使您得到不完整的 HTML 代码。

请注意,支持我假设的另一个证据是我什至在您的 $page 变量中找不到关键字 tbody

【讨论】:

    【解决方案2】:

    tbody 标签还可以包含属性。因此,您还需要匹配该属性以获取tbody 标记的内容。

    '/<tbody\b[^>]*>(.*?)<\/tbody>/is'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2019-02-22
      • 2013-12-27
      • 2014-05-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多