用PHP计算源代码中的有效行数
我正在编写一个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
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++;
}
}