Minify/compress CSS with regex?

前端 未结 4 1598
情深已故
情深已故 2020-12-13 14:26

In PHP can you compress/minify CSS with regex (PCRE)?

(As a theoretical in regex. I\'m sure there are libraries out there that do this well.)

Background

4条回答
  •  萌比男神i
    2020-12-13 14:57

    Here is a compact source of how I do it. With compression. And you don't have to care, if you changed something in the source.

    In fact '//comments' are not allowed in css.

    ob_start('ob_handler');
    if(!file_exists('style/style-min.css) 
    or filemtime('style/style.css') > filemtime('style/style-min.css')){
      $css=file_get_contents('style/style.css');    
      //you need to escape some more charactes if pattern is an external string.
      $from=array('@\\s*/\\*.*\\*/\\s*@sU', '/\\s{2,}/');
      $to=  array(''                      , ' ');
      $css=preg_replace($from,$to,$css); 
      $css=preg_replace('@\s*([\:;,."\'{}()])\s*@',"$1",$css);  
      $css=preg_replace('@;}@','}',$css);
      header('Content-type: text/css');
      echo $css;
      file_put_contents('style/style-min.css',$css);
      //etag- modified- cache-control- header
      }
    else{
      //exit if not modified?
      //etag- modified- cache-control- header
      header('Content-type: text/css');
      readfile('style/style-min.css');
      }   
    ob_end_flush();
    

    PS Who gave me the minus before I'm ready with typing? QTax- For a short time I forgot to escape the backslashes in the $fom array. PSS. Only new version of PHP undestand the 'U' param which makes a regex ungreedy.

提交回复
热议问题