0

可能重复:
如何使用 PHP 解析和处理 HTML?

我不知道如何表达这个问题。

基本上我有这个php代码:

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

我希望它从此更改 html 代码(例如,不是实际的 html):

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

对此:

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

如您所见,php 代码将成功执行此操作,因为正则表达式正在寻找:

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

然而

如果 div id="spotlight" 包含像这样的子 div:

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

那么正则表达式将匹配子 div 的结束 div 标签!

我该如何防止这种情况?如果打开了另一个 div,我如何告诉正则表达式忽略关闭的 div?

谢谢

4

2 回答 2

2

使用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();

键盘示例

于 2012-09-24T12:31:17.187 回答
0
$a = preg_replace('/<div[^>]+>\\s+<\/div>/', '', $a);
于 2012-09-24T12:34:44.747 回答