preg_match_all 无法使用 html 标签

preg_match_all not working with html tags

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

只有一个 table 只有一个标签 <tbody>,我想从这个 table

中获取所有行

我尝试这样做

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

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

但是没有人工作

有了 PCRE 和 Regex 库应该没问题

不知道是什么问题,求助

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

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

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

71220

但我通过点击进入该网站并复制源代码然后手动计算的真实代码大约是 1787 行。

这是什么意思?

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

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