php - 从字符串中删除除某个正则表达式之外的所有标签
问题描述
我写了这个正则表达式:
<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> </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> Text 3 Text 4 Text 5
正如您在此输出中看到的那样,除了我要查找的标签外,所有标签都已被清除。
我看了一下 PHP,strip_tags
但不幸的是他们没有将正则表达式作为第二个参数,因此没有做我想要的。我尝试用 a 来做,preg_replace
但我无法创建如此复杂的正则表达式。
关于使用正则表达式的最佳方法是什么?
解决方案
采用
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 <[^<>]+>
).
推荐阅读
- angular - 更改ts文件中的值后图像不会改变
- azure-keyvault - 从 Windows 窗体应用程序获取令牌在尝试获取密钥保险柜的秘密表单时卡住了
- python - ModuleNotFoundError:没有名为“bs4”BeautifulSoup 的模块
- docker - 无法访问 Kubernetes 集群外的 NodePort 服务
- spring-boot - 基于更改日志的租户架构更新的 Liqubase 多租户问题
- javascript - 如何用长度链接过滤器?
- javascript - 如何在前端生成图像/视频的缩略图?
- windows - 如何在解析类似命名的 XML 元素时为具有动态名称的环境变量赋值?
- .net - 设置我的第一个 .NET 5 + Angular 项目
- c# - 如何显示 mi 异步任务