使用PHP preg_replace删除空CSS选择器

时间:2016-07-21 02:30:22

标签: php preg-replace minify

我正在尝试通过压缩获取整个CSS文件。它工作正常,但我想删除空的CSS选择器。这个文件是程序生成的,因此它留下了一些空标记,而不是手动删除它们:

$buffer = str_replace('#content>#columns>#article{}', '', $buffer);
$buffer = str_replace('.menuDeeper88{}', '', $buffer);

我试图像这样删除它们:

$buffer = preg_replace('/\}[.*?]\{\}/', '\}', $buffer);

我想象的是这样的(只是一个澄清)

Replace any case of '}ANY_CHARACTERS{}' with ''

但是preg_replace方法不起作用。我希望有人可以帮助我让它发挥作用。

我提前感谢你。

3 个答案:

答案 0 :(得分:1)

您可以使用此方法:

$css = "#content>#columnsA{min‐width: 500px;}#articleA{ }.menuUpper88{}#content>#columnsB>{min‐width: 700px;}#articleB{}.menuUpper88{}.header {background-color: #fff;background-image: url(image.gif);background-repeat: no-repeat;background-position: top left;}";

$css_splitted_by_closed_bracket = preg_split("/\s*\}/i", $css);

function get_css_without_empty_selector($data)
{
    $result = "";
    foreach ($data as $item) {
        if($item != "" && substr($item, -1) != '{') {
           $result .= $item . "}";
        }
    } 
    return $result;
}

get_css_without_empty_selector($css_splitted_by_closed_bracket);

在此处运行代码:https://3v4l.org/9Cskr

答案 1 :(得分:0)

使用此:

preg_replace('/(?:[^\r\n,{}]+)(?:,(?=[^}]*{)|\s*{[\s]*})/', '', $buffer);

经过测试:https://regex101.com/r/pX0wR0/3

正则表达式修改自:What is the REGEX of a CSS selector

答案 2 :(得分:0)

使用分组选择器时,我没有得到吉姆的答案。

尝试一下:

  preg_replace('/[a-zA-Z0-9\s#=",-:()\[\]]+\{\s*\}/', '', $buffer);