让我们说这是我的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);
答案 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>