preg_match()查找表中的所有值?

时间:2011-02-09 15:23:18

标签: php curl preg-match

嘿伙计们, curl函数返回一个包含常规html的字符串$ widget - &gt;两个div,其中第一个div包含一个表,其中包含<td>个内的各种值。

我想知道什么是最简单和最好的方法,我只能提取<td>内的所有值,所以我有空白值而没有剩余的html。

知道preg_match的模式应该是什么样的吗?

谢谢。

4 个答案:

答案 0 :(得分:2)

正则表达式不是一个合适的解决方案。你最好在DOMDocument中加载并解析它。

答案 1 :(得分:1)

您不应该使用regexps来解析HTML。请改用DOMXPath。这是一个例子:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$nodes = $xpath->query('//td');
$result = array();
foreach ($nodes as $node) {
    $result[] = $node->nodeValue;
}
// $result holds the values of the tds

答案 2 :(得分:1)

您打算使用DOM解析器完成该任务:

$html = <<<HTML
<div>
<table>
   <tr>
      <td>foo</td>
      <td>bar</td>
   </tr>
   <tr>
      <td>hello</td>
      <td>world</td>
   </tr>
</table>
</div>
<div>
   Something irrelevant
</div>
HTML;

$dom = new DOMDocument;
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);

$tds = $xpath->query('//div/table/tr/td');
foreach ($tds as $cell) {
    echo "{$cell->textContent}\n";
}

输出:

foo
bar
hello
world

答案 3 :(得分:0)

只有当你有非常有限的,定义明确的HTML时,你才能期望用正则表达式解析它。 highest ranked SO answer of all time解决了这个问题。

他来了......