我正在构建一个PHP脚本来缩小 CSS / Javascript ,这显然涉及从文件中删除注释。任何想法如何做到这一点? (最好,我需要摆脱/**/
和//
评论)
答案 0 :(得分:5)
用于删除JS中的注释的模式
$pattern = '/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/';
用于删除CSS中的注释的模式
$pattern = '!/\*[^*]*\*+([^/][^*]*\*+)*/!';
$str = preg_replace($pattern, '', $str);
我希望以上可以帮助别人..
REFF:http://castlesblog.com/2010/august/14/php-javascript-css-minification
答案 1 :(得分:4)
这个轮子已被发明 - http://code.google.com/p/minify/。
答案 2 :(得分:1)
看看minify,“基于正则表达式的重复删除空格,不必要的注释和标记。”
答案 3 :(得分:0)
没有预浸模式,没有任何类似之处,可以使用PHP内置的TOKENIZER轻松完成。所有这三个(以及PHP,JS和CSS)都以相同的方式在源文件中表示注释,并且PHP的本机内置token_get_all()
函数(不带有TOKEN_PARSE
标志)甚至可以起到肮脏的作用。如果输入的字符串格式不正确的PHP代码,则在这种情况下可能正是需要的。它要求的只是在字符串的开头<?php
,然后发生魔术。 :)
function no_comments ($tokens)
{ // Remove all block and line comments in css/js files with PHP tokenizer.
$remove = [];
$suspects = ['T_COMMENT', 'T_DOC_COMMENT'];
$iterate = token_get_all ('<?php '. PHP_EOL . $tokens);
foreach ($iterate as $token)
{
if (is_array ($token))
{
$name = token_name ($token[0]);
$chr = substr($token[1],0,1);
if (in_array ($name, $suspects)
&& $chr !== '#') $remove[] = $token[1];
}
}
return str_replace ($remove, null, $tokens);
}
用法如下:
echo no_comments ($myCSSorJsStringWithComments);