3

我正在尝试过滤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>。我怎样才能做到这一点?

谢谢!

4

1 回答 1

1

使用不贪心 (U) 修饰符:

preg_replace('%....%sU', .....);
于 2013-07-29T11:04:55.653 回答