如何在php中编写更好的用于css缩小的regexp? 我所拥有的
我有以下php中的regexp,用于缩小原始css字符串:如何在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('} ','}'
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嗨,是的,你很可能就在那里。不过,这种选择器可能会突出比需要缩小更大的问题。一些改进: