php - 删除属性内的标签

标签 php regex dom

我有传递给 Text_Diff 的这个字符串...

<?php
$left_string = '<div class="class1" style="display:block;">Some Text<del> Orig</del></div>';
$right_string = '<div class="class1" style="<ins>color:#FFF;</ins>;display:block;">Some Text</div>';

只有两个可能的标签,即:del 和 ins。如果它们不在标签内,我不会删除这些标签。但是当它们在属性内部时需要删除它们。

最佳答案

您可以使用以下正则表达式进行搜索:

(?<=style=)([\w\W]+)(?:<ins>|<del>)([\w\W\s]+)(?:<\/ins>|<\/del>)([\w\W]*)(?=">)

该属性的值是与反向链接匹配的文本:

([\w\W]+) == $1

([\w\W\s]+) == $2

([\w\W]*) == $3

然后此组合将为您提供所需的属性值:

$1$2$3

对于这个输入字符串:

<div class="class1" style="display:block;">Some Text<del> Orig</del></div>

你会得到结果:

<div class="class1" style="display:block;">Some Text<del> Orig</del></div>

对于这个输入字符串:

<div class="class1" style="<ins>color:#FFF;</ins>;display:block;">Some Text</div>

你会得到结果:

<div class="class1" style="color:#FFF;;display:block;">Some Text</div>

对于这个输入字符串:

<div class="class1" style=";display:block;<ins>color:#FFF;</ins>">Some Text</div>

你会得到结果:

<div class="class1" style=";display:block;color:#FFF;">Some Text</div>

在此处查看演示:https://regex101.com/r/3XKv5s/1


对于任何属性,不仅是style :

(?<=[a-zA-Z]=")([\w\W]*)(?:<ins>|<del>)([\w\W\s]*)(?:<\/ins>|<\/del>)([\w\W]*)(?=">)

在此处查看演示:https://regex101.com/r/3XKv5s/2

关于php - 删除属性内的标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39782707/

相关文章:

javascript - 动态加载后获取最后的 css 或 js 代码

php - `finally` 何时以及为何有用?

java - 在多个分隔符上标记字符串

javascript - 动态给dom赋值

PHP、sql、UTF-8编码

php - 如何将多个选定的 MySQL 列插入到单个 PHP 数组

Java 正则表达式匹配器验证

javascript - RegExp 每隔一个星号替换一次?

javascript - 如何撤消 addEventListener?

javascript - 在 Javascript 中使用正则表达式解析 XHTML 字符串并将其转换为 DOM