正则表达式(PHP):删除背景颜色和颜色属性,但保留所有样式

3

我仍然没能够熟练地使用正则表达式,因此无法用正则表达式从表格中完全去除背景颜色、字体和颜色属性,但保留所有样式。

我已经尝试使用正则表达式去除所有样式,但实际上我想要去除背景颜色、字体和颜色属性,但是保留所有其他样式。

if(isset($_REQUEST["Save"])) {
    $VariantName = $_REQUEST["name"];
    $desc = preg_replace('/(<[^>]+\s+)(?:style\s*=\s*"(?!(?:|[^"]*[;\s])color\s*:[^";]*)(?!(?:|[^"]*[;\s])background-color\s*:[^";]*)[^"]*"|(style\s*=\s*")(?=(?:|[^"]*[;\s])(color\s*:[^";]*))?(?=(?:|[^"]*)(;))?(?=(?:|[^"]*[;\s])(background-color\s*:[^";]*))?[^"]*("))/i', '', $VariantName);
    echo $desc;
}

这个

<p style="font-family:Garamond;font-size:8px;line-height:14px;color:#FF0000;background-color:red;">example</p>

should become:

<p style="font-size:8px;line-height:14px;">example</p>

4
如果您使用类似DOMDocument的东西,就可以很好地处理它,因为它理解数据结构和上下文。目前使用正则表达式更像是一种折中方法,并且容易受到未来改变的影响,从而导致失败。 - Nigel Ren
1个回答

1

我不建议这样做,但您可以使用此正则表达式来删除您想要的 CSS 属性:

/(background-color|color|font-family)\:\#?\w+\;/i

例子:

<?php
            //Enter your code here, enjoy!
    $string = '<p style="font-family:Garamond;font-size:8px;line-height:14px;color:#FF0000;background-color:red;">example</p>';
    $pattern = '/(background-color|color|font-family)\:\#?\w+\;/i';
    $replacement = '';
    echo preg_replace($pattern, $replacement, $string);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接