通过PHP计算源中的有效行数

时间:2011-11-02 20:12:22

标签: php regex parsing

我正在编写一个用file_get_contents读取文件的PHP程序,然后尝试计算该源文件中的有效行。它不能只计算包含注释的空行或行。样本文件:

<?php

/**
  * blah blah
  */
class Test {
     // testfunc
     function testfunc(){


         return;
     }
}

这样一个文件中的行数应为5.以下是我到目前为止的内容:

    $f=file_get_contents($this->file);
    $f=preg_replace('|/\*.*?\*/|s','',$f);
    $f=preg_replace('/^\s*$/','',$f);  // <-- does not work
    $f=preg_replace("/\n\n*/s","\n",$f);
    $count=count(explode("\n",$f));

但由于某种原因,它并没有消除白色空间。有没有更好的方法来完成这项工作?


以下代码完成了这项工作,因为我不太关心空格,但我仍然想知道,为什么标有“不起作用”的原始行不会从空行中删除空格。最后还有一些额外的角色吗?文件格式为unix。

    $f=preg_replace('/ */','',$f);   // removes all spaces properly.

2 个答案:

答案 0 :(得分:1)

/^[\s\t]*$/更改为/^\s*$/ms,这应该解决它 \s类包含标签,因此无需添加\ts使其与换行符匹配,m选项使^$在数据包含多行(匹配换行符)时有效。

此外,最好将/\n\n/s更改为/[\r\n]{2,}/

答案 1 :(得分:0)

我只想使用trim(),然后测试每一行。

foreach ($lines as $line) {
    if (strlen(trim($line)) > 0) {
        $total++;
    }
}

然后,您也可以设置为测试其他条件,例如评论行和不是。我怀疑这比在一个可能很大的文档上执行查找/替换要快,但你应该测试它,并选择最快的方法。