繁体   English   中英

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

[英]Regex to remove div tags but not their content

假设这是我的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);

取代'/<div.*>/''/<div.*?>/'这将删除的贪婪行为*和匹配第一>遭遇。

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

'/<\/div>/';

我先将<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>

实际上,您应该可以将其组合到一个regex </?div[^>]*>

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM