我正在尝试过滤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>
。我该怎么做?
谢谢!
使用不贪婪的 (U( 修饰符:
preg_replace('%....%sU', .....);