寻找一种简单的方法来删除我的所有TODO:整个脚本目录中的注释。
如果我有:
/*
TODO: Some text here
Some more Here
Some more Here
*/
我想删除/ * Everything in Between和* /并不是一个大问题,只是想知道减少文件大小
这是一个开始:
$file = 'somefile.php';
$f = fopen($file,'r');
$temp = dirname($file).'/temp.php';
print_r($temp);
$t = fopen($temp, 'w');
$mode = 'write';
$buffer = [];
while($line=fgets($f)){
print_r($mode."\n");
switch($mode){
case 'write':
if(preg_match('/^\s*\/\\*/', $line)){
$buffer[] = $line;
$mode = 'comment';
}else{
fputs($t,$line);
}
break;
case 'comment':
if(preg_match('/^\s*\\**\s*@TODO/i', $line)){
$buffer = [];
$mode = 'skip';
}else if(preg_match('/^\s*\\*\//', $line)){
fwrite($t,implode("", $buffer));
$buffer = [];
fputs($t,$line);
$mode = 'write';
}else{
$buffer[] = $line;
}
break;
case 'skip':
if(preg_match('/^\s*\\*\//', $line)){
$mode = 'write';
}
break;
}
}
/*
fclose($t);
fclose($f);
rename($temp, $file);
*/
我针对这个文件测试了它
<?php
$var= "foo";
/*
@todo hello
some other shuff
*/
/**
*
* @author Me
*
*/
class someclass{
}
这是temp.php
的东西
<?php
$var= "foo";
/**
*
* @author Me
*
*/
class someclass{
}
希望能帮助到你。在尝试此操作之前,我可能会备份您的文件。
UPDATE
不得不修复一些小的东西,所以它会跳过没有@todo
的评论。其余的你可以很容易地解决。
正则表达式只是为了考虑这样的空格或注释
/*
* @todo
*/
这个\\*
成为正则表达式引擎的\*
,然后成为字面上的*
。
所以这一个\s*\/\\*
\s*
- 没有或多个空格\/
- /
字面意思\\*
- *
字面意思或者用英语/*
打开评论标签。
我之所以提到这一点是因为正则表达式很棘手,但你可能还有空格和其他内容,可能每个@todo
都不是第一件事。
像这样做,你可以自己处理每一行,它简化了事情,更重要的是提高了匹配的准确性。