【问题标题】:Remove tags inside attributes删除属性内的标签
【发布时间】:2016-09-30 02:23:30
【问题描述】:

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

【问题讨论】:

  • 将字符串解析成DOM,然后用preg_filter遍历属性搜索标签
  • 您是否只需要删除标签本身或它们包含的内容? IE。 $right_string@style 应该是 color:#FFF;;display:block; 还是 ;display:block;
  • $right_string 的期望输出为: $right_string = '
    Some Text
    ';注意:仅在样式属性内...但请注意,它可以是任何属性。

标签: php regex dom


【解决方案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>

你会得到结果:

&lt;div class="class1" style="display:block;"&gt;Some Text&lt;del&gt; Orig&lt;/del&gt;&lt;/div&gt;

对于这个输入字符串:

&lt;div class="class1" style="&lt;ins&gt;color:#FFF;&lt;/ins&gt;;display:block;"&gt;Some Text&lt;/div&gt;

你会得到结果:

&lt;div class="class1" style="color:#FFF;;display:block;"&gt;Some Text&lt;/div&gt;

对于这个输入字符串:

&lt;div class="class1" style=";display:block;&lt;ins&gt;color:#FFF;&lt;/ins&gt;"&gt;Some Text&lt;/div&gt;

你会得到结果:

&lt;div class="class1" style=";display:block;color:#FFF;"&gt;Some Text&lt;/div&gt;

在此处查看演示: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 等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多