我有传递给 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/