清除两个html标记之间的PHP正则表达式(嵌套)

清除两个html标记之间的PHP正则表达式(嵌套),php,regex,replace,Php,Regex,Replace,我需要一个正则表达式来清除两个html标记之间的所有内容。但是标记可以嵌套 这是我写的 $theHTML = ' <div class="holder"> dynamic text 1 <div class="section"> section text </div> </div> '; $first='<div class="holder">'; $second='<d

我需要一个正则表达式来清除两个html标记之间的所有内容。但是标记可以嵌套

这是我写的

$theHTML = '
     <div class="holder">

        dynamic text 1

        <div class="section"> section text </div>

    </div>
';


$first='<div class="holder">';
$second='<div class="section">';
$replace  = ""; 
$find = preg_replace('#('.preg_quote($first).')(.*)('.preg_quote($second).')#si', '$1'.$replace.'$3', $theHTML);
$theHTML=
动态文本1
章节文本
';
$first='';
$second='';
$replace=“”;
$find=preg_replace(“#”(“.preg_quote($first)。”)(.*)(“.preg_quote($second)。”)#si',“$1”。$replace.$3',$theHTML);
输出

     <div class="holder"><div class="section"> section text </div>

    </div>
节文本
当我们只有一场比赛时,一切都很顺利。但是这段代码可以像这段代码一样进行分析

$theHTML = '
     <div class="holder">

        dynamic text 1

        <div class="section"> 
            section text 

                 <div class="holder">

                    dynamic text 1

                    <div class="section"> section text </div>

                </div>

        </div>

    </div>
';
$theHTML=
动态文本1
章节文本
动态文本1
章节文本
';
输出将是:

     <div class="holder"><div class="section"> section text </div>

                </div>

        </div>

    </div>
节文本
如您所见,它将删除第一个匹配中的所有内容。我想要得到的

     <div class="holder"><div class="section"> 
            section text 

                 <div class="holder"><div class="section"> section text </div>

                </div>

        </div>

    </div>

章节文本
章节文本
所以问题是,;我怎样才能做到这一点

非常感谢。

将正则表达式中的
(.*)
替换为
(.*)
,这将导致一个错误,这正是您需要的

$theHTML = '$theHTML = '<div class="holder">
    dynamic text 1
    <div class="section"> 
        section text 
             <div class="holder">
                dynamic text 1
                <div class="section"> section text </div>
            </div>
    </div>
</div>';

$first='<div class="holder">';
$second='<div class="section">';
$replace  = ""; 
$find = preg_replace('#('.preg_quote($first).')(.*?)('.preg_quote($second).')#si', '$1'.$replace.'$3', $theHTML);
echo $find;
$theHTML='$theHTML='
动态文本1
章节文本
动态文本1
章节文本
';
$first='';
$second='';
$replace=“”;
$find=preg_replace(“#”(“.preg_quote($first)。”)(.*)(“.preg_quote($second)。”)#si',“$1”。$replace.$3',$theHTML);
回声$find;
输出

<div class="holder"><div class="section"> 
            section text 
                 <div class="holder"><div class="section"> section text </div>
                </div>
        </div>
    </div>

章节文本
章节文本
请注意,此正则表达式仅“清理”介于
holder
部分之间的文本,而不是相反的文本。

将正则表达式中的
(.*)
替换为
(.*)
,这将导致一个错误,而这正是您所需要的

$theHTML = '$theHTML = '<div class="holder">
    dynamic text 1
    <div class="section"> 
        section text 
             <div class="holder">
                dynamic text 1
                <div class="section"> section text </div>
            </div>
    </div>
</div>';

$first='<div class="holder">';
$second='<div class="section">';
$replace  = ""; 
$find = preg_replace('#('.preg_quote($first).')(.*?)('.preg_quote($second).')#si', '$1'.$replace.'$3', $theHTML);
echo $find;
$theHTML='$theHTML='
动态文本1
章节文本
动态文本1
章节文本
';
$first='';
$second='';
$replace=“”;
$find=preg_replace(“#”(“.preg_quote($first)。”)(.*)(“.preg_quote($second)。”)#si',“$1”。$replace.$3',$theHTML);
回声$find;
输出

<div class="holder"><div class="section"> 
            section text 
                 <div class="holder"><div class="section"> section text </div>
                </div>
        </div>
    </div>

章节文本
章节文本
请注意,此正则表达式仅“清理”介于
holder
节之间的文本,而不是相反的文本