Preg拆分表所有tds

时间:2013-09-09 11:10:56

标签: php regex preg-split

我希望在字符串中出现所有tds。目前我正在使用$tds = preg_split( '#(?=<td>)#', $toDisplayNotes );

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

array {
  [0] => "<td>hello</td>"
  [1] => "<td align="right">world</td>"
  [2] => "<td>another td</td>"
}

1 个答案:

答案 0 :(得分:0)

使用DOMDocument类,您可以轻松获取所有单元格:

$dom = new DOMDocument;
$dom->loadHTML($htmlString);
$cells = $dom->getElementsByTagName('td');
$contents = array();
foreach($cells as $cell)
{
    $contents[] = $cell->nodeValue;
}
var_dump($contents);

$cells var是DOMNodeList,因此它有一些您可以使用的方法。 $cell变量将在每次迭代时分配一个特定的DOMNode实例,其中包含对您的用例也很有用的各种方法/属性(如getAttribute
但是,看看你的问题,你会想要你的数组中的外部html(包括标签)。现在这很简单:“

$markup = array();
foreach($cells as $cell)
{
    $markup[] = $dom->saveXML($cell);
}

边注:
也许for循环比foreach更有效。我没有对这两者进行测试/比较,但如果你看到上述方法和这一方法有所不同,你可以试试:

$markup = array();
for($i=0, $j = $cells->length;$i<$j;$i++)
{
    $markup[] = $dom->saveXML($cells->item($i));
}

我使用saveXML而非saveHTML的原因很简单:saveHTML会生成有效的 DOM(包括打开<html>标签和你有什么)。不是你想要的。这就是为什么saveXML在这种情况下是更好的选择 我的一个稍微相关的问题here