我有以下文本:
<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的通用文本解析,那么您应该:
-
使用
preg_match
而不是preg_match_all
-
失去你模式中的
?
。
您想要的结果应该在$matches[1]
中。