PHP如何使用preg_match选择并删除自定义attr html

时间:2014-08-26 18:14:53

标签: php html replace preg-replace

我有一个类似

的html字符串
<p lang="es-CO" style="text-align: center;" align="LEFT">
  <span style="font-family: 'comic sans ms', sans-serif;"> 
    <img class="alignnone" src="url" width="525" height="360" />
  </span>
</p>

我想删除所有关于所有标签减去img标签的attr,例如。我的意思是,我想选择哪个attr我想放弃。

我想要一个这样的结果:

<p>
  <span> 
    <img src="url" width="525" height="360" />
  </span>
</p>

我知道preg_replace("/<([a-z][a-z0-9]*)[^>]*?(\/?)>/i", '<$1$2>', $html);删除所有attr,但我不想删除宽度和高度,例如...

可以使用preg_replace选择要保存或删除的attr或哪些标签?

1 个答案:

答案 0 :(得分:3)

最好的方法是使用html解析器,但如果你的字符串就像你给出的一样简单,你可以这样做:

$str = '<p lang="es-CO" style="text-align: center;" align="LEFT">
  <span style="font-family: \'comic sans ms\', sans-serif;"> 
    <img class="alignnone" src="url" width="525" height="360" />
  </span>
</p>';
$str = preg_replace('~<(?!\bimg\b)([a-z][a-z0-9]*)[^>]*(/?)>~is', '<$1$2>', $str);
echo $str,"\n";

<强>输出:

<p>
  <span> 
    <img class="alignnone" src="url" width="525" height="360" />
  </span>
</p>

(?!\bimg\b)negative look ahead,用于检查是否有img个标记需要替换。