Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在php中编写更好的用于css缩小的regexp? 我所拥有的_Php_Css_Regex_Minify - Fatal编程技术网

如何在php中编写更好的用于css缩小的regexp? 我所拥有的

如何在php中编写更好的用于css缩小的regexp? 我所拥有的,php,css,regex,minify,Php,Css,Regex,Minify,我有以下php中的regexp,用于缩小原始css字符串: function compress( $css ) { $css = str_replace('; ',';', $css); $css = str_replace(': ',':', $css); $css = str_replace(', ',',', $css); $css = str_replace(' }','}', $css); $css = str_replace('} ','}'

我有以下php中的regexp,用于缩小原始css字符串:

function compress( $css ) {
    $css = str_replace('; ',';', $css);
    $css = str_replace(': ',':', $css);
    $css = str_replace(', ',',', $css);

    $css = str_replace(' }','}', $css);
    $css = str_replace('} ','}', $css);

    $css = str_replace('{ ','{', $css);
    $css = str_replace(' {','{', $css);

    $css = str_replace('( ','(', $css);
    $css = str_replace(' (','(', $css);

    $css = str_replace(' )',')', $css);
    $css = str_replace(') ',')', $css);

    $css = str_replace(array("\r\n","\r","\n","\t",'  ','    ','    '),"",preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!','',$css));

    return $css;
}
这是可行的,但却是糟糕的代码

问题
有人知道更好的编写方法吗?

如何更改此代码:

...
$css = str_replace('; ',';', $css);
$css = str_replace(': ',':', $css);
$css = str_replace(', ',',', $css);

$css = str_replace(' }','}', $css);
$css = str_replace('} ','}', $css);

$css = str_replace('{ ','{', $css);
$css = str_replace(' {','{', $css);
...
为此:

$css = str_replace(array('; ',': ',', ',...),array(';',':',',',...),$css);

也考虑使用现有的库来简化CSS。有很多东西可以缩小。例如:边距:0;可成为保证金:0;依此类推……

我将此用于css:

//Minify CSS code:
function minifyCSS($sCss) {
    // Compress whitespace.
    $sCss = preg_replace('/\s+/', ' ', $sCss);
    // Remove comments.
    $sCss = preg_replace('/\/\*.*?\*\//', '', $sCss);

    return trim($sCss);
}

我已经经历过很多次了,目前我有一个运行良好的实现

// comments
$string = preg_replace('!/\*.*?\*/!s','', $string);
$string = preg_replace('/\n\s*\n/',"\n", $string);

// space
$string = preg_replace('/[\n\r \t]/',' ', $string);
$string = preg_replace('/ +/',' ', $string);
$string = preg_replace('/ ?([,:;{}]) ?/','$1',$string);

// trailing;
$string = preg_replace('/;}/','}',$string);

我将其实现为一个细枝过滤器:

为什么不使用现有的css缩小库?为什么要用开放的括号替换封闭的括号?通常它们太大了。我只需要几行简单的代码。@GarethCornish我的错,修正了:这是好的,但遗漏了很多可以删除的空格。这是一个很好的答案,也是一个很有教育意义的答案,但我会选择答案,因为它与我的问题更相关。谢谢我想我也会转向这个解决方案:这个解决方案可以打破每一个css选择器,就像这样:div[style=width:6px;height:10px]@350D嗨,是的,你很可能就在那里。不过,这种选择器可能会突出比需要缩小更大的问题。一些改进: