Php 正则表达式来提取div中的完整内容

Php 正则表达式来提取div中的完整内容,php,html,regex,dom,Php,Html,Regex,Dom,如何在div中提取完整的html内容?我试过这个密码 $html= '<html> <body> <div id="test"> <div id="mydiv1">Hello</div> <div id="mydiv2">How are you</div>

如何在div中提取完整的html内容?我试过这个密码

$html= '<html>
            <body>
                <div id="test">
                    <div id="mydiv1">Hello</div>
                    <div id="mydiv2">How are you</div>
                </div>
            </body>
        </html>';

$attr = "id";
$value = "test";

$tag_regex = '/<div[^>]*'.$attr.'="'.$value.'">(.*?)<\\/div>/si';
preg_match($tag_regex,$html,$matches);

echo $matches[0];
$html='1!'
你好
你好吗
';
$attr=“id”;
$value=“测试”;
$tag_regex='/]*'.$attr'='.$value'.'>(.*)/si';
preg_match($tag_regex,$html,$matches);
echo$匹配项[0];
通过运行这段代码,我得到了结果

 <div id="test">
    <div id="mydiv1">Hello</div>

你好
预期结果

<div id="test">
   <div id="mydiv1">Hello</div>
   <div id="mydiv2">How are you</div>
</div>

你好
你好吗
在我的代码中,正则表达式一直执行到第一次出现
。如何获取
中的完整代码

使用DOMDocument:

$dom = new DOMDocument;
$dom->loadHTML($html);

$div = $dom->getElementById('test');

$result = $dom->saveHTML($div);

正则表达式有什么方法可以做到这一点吗?@FrayneKonok:是的,但你需要处理:空格、属性顺序、属性引号(单引号、双引号、完全没有引号)、html注释、javascript字符串、注释和正则表达式、css字符串和注释,当然还有嵌套标记。你准备好写这个模式了吗?