正则表达式删除div标签,但不删除其内容

时间:2010-08-12 08:56:16

标签: php html regex

让我们说这是我的HTML:

<ul>
    <li><div style="width: 10em;">Hello</div><div class="ble"></div></li>
</ul>

我想得到这个:

<ul>
    <li>Hello</li>
</ul>

正如您所看到的,所有div开始和结束标记都被删除了,但不是它们的内容!

这是我到目前为止所做的:

$patterns = array();
$patterns[0] = '/<div.*>/';
$patterns[1] = '/</div>/';
$replacements = array();
$replacements[2] = '';
$replacements[1] = '';
echo preg_replace($patterns, $replacements, $html);

2 个答案:

答案 0 :(得分:2)

'/<div.*>/'替换为'/<div.*?>/'这将删除*的贪婪行为并匹配遇到的第一个>

此外,您需要转义模式中的反斜杠以匹配结束标记 - 使用:

'/<\/div>/';

答案 1 :(得分:1)

我首先要用<div[^>]*></div[^>]*>替换。虽然我对特定的PHP正则表达式引擎知之甚少,但以下sed工作正常:

pax> cat qq.in
<ul>
    <li><div style="width: 10em;">Hello</div><div class="ble"></div></li>
</ul>

pax> cat qq.in | sed -e 's/<div[^>]*>//g' -e 's/<\/div>//g'
<ul>
    <li>Hello</li>
</ul>

事实上,您应该能够将其组合成一个正则表达式</?div[^>]*>

pax> cat qq.in | sed -r -e 's_</?div[^>]*>__g'
<ul>
    <li>Hello</li>
</ul>
相关问题