我正在构建一个PHP脚本来缩小CSS/Javascript,,这(显然)涉及删除文件中的注释。有什么办法吗?(最好,我需要去掉/**/和//注释)
发布于 2013-11-21 12:04:52
JS中删除注释的模式
$pattern = '/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/';CSS中删除注释的模式
$pattern = '!/\*[^*]*\*+([^/][^*]*\*+)*/!';
$str = preg_replace($pattern, '', $str);我希望上面能帮助到某人。
雷夫:http://castlesblog.com/2010/august/14/php-javascript-css-minification
发布于 2010-12-22 15:11:18
那个轮子是发明的-- https://github.com/mrclay/minify。
发布于 2018-10-27 12:51:29
没有preg模式,没有任何类似的东西,这可以很容易地用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);https://stackoverflow.com/questions/4510518
复制相似问题