php – 删除属性内的标签

我有这个传递给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>原稿< /德尔>< / DIV>

对于此输入字符串:

< div class =“class1”style =“< ins> color:#FFF;< / ins&gt ;; 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

对于任何属性,不仅是样式:

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

请参见此处的演示:https://regex101.com/r/3XKv5s/2

点赞