dtr32221 2012-09-24 12:24
浏览 85

正则表达式与HTML子元素匹配html元素[重复]

Possible Duplicate:
How to parse and process HTML with PHP?

I wasn't sure how to phrase this question.

Basically I have this php code:

$new_html = preg_replace('!<div.*?id="spotlight".*?>.*?</div>!is', '', $html);

I want this to change html code from this (example, not actual html):

<div id="container">
    <div id="spotlight">
        <!-- empty -->
    </div>
    <div id="content">
        <!-- lots of content -->
    </div>
</div>

To this:

<div id="container">
    <div id="content">
        <!-- lots of content -->
    </div>
</div>

As you can see the php code will do this successfully, because the regex is looking for:

<div{anything}id="spotlight"{anything}>{anything}</div>

However

if the div id="spotlight" contains a child div like so:

<div id="container">
    <div id="spotlight">
        <div></div>
    </div>
    <div id="content">
        <!-- lots of content -->
    </div>
</div>

then the regex will match the end div tag of the child div!

How do i prevent this? How to i tell regex to ignore the closing div if another div was opened?

Thanks

  • 写回答

2条回答 默认 最新

  • duanboxue3422 2012-09-24 12:31
    关注

    Use DOMDocument:

    $html = '<div id="container">
        <div id="spotlight">
            <!-- empty -->
        </div>
        <div id="content">
            <!-- lots of content -->
        </div>
    </div>';
    
    $dom = new DOMDocument;
    $dom->loadXML($html);
    
    $xpath = new DOMXPath($dom);
    $query = '//div[@id="spotlight"]';
    $entries = $xpath->query($query);
    
    foreach($entries as $one){
    
        $one->parentNode->removeChild($one);
    }
    
    echo $dom->saveHTML();
    

    Codepad Example

    评论

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大