Php Preg拆分表所有tds

Php Preg拆分表所有tds,php,regex,preg-split,Php,Regex,Preg Split,我想获取字符串中出现的所有tds。目前我使用的是$tds=preg_split(“#(?=)#,$toDisplayNotes) 但这并没有得到所有的tds。是否可以生成如下所示的数组: array { [0] => "<td>hello</td>" [1] => "<td align="right">world</td>" [2] => "<td>another td</td>" } 数组{

我想获取字符串中出现的所有tds。目前我使用的是
$tds=preg_split(“#(?=)#,$toDisplayNotes)

但这并没有得到所有的tds。是否可以生成如下所示的数组:

array {
  [0] => "<td>hello</td>"
  [1] => "<td align="right">world</td>"
  [2] => "<td>another td</td>"
}
数组{
[0]=>“您好”
[1] =>“世界”
[2] =>“另一个td”
}

使用
DOMDocument
类,您可以很容易地获得所有单元格,如下所示:

$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$cells = $dom->getElementsByTagName('td');
$contents = array();
foreach($cells as $cell)
{
    $contents[] = $cell->nodeValue;
}
var_dump($contents);
$cells
变量是一个变量,因此它有一些方法可以使用。
$cell
变量将在每次迭代中分配一个特定的实例,该实例具有各种方法/属性,这些方法/属性也可能对您的用例有用(如
getAttribute

但是,看看你的问题,你会想要数组中的外部html(包括标记)。这很容易。”

旁注:
也许
for
循环比
foreach
循环性能更好。我还没有测试/比较这两种方法,但如果您看到上面的方法与此方法有差异,您可以尝试:

$markup = array();
for($i=0, $j = $cells->length;$i<$j;$i++)
{
    $markup[] = $dom->saveXML($cells->item($i));
}
$markup=array();
对于($i=0,$j=$cells->length;$isaveXML($cells->item($i));
}
我使用
saveXML
而不是
saveHTML
的原因很简单:
saveHTML
将生成一个有效的DOM(包括打开
标记和您拥有的东西)。这不是您想要的。这就是为什么在本例中,
saveXML
是更好的选择。

我的一个稍微相关的问题

@Stijn,我真的没有选择,除非有更好的方法?从这个问题的顶部答案来看:你试过使用XML解析器吗?@rob:…有更好的方法,所以你有选择!或者看看使用“简单html dom”“@rob:
$cell->value
应该是
$cell->nodeValue
(正如您在
DOMNode
类的手册页上看到的那样)…更正了我的错误。您的评论中包含的警告只是告诉我,您没有将正确的变量/类型传递给方法。我只是使用示例变量,例如,您可能希望检查传递给
loadHTML
的内容
$markup = array();
for($i=0, $j = $cells->length;$i<$j;$i++)
{
    $markup[] = $dom->saveXML($cells->item($i));
}