这里我结合手册的方法改造了一个方法,本人测试避免了@lee中出现在“?>”的结尾是无法去除注释的问题,大家试一试:

function replace_php_src($src) {

static $IW = array(

T_CONCAT_EQUAL, // .=

T_DOUBLE_ARROW, // =>

T_BOOLEAN_AND, // &&

T_BOOLEAN_OR, // ||

T_IS_EQUAL, // ==

T_IS_NOT_EQUAL, // != or <>

T_IS_SMALLER_OR_EQUAL, // <=

T_IS_GREATER_OR_EQUAL, // >=

T_INC, // ++

T_DEC, // --

T_PLUS_EQUAL, // +=

T_MINUS_EQUAL, // -=

T_MUL_EQUAL, // *=

T_DIV_EQUAL, // /=

T_IS_IDENTICAL, // ===

T_IS_NOT_IDENTICAL, // !==

T_DOUBLE_COLON, // ::

T_PAAMAYIM_NEKUDOTAYIM, // ::

T_OBJECT_OPERATOR, // ->

T_DOLLAR_OPEN_CURLY_BRACES, // ${

T_AND_EQUAL, // &=

T_MOD_EQUAL, // %=

T_XOR_EQUAL, // ^=

T_OR_EQUAL, // |=

T_SL, // <<

T_SR, // >>

T_SL_EQUAL, // <<=

T_SR_EQUAL, // >>=

);

if(is_file($src)) {

if(!$src = file_get_contents($src)) {

return false;

}

}

$tokens = token_get_all(substr ($src, 0, -2));

$new = "";

$c = sizeof($tokens);

$iw = false; // ignore whitespace

$ih = false; // in HEREDOC

$ls = ""; // last sign

$ot = null; // open tag

for($i = 0; $i < $c; $i++) {

$token = $tokens[$i];

if(is_array($token)) {

list($tn, $ts) = $token; // tokens: number, string, line

$tname = token_name($tn);

if($tn == T_INLINE_HTML) {

$new .= $ts;

$iw = false;

} else {

if($tn == T_OPEN_TAG) {

if(strpos($ts, " ") || strpos($ts, "n") || strpos($ts, "t") || strpos($ts, "r")) {

$ts = rtrim($ts);

}

$ts .= " ";

$new .= $ts;

$ot = T_OPEN_TAG;

$iw = true;

} elseif($tn == T_OPEN_TAG_WITH_ECHO) {

$new .= $ts;

$ot = T_OPEN_TAG_WITH_ECHO;

$iw = true;

} elseif($tn == T_CLOSE_TAG) {

if($ot == T_OPEN_TAG_WITH_ECHO) {

$new = rtrim($new, "; ");

} else {

$ts = " ".$ts;

}

$new .= $ts;

$ot = null;

$iw = false;

} elseif(in_array($tn, $IW)) {

$new .= $ts;

$iw = true;

} elseif($tn == T_CONSTANT_ENCAPSED_STRING

|| $tn == T_ENCAPSED_AND_WHITESPACE)

{

if($ts[0] == '"') {

$ts = addcslashes($ts, "ntr");

}

$new .= $ts;

$iw = true;

} elseif($tn == T_WHITESPACE) {

$nt = @$tokens[$i+1];

if(!$iw && (!is_string($nt) || $nt == '$') && !in_array($nt[0], $IW)) {

$new .= " ";

}

$iw = false;

} elseif($tn == T_START_HEREDOC) {

$new .= "<<

$iw = false;

$ih = true; // in HEREDOC

} elseif($tn == T_END_HEREDOC) {

$new .= "S;";

$iw = true;

$ih = false; // in HEREDOC

for($j = $i+1; $j < $c; $j++) {

if(is_string($tokens[$j]) && $tokens[$j] == ";") {

$i = $j;

break;

} else if($tokens[$j][0] == T_CLOSE_TAG) {

break;

}

}

} elseif($tn == T_COMMENT || $tn == T_DOC_COMMENT) {

$iw = true;

} else {

if(!$ih) {

$ts = strtolower($ts);

}

$new .= $ts;

$iw = false;

}

}

$ls = "";

} else {

if(($token != ";" && $token != ":") || $ls != $token) {

$new .= $token;

$ls = $token;

}

$iw = true;

}

}

return $new.' ?>';

}

//大家可以这样测试一下

file_put_contents('test1.php',replace_php_src('test.php'));

php 批量删除注释,PHP-php做一个程序高效去除注释的方法相关推荐

  1. 批量删除Word中向下的小箭头和回车的方法

    批量删除Word中向下的小箭头和回车的方法 阅读(13) 评论(0) 发表时间:2008年08月11日 21:34 本文地址:http://qzone.qq.com/blog/231542468-12 ...

  2. 做一个程序员,是不是“努力就会成功”?现实残酷但又必须面对!

    做一个程序员,是不是"努力就会成功"?现实残酷但又必须面对!下面说一下我自己的故事吧. 那一年,我加入了某知名公司的某知名部门,在办公室中,我看到了到处都挂着--"努力就 ...

  3. 做一个程序媛是一种什么体验?

    做一个程序媛是一种什么体验? 可能很多人都觉得,身为程序媛只要有颜值就够了,或者自己颜值不行,可以介绍颜值高的女性朋友们啊!秉着"男女搭配,干活不累"的原则,一个程序媛肯定是超级吃 ...

  4. 做一个程序员可以改变自己的人生吗?比尔盖茨:真的可以

    大部分牛的程序员都改变了一身.比如,马斯克,扎克伯格,比尔盖茨这些. 其实程序员吃香很大一部分原因是在旁人眼里看来,工资高,办公环境舒适,福利待遇好,特别是进了大厂就是给自己镀金了. 人生很大,何为改 ...

  5. 零基础却想做一个程序员,到底如何学习呢?

    众所周知程序员是21世纪比较吃香的工作.程序员工资高还不需要和复杂的社会打交道.那么作为一个零基础,什么都不懂的人该怎么成为一名程序员?当程序员需要学什么?下面就来分析下. 零基础的我该如何学习? 如 ...

  6. 计算机硬盘 电机 利用,如何利用坏硬盘来做一个超强风扇,变废为宝 利用坏硬盘来做一个超强风扇,变废为宝的方法...

    今天给大家带来如何利用坏硬盘来做一个超强风扇,变废为宝,利用坏硬盘来做一个超强风扇,变废为宝的方法,让您轻松解决问题. 店里好多坏硬盘,回收了又值不了几个钱.今天无事,突发奇想,为什么不做个7200风 ...

  7. Java黑皮书课后题第4章:4.16(随机字符)编写一个程序,使用Math.random()方法显示一个随机的大写字母

    4.16(随机字符)编写一个程序,使用Math.random()方法显示一个随机的大写字母 题目 题目概述 破题 生成随机数 随机数与大写字母之间的转换:ASCII 转化为char型 代码 题目 题目 ...

  8. Linux 下查看某一个程序所使用的内存方法介绍

    Linux 下查看某一个程序所使用的内存方法介绍 在 Linux 上进行开发和运营维护的时候,免不了要查看某一个程序所占用内存的情况.常用方法总结如下(注意第四种方法): 第一种:ps -aux | ...

  9. ubuntu c 判断程序是否启动_刚刚接触编程的我,怎么判断自己是否适合做一个程序员?...

    其实对于这个问题,很多刚刚进入大学选择计算机相关专业的小伙伴都会有类似的疑惑,不知道自己该不该学习编程,适不适合学习编程,以后走程序员这条路适不适合自己等等.那么今天,笔者在这里简单来说一下:我们如何 ...

最新文章

  1. ESI计算机排名2021年01月,喜忧参半!2021年5月ESI世界大学排行榜,21个学科排名数据分析!...
  2. Oracle创建表空间、创建用户以及授权、查看权限
  3. 卷进大厂系列之LeetCode刷题笔记:移除链表元素(简单)
  4. 网页测试本地服务器_音视频开发搭建一个直播服务器
  5. php 安装curl init,linux下为php添加curl扩展的方法及curl_init函数用法案例详解
  6. javascript取随机数_查缺补漏一些 Javascript 的小技巧笔记
  7. 小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!
  8. 「WC 2019」数树
  9. android 开源 视频播放器,安卓视频播放器——ijkPlayer(Bilibili开源)-Go语言中文社区...
  10. MAC 安装caffe 教程 排坑
  11. 假如古人用上了区块链技术
  12. 相机模型-鱼眼模型/Omnidirectional Camera(1)
  13. 通过Safari浏览器获取iOS设备UDID(设备唯一标识符)
  14. Jenkins基础:Jenkinsfile使用实例:12:使用docker.build构建镜像
  15. UML---序列图/时序图/顺序图
  16. 亚马逊运营知识:ASIN文案编写技巧
  17. 一张图读懂一个产业短视频第6期
  18. 很黄很暴力的图片搜索引擎
  19. python 静态网站生成_最全的静态网站生成器(开源项目)
  20. ESP32用Arduino编程实现CAN总线通讯

热门文章

  1. html表单中怎么写年份,HTML表单
  2. 遥感影像识别-成像合成
  3. python与金融量化_day33 Python与金融量化分析(三)
  4. CSA标准|《物联网安全规范》(征求意见稿)意见征集
  5. 戴尔联手九大云计算伙伴成立云联盟:通吃混合云
  6. Java 下载 Excel文件打不开
  7. XEN的启动信息输出到“Platform timer is 14.318MHz HPET”就暂停接收的解决办法
  8. python找出列表里大于输出_python找出列表中大于某个阈值的数据段示例
  9. Kafka学习——基于已有zookeeper集群实现kafka的集成
  10. 局域网唤醒计算机,电脑远程开机_局域网唤醒电脑 | 茶杯猫