在属性内部删除标记

3

我有一个字符串被传递给了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。如果它们不在标签内,则不会删除这些标签。但是当它们在属性内时需要将它们删除。


1
将字符串解析为DOM,然后遍历属性搜索带有preg_filter标签的内容。 - Jeff Puckett
1
您只需要删除标签本身还是它们所包含的内容?即 $right_string@style 应该是 color:#FFF;;display:block; 还是 ;display:block; - user3942918
$right_string 的期望输出应为:$right_string = '<div class="class1" style="color:#FFF;display:block;">一些文本</div>'; 注意:仅在 style 属性内... 但请注意它可以是任何属性。 - barudo
1个回答

1

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

(?<=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>

您将获得以下结果:
对于此输入字符串:
Some Text
您将获得以下结果:
Some Text
对于此输入字符串:
Some Text
您将获得以下结果:
Some Text
在这里查看演示: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


Alkesey,如果差异出现在另一个属性上怎么办?它不仅会发生在样式上。它可能会出现在类、src等上。 - barudo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接