我正在构建一个PHP脚本来缩小CSS/Javascript,这(显然)涉及到从文件中删除注解。有什么想法吗?(最好是,我需要删除/**/和//注解)
/**/
//
gfttwv5a1#
JS中删除注解的模式
$pattern = '/((?:\/\*(?:[^*]|(?:\*+[^*\/]))*\*+\/)|(?:\/\/.*))/';
CSS中删除注解的模式
$pattern = '!/\*[^*]*\*+([^/][^*]*\*+)*/!'; $str = preg_replace($pattern, '', $str);
我希望上面能帮助到一些人。参考:http://castlesblog.com/2010/august/14/php-javascript-css-minification
lymgl2op2#
这个轮子已经被发明出来了--https://github.com/mrclay/minify。
oipij1gg3#
请注意-以下方法并非适用于所有可能的情况。在生产中使用之前进行测试。
没有preg模式,没有任何类似的东西,这可以很容易地用PHP内置的TOKENIZER来完成。(PHP、JS和CSS也是如此)在源文件中表示注解的方式相同,PHP的本机内置token_get_all()函数(不带TOKEN_PARSE标志)可能会造成不良后果,即使输入字符串不是格式良好的PHP代码,这正是一个人可能需要的。它所要求的只是字符串开头的<?php,然后奇迹就发生了。:)
token_get_all()
TOKEN_PARSE
<?php
<?php function no_comments (string $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, '', $tokens); }
其用法大致如下:
echo no_comments ($myCSSorJsStringWithComments);
uwopmtnx4#
看一看minify,一个“基于正则表达式的大量空格、不必要的注解和标记的删除”。
4条答案
按热度按时间gfttwv5a1#
JS中删除注解的模式
CSS中删除注解的模式
我希望上面能帮助到一些人。
参考:http://castlesblog.com/2010/august/14/php-javascript-css-minification
lymgl2op2#
这个轮子已经被发明出来了--https://github.com/mrclay/minify。
oipij1gg3#
请注意-以下方法并非适用于所有可能的情况。在生产中使用之前进行测试。
没有preg模式,没有任何类似的东西,这可以很容易地用PHP内置的TOKENIZER来完成。(PHP、JS和CSS也是如此)在源文件中表示注解的方式相同,PHP的本机内置
token_get_all()
函数(不带TOKEN_PARSE
标志)可能会造成不良后果,即使输入字符串不是格式良好的PHP代码,这正是一个人可能需要的。它所要求的只是字符串开头的<?php
,然后奇迹就发生了。:)其用法大致如下:
uwopmtnx4#
看一看minify,一个“基于正则表达式的大量空格、不必要的注解和标记的删除”。