使用php获取带有id或类的标记父级中的所有html数据


Get all html data in a tag parent with id or class use php

我有以下文本:

<div id="parent">
      <div class="box1"> content 1</div>
      <div class="box2"> content 1</div>
      <div class="box3"> content 1 <div class="box31"></div></div>
</div>

我尝试过的:

preg_match_all ("/<div id='"parent'">([^`]*?)<'/div>/", $str_test, $matches);
print_r($matches);exit;

我想得到所有的内容:

<div class="box1"> content 1</div>
<div class="box2"> content 1</div>
<div class="box3"> content 1 <div class="box31"></div></div>

它不起作用,我需要帮助。

您不应该使用regex解析HTML。使用DOMDocument可以而且应该做到这一点。

$string = '<div id="parent">
      <div class="box1"> content 1</div>
      <div class="box2"> content 1</div>
      <div class="box3"> content 1 <div class="box31"></div></div>
</div>';
$dom = new DOMDocument();
$dom->loadHTML($string);
$xpath = new DOMXPath($dom);
$parentNode = $xpath->query("//div[@id='parent']");
$html = '';
foreach ($parentNode->item(0)->childNodes as $node) {
    $html .= $node->ownerDocument->saveHtml($node);
}
echo $html;

saveHTML方法允许您从父节点(<div id="parent">)的每个节点获取整个html。

演示。

如果您真的需要使用regex,也许作为一种不限于格式良好的HTML的通用文本解析,那么您应该:

  1. 使用preg_match而不是preg_match_all

  2. 失去你模式中的?

您想要的结果应该在$matches[1]中。