Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用PHP计算源代码中的有效行数_Php_Regex_Parsing - Fatal编程技术网

用PHP计算源代码中的有效行数

用PHP计算源代码中的有效行数,php,regex,parsing,Php,Regex,Parsing,我正在编写一个PHP程序,它读取包含file\u get\u内容的文件,然后尝试计算源文件中的有效行数。它不能计算空行或仅包含注释的行。示例文件: <?php /** * blah blah */ class Test { // testfunc function testfunc(){ return; } } 我只是使用然后测试每一行 foreach ($lines as $line) { if (strlen(tr

我正在编写一个PHP程序,它读取包含
file\u get\u内容的文件
,然后尝试计算源文件中的有效行数。它不能计算空行或仅包含注释的行。示例文件:

<?php

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


         return;
     }
}
我只是使用然后测试每一行

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

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

/^[\s\t]*$/
更改为
/^\s*$/ms
,这应该可以解决它。
\s
类包含选项卡,因此无需添加
\t
。当数据包含多行(匹配换行符)时,
s
使其与换行符匹配,
m
选项使
^
$
起作用


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

小心模式
/\*.*?\*/
:它会在如下输入时中断:
$s='string/*literal'非PHP部分(例如HTML)是否也算作行,或者它们不会算作行?不要重新发明轮子,如果你觉得有必要重新发明轮子,请正确地做。为PHP lexer编写一个lexer。没那么难。@deinan:他甚至不需要。他可以直接使用
令牌(你得到所有()@佩卡,评论会变得棘手。我刚刚添加了一条说明,说明他可以使用此模式逐步完成这些行,然后添加其他条件。太棒了。这帮我解决了,谢谢。我将重新格式化我的问题,以便更好地反映我的问题。
    $f=preg_replace('/ */','',$f);   // removes all spaces properly.
foreach ($lines as $line) {
    if (strlen(trim($line)) > 0) {
        $total++;
    }
}