首页 > 解决方案 > 从字符串中删除除某个正则表达式之外的所有标签

问题描述

我写了这个正则表达式

<span class="icon(.*?)><\/span>

我有这个字符串:

<p style="text-align: center;"><span style="font-size: 1em;">Text 1 <span style="font-weight: bold;">TEXT 2</span><span style="color: #e67e23; font-size: 1.2em;"><span class="icon x-small icon-play"></span>&nbsp;</span><span style="color: #e03e2d;">Text 3</span> <span style="color: #a68965;">Text 4 </span></span><span style="font-size: 0.7em; color: #000000;">Text 5</span></p>

我想从该字符串中删除所有标签,除了上面的正则表达式产生的标签。所以我会得到这个最终结果:

Text 1 Text 2<span class="icon x-small icon-play"></span>&nbsp;Text 3 Text 4 Text 5

正如您在此输出中看到的那样,除了我要查找的标签外,所有标签都已被清除。

我看了一下 PHP,strip_tags但不幸的是他们没有将正则表达式作为第二个参数,因此没有做我想要的。我尝试用 a 来做,preg_replace但我无法创建如此复杂的正则表达式。

关于使用正则表达式的最佳方法是什么?

标签: phpregexstrip-tags

解决方案


采用

preg_replace('/<span class="icon.*?><\/span>(*SKIP)(*F)|<[^<>]+>/', '', $string)

证明

The expression will find <span class="icon....></span> strings to ignore them with (*SKIP)(*F) and then all other tags will be removed (matched with <[^<>]+>).


推荐阅读