PHP:使用 preg_replace 过滤一些 html 属性.获取第一个</跨度>,而不是最后一个


PHP: Filter some html attributes using preg_replace. Get the first </span>, not the last

我正在尝试过滤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', .....);