我正在编写一个用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.
答案 0 :(得分:1)
将/^[\s\t]*$/
更改为/^\s*$/ms
,这应该解决它
\s
类包含标签,因此无需添加\t
。 s
使其与换行符匹配,m
选项使^
和$
在数据包含多行(匹配换行符)时有效。
此外,最好将/\n\n/s
更改为/[\r\n]{2,}/
。
答案 1 :(得分:0)
我只想使用trim()
,然后测试每一行。
foreach ($lines as $line) {
if (strlen(trim($line)) > 0) {
$total++;
}
}
然后,您也可以设置为测试其他条件,例如评论行和不是。我怀疑这比在一个可能很大的文档上执行查找/替换要快,但你应该测试它,并选择最快的方法。