-2

我正在为 svn 跟踪系统编写代码。我想计算开发人员发表的评论行数。

是否有一个 php 函数来获取两个字符之间的行数?我想获取 /* 和 */ 之间的行数

提前致谢。

4

3 回答 3

2

您可以使用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

在线演示

于 2013-03-12T13:12:25.777 回答
0

您可以使用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
?>
于 2013-03-12T11:38:23.947 回答
0

作为起点,您可以尝试使用PHP 反射库 getDocComment()但是可能不会获取内联注释。

于 2013-03-12T11:38:47.640 回答