使用 PHP 和 Regex 提取 Div 的内容

MeC*_*eCe 0 php regex

我正在尝试使用 PHP 提取 div 的内容,而与类名和其他参数无关。

我需要的是,我有多行,单行,多参数div,例如


<div class="my-class additional-class"><div class="my-class2">
<div class="my-class"></div>
</div>

</div>
Run Code Online (Sandbox Code Playgroud)

我想获得第一个 div 的所有内容,而不是第一个 div。

<div class="my-class2">
<div class="my-class"></div>
</div>

Run Code Online (Sandbox Code Playgroud)

通常,我猜

<div.*>(.*)<\/div>/mU
Run Code Online (Sandbox Code Playgroud)

应该有效,但我不确定为什么没有。

我遇到过这个

(?s)(?<=<div\sclass="test">\n).*(?=<\/div>)
Run Code Online (Sandbox Code Playgroud)

它适用于类名,test但我无法使其工作

(?s)(?<=<div.*>\n)(.*)(?=<\/div>)
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

谢谢,

anu*_*ava 5

这是使用DOM解析器获取它的方法:

<?php
$html = '<div class="my-class additional-class"><div class="my-class2">
<div class="my-class"></div>
</div>
</div>';

$doc = new DOMDocument();
$doc->loadHTML($html); // loads your html
$elems = $doc->getElementsByTagName('div'); // find all div elements
$outerdiv = $elems->item(0); // outermost div
echo $outerdiv->childNodes[0]->C14N() . "\n"; // print inner HTML

/*
<div class="my-class2">
<div class="my-class"></div>
</div>
*/
?>
Run Code Online (Sandbox Code Playgroud)

如果您真的想要正则表达式解决方案,请使用:

~<div[^>]*>(.*)</div>~is
Run Code Online (Sandbox Code Playgroud)

并抓住捕获组#1。