hit*_*uct 0 css php regex minify
我在php中有以下正则表达式来缩小原始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;
}
Run Code Online (Sandbox Code Playgroud)
这有效,但代码很糟糕.
有人知道更好的写这个方法吗?
我已经经历了很多次,目前我有一个运行良好的实现.
// 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);
Run Code Online (Sandbox Code Playgroud)
我把它实现为Twig过滤器:https://github.com/catchamonkey/CatchamonkeyAsseticFilterBundle