php 批量删除注释,PHP-php做一个程序高效去除注释的方法
这里我结合手册的方法改造了一个方法,本人测试避免了@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做一个程序高效去除注释的方法相关推荐
- 批量删除Word中向下的小箭头和回车的方法
批量删除Word中向下的小箭头和回车的方法 阅读(13) 评论(0) 发表时间:2008年08月11日 21:34 本文地址:http://qzone.qq.com/blog/231542468-12 ...
- 做一个程序员,是不是“努力就会成功”?现实残酷但又必须面对!
做一个程序员,是不是"努力就会成功"?现实残酷但又必须面对!下面说一下我自己的故事吧. 那一年,我加入了某知名公司的某知名部门,在办公室中,我看到了到处都挂着--"努力就 ...
- 做一个程序媛是一种什么体验?
做一个程序媛是一种什么体验? 可能很多人都觉得,身为程序媛只要有颜值就够了,或者自己颜值不行,可以介绍颜值高的女性朋友们啊!秉着"男女搭配,干活不累"的原则,一个程序媛肯定是超级吃 ...
- 做一个程序员可以改变自己的人生吗?比尔盖茨:真的可以
大部分牛的程序员都改变了一身.比如,马斯克,扎克伯格,比尔盖茨这些. 其实程序员吃香很大一部分原因是在旁人眼里看来,工资高,办公环境舒适,福利待遇好,特别是进了大厂就是给自己镀金了. 人生很大,何为改 ...
- 零基础却想做一个程序员,到底如何学习呢?
众所周知程序员是21世纪比较吃香的工作.程序员工资高还不需要和复杂的社会打交道.那么作为一个零基础,什么都不懂的人该怎么成为一名程序员?当程序员需要学什么?下面就来分析下. 零基础的我该如何学习? 如 ...
- 计算机硬盘 电机 利用,如何利用坏硬盘来做一个超强风扇,变废为宝 利用坏硬盘来做一个超强风扇,变废为宝的方法...
今天给大家带来如何利用坏硬盘来做一个超强风扇,变废为宝,利用坏硬盘来做一个超强风扇,变废为宝的方法,让您轻松解决问题. 店里好多坏硬盘,回收了又值不了几个钱.今天无事,突发奇想,为什么不做个7200风 ...
- Java黑皮书课后题第4章:4.16(随机字符)编写一个程序,使用Math.random()方法显示一个随机的大写字母
4.16(随机字符)编写一个程序,使用Math.random()方法显示一个随机的大写字母 题目 题目概述 破题 生成随机数 随机数与大写字母之间的转换:ASCII 转化为char型 代码 题目 题目 ...
- Linux 下查看某一个程序所使用的内存方法介绍
Linux 下查看某一个程序所使用的内存方法介绍 在 Linux 上进行开发和运营维护的时候,免不了要查看某一个程序所占用内存的情况.常用方法总结如下(注意第四种方法): 第一种:ps -aux | ...
- ubuntu c 判断程序是否启动_刚刚接触编程的我,怎么判断自己是否适合做一个程序员?...
其实对于这个问题,很多刚刚进入大学选择计算机相关专业的小伙伴都会有类似的疑惑,不知道自己该不该学习编程,适不适合学习编程,以后走程序员这条路适不适合自己等等.那么今天,笔者在这里简单来说一下:我们如何 ...
最新文章
- ESI计算机排名2021年01月,喜忧参半!2021年5月ESI世界大学排行榜,21个学科排名数据分析!...
- Oracle创建表空间、创建用户以及授权、查看权限
- 卷进大厂系列之LeetCode刷题笔记:移除链表元素(简单)
- 网页测试本地服务器_音视频开发搭建一个直播服务器
- php 安装curl init,linux下为php添加curl扩展的方法及curl_init函数用法案例详解
- javascript取随机数_查缺补漏一些 Javascript 的小技巧笔记
- 小网站的容器化(下):网站容器化的各种姿势,先跟着撸一波代码再说!
- 「WC 2019」数树
- android 开源 视频播放器,安卓视频播放器——ijkPlayer(Bilibili开源)-Go语言中文社区...
- MAC 安装caffe 教程 排坑
- 假如古人用上了区块链技术
- 相机模型-鱼眼模型/Omnidirectional Camera(1)
- 通过Safari浏览器获取iOS设备UDID(设备唯一标识符)
- Jenkins基础:Jenkinsfile使用实例:12:使用docker.build构建镜像
- UML---序列图/时序图/顺序图
- 亚马逊运营知识:ASIN文案编写技巧
- 一张图读懂一个产业短视频第6期
- 很黄很暴力的图片搜索引擎
- python 静态网站生成_最全的静态网站生成器(开源项目)
- ESP32用Arduino编程实现CAN总线通讯
热门文章
- html表单中怎么写年份,HTML表单
- 遥感影像识别-成像合成
- python与金融量化_day33 Python与金融量化分析(三)
- CSA标准|《物联网安全规范》(征求意见稿)意见征集
- 戴尔联手九大云计算伙伴成立云联盟:通吃混合云
- Java 下载 Excel文件打不开
- XEN的启动信息输出到“Platform timer is 14.318MHz HPET”就暂停接收的解决办法
- python找出列表里大于输出_python找出列表中大于某个阈值的数据段示例
- Kafka学习——基于已有zookeeper集群实现kafka的集成
- 局域网唤醒计算机,电脑远程开机_局域网唤醒电脑 | 茶杯猫