利用正则表达式统计代码行数

  目录

利用ide编辑器统计代码行数

利用正则表达式统计代码行数

在项目中,我们常常有统计代码行数的需要,但是如果不利用第三方工具的话,面对一个项目(甚至一个工程或解决方案中若干个项目)中成百上千的代码文件,实在有一种力不从心的感觉。

但利用正则表达式可以巧妙解决。用的工具不是别的,正是所有的IDE(Visual Studio、Eclipse等等)和常用的文本编辑器(SublimeText2、Notepad++等)日常必备软件的“在文件中查找”,不同的软件略有不同,但大同小异。

再复杂的IDE,其搜索功能也是基于字符串的匹配进行的。我们知道,文本中每次换行会增加一个 \n 。如果直接用正则\n每一个匹配项就代表一次换行。但需要注意的是文件的最后一行是没有换行符的,所以文本行数=文件数+换行符数目,因而把两个看到的两个数字加起来才是文本行数。

1
^.*$

表示搜索条件为行首与行尾之间包含任意个任意字符(非换行符)。

上面的方法可以很迅速地得到代码行数,不过遗憾的是统计结果把空行(仅包含空格和制表符的行)也统计进去了,然而很多时候我们并不想把这些文本也给算进代码量里去,怎么办呢?别急,我们只要对正则表达式做一点点修改。我的思路是,只需要找出一个不是空格或制表符的字符即可,于是可写出了这个正则表达式

1
^\s*[^\s]+.*$

它表示先忽略一行前面的连续空格和制表符等,然后寻找是否有一个字符不为空格、制表符、换行符和回车符,如果有则表明这行不为空行。
不用

1
^\s*\S+.*$

是为了下面方便添加其他要排除的注释行或者独立的括号行。

在实际项目中,我们或许认为注释行不应成为生产量,应从统计数据中排除出去。我们首先要能够对注释行有一个认识。很多程序设计语言中,注释行都会用“/”或者“#”等字符开头。我们假设项目中的注释行都是以“/”或“#”开头的(请读者考虑自己项目的特点自行修改)。下面的正则表示,我们要查找的是一行中第一个非空字符不是“/”或“#”或“{”或“}”的行

1
2
^\s*[^\s/#{}]+.*$ 
^\s*[^ \t\n\r/#{}]+.*$

作用同上,说明在中括号[]内自定义原子表,打个空格,也可以代表空格。
因为控制开头和结尾,所以 + 后不必加问号 ? 取消贪婪模式了。

1
^\s*[^\s/#{}]+

也行,但是上面加上控制结尾比较严谨。另外,文本编辑框默认是视为单行的,没有设置多行模式,如果设为多行模式就得注意了。php 中,在定界符最右边加 m 即可视为多行。