我正在尝试过滤HTML文件以删除某些属性。具体来说,我想删除所有spans设置颜色的除外。在设置颜色的跨度中,我将删除除 style='color...' 之外的所有属性。
即,如果我有:
<span lang=EN-US>This is a </span>
<span id="myspan" style='color:red;text-align:left;'>test</span>
<span lang=EN-US> to remove spans.</span>
我希望它是:
This is a
<span style='color:red'>test</span>
to remove spans.
为此,我正在使用preg_replace. 我创建了这个regex:
preg_replace(
'%(<span [^>]*color\:)([a-z]*)(;|\')([^>]*>)(.*)(<\/span>)%s',
"<qwerty style='color:$2'>$5</qwerty>",
$myText);
使用它后,我删除所有跨度,strip_tags然后将所有跨度转换<qwerty>为<span>.
<span>我的问题是和</span>((.*)在我的)之间的内容regex正在获取所有文本,直到结束:
This is a
<span style='color:red'>test
to remove spans.</span>
我希望它获取所有文本,直到找到第一个 </span>,但现在它获取所有文本,直到最后一个 </span>。我怎样才能做到这一点?
谢谢!