[英]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.