使用preg_replace缩小CSS

时间:2009-09-04 13:30:20

标签: php regex preg-replace

我正在尝试使用preg_replace缩小多个CSS文件。实际上,我只是想从文件中删除任何换行符/标签和注释。以下对我有用:

$regex = array('{\t|\r|\n}', '{(/\*(.*?)\*/)}');
echo preg_replace($regex, '', file_get_contents($file));

但我想在单个多行正则表达式中执行此操作,如下所示:

$regex = <<<EOF
{(
    \t
|
    \r
|
    \n
|
    /\*(.*?)\*/
)}x
EOF;
echo preg_replace($regex, '', file_get_contents($file));

但是,这根本不起作用。有没有办法做到这一点?


编辑:好的,所以我会看看现有的缩放器,但它仍然让我想到如何使用这样的多行正则表达式,因为使用x-modifier多行正则表达式应该在PHP中工作正常,不应该吗?

7 个答案:

答案 0 :(得分:9)

我不确定你会怎么做,但这是我朋友写的一个脚本,它在缩短CSS方面非常快:

function minimize_css($input)
{
    // Remove comments
    $output = preg_replace('#/\*.*?\*/#s', '', $input);
    // Remove whitespace
    $output = preg_replace('/\s*([{}|:;,])\s+/', '$1', $output);
    // Remove trailing whitespace at the start
    $output = preg_replace('/\s\s+(.*)/', '$1', $output);
    // Remove unnecesairy ;'s
    $output = str_replace(';}', '}', $output);
    return $output;
}

答案 1 :(得分:5)

有些实用程序可以满足您的需求并为您节省潜在的错误正则表达式。

YUI compressor支持缩小CSS和javascript文件。

在编写自己的选项之前,您可能希望考虑这个或其他现有选项。

答案 2 :(得分:2)

这是我个人用于CSS的内容:

$file_contents = file_get_contents($file);<br />
preg_replace('@({)\s+|(\;)\s+|/\*.+?\*\/|\R@is', '$1$2 ', $file_contents);

答案 3 :(得分:1)

这似乎是重新发明轮子的完美示例。互联网上几乎每个网站都使用CSS,所有大网站都以某种方式压缩它。他们的方法已经过测试和优化。如果你不需要,为什么要自己动手?

Mike和Grumbo已经提出了具体的建议,但我只想指出一般原则。

答案 4 :(得分:0)

据我所知你不能这样做,因为当你把它分成多行时你实际上是在改变模式。

编辑:是的,+ 1,因为没有重新发明轮子。

答案 5 :(得分:0)

这就是我在Samstyle PHP Framework中使用的内容:

$regex = array(
"`^([\t\s]+)`ism"=>'',
"`([:;}{]{1})([\t\s]+)(\S)`ism"=>'$1$3',
"`(\S)([\t\s]+)([:;}{]{1})`ism"=>'$1$3',
"`\/\*(.+?)\*\/`ism"=>"",
"`([\n|\A|;]+)\s//(.+?)[\n\r]`ism"=>"$1\n",
"`(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+`ism"=>"\n"
);
$buffer = preg_replace(array_keys($regex),$regex,$buffer);

希望这有帮助!

答案 6 :(得分:0)

function minifyCSS($css){
    $css = trim($css);
    $css = str_replace("\r\n", "\n", $css);
    $search = array("/\/\*[^!][\d\D]*?\*\/|\t+/","/\s+/", "/\}\s+/");
    $replace = array(null," ", "}\n");
    $css = preg_replace($search, $replace, $css);
    $search = array("/;[\s+]/","/[\s+];/","/\s+\{\\s+/", "/\\:\s+\\#/", "/,\s+/i", "/\\:\s+\\\'/i","/\\:\s+([0-9]+|[A-F]+)/i","/\{\\s+/","/;}/");
    $replace = array(";",";","{", ":#", ",", ":\'", ":$1","{","}");
    $css = preg_replace($search, $replace, $css);
    $css = str_replace("\n", null, $css);
    return $css;    

}


http://mhameen.blogspot.com/2010/04/crystal-script-manger-for-php.html#links