我正在为 svn 跟踪系统编写代码。我想计算开发人员发表的评论行数。
是否有一个 php 函数来获取两个字符之间的行数?我想获取 /* 和 */ 之间的行数
提前致谢。
您可以使用Tokenizer解析 PHP 源文件,然后计算评论。
例子
$source = file_get_contents('source.php');
$tokens = token_get_all($source);
$comments = array_filter($tokens, function($token) {
return $token[0] === T_COMMENT;
});
echo "Number of comments: " . count($comments);
请注意,这会计算评论的数量,要计算行数,您必须另外计算换行符$token[1]
(实际评论)。
更新
我想试试看,给你:
$source = <<<PHP
<?php
/*
* comment 1
*/
function f() {
echo 'hello'; // comment 2
// comment 3
echo 'hello'; /* OK, this counts as */ /* three lines of comments */ // because there are three comments
}
PHP;
$tokens = token_get_all($source);
$comments = array_filter($tokens, function($token) {
return $token[0] === T_COMMENT;
});
$lines = array_reduce($comments, function(&$result, $item) {
return $result += count(explode("\n", trim($item[1])));
}, 0);
echo "Number of comments: ", count($comments), "\n";
echo "Lines of comments: ", $lines;
输出
Number of comments: 6
Lines of comments: 8
您可以使用preg_replace
删除/* */
标签之间的所有内容,然后计算行数。
<?php
$string = <<<END
just a test with multiple line
/*
some comments
test
*/
and some more lines
END;
$lines = explode(chr(10), $string);
echo 'line count: ' . (count($lines)+1) . '<br>';
//line count: 10
$pattern = '/\/\*(.*)\*\//s';
$replacement = '';
$string = preg_replace($pattern, $replacement, $string);
$lines = explode(chr(10), $string);
echo 'line count: ' . (count($lines)+1);
//line count: 6
?>
作为起点,您可以尝试使用PHP 反射库 getDocComment()但是可能不会获取内联注释。