我正在尝试使用 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)
任何帮助表示赞赏。
谢谢,
这是使用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。