我有这个传递给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> ;; 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