我似乎无法找到一个简明的答案,因为我对正则表达式知之甚少,我觉得最简单的选择就是问。
我正在尝试计算eclipse中的代码行,我可以这样做,但它包含了注释。
基本上,我的正则表达式是“\ n”
非常基本,是的,但尽可能地尝试,我似乎无法找到一种方法来忽略以“//”开头的行
我已经尝试了[^(//)],但这似乎计算了每个“/”。没有分隔符,我尝试了同样的事情:“\”
任何想法,即使你只是指出我正确的方向,我的谷歌搜索没有发现任何有用的。
答案 0 :(得分:4)
最好在这里使用negative lookahead。对于您的案例代码,这将起作用:
String str = "Line1\n" +
"/Line2\n" +
"//Line3\n" +
"Line4\n" +
" // Line5\n" +
"Line6\n";
Pattern pt = Pattern.compile("^(?!\\s*//)", Pattern.MULTILINE);
matcher matcher = pt.matcher(str);
int c=0;
while (matcher.find()) c++;
System.out.println("# of lines: " + c);
# of lines: 4
(?!\\s*//)
是负面预测,只有当 1> <{1}}行时才会说匹配
正如您所看到的,从评论0 or more spaces followed by //
开始,上面有2行,因此不计算在内
此外,在此处使用//
标记使每一行都能识别行字符Pattern.MULTILINE
的开头也很重要。
答案 1 :(得分:1)
简化正则表达式,如果您需要更多,将会改进:
^//
[]
中的任何内容都是一个字符类,这意味着匹配其中的一个符号。此外,添加^
与此相反,并且与计算字符串开头的^
外部不同。
您还可以执行以下操作:
^[^/][^/].*
匹配不以//
答案 2 :(得分:1)
有更好的方法和其他工具来计算代码行,例如测试覆盖率工具或(我不知道这是否仍适用于最新版本):http://metrics.sourceforge.net/
如果您忽略//
,那么您仍然会计算package
和import
声明以及多行注释,例如:
/**
* Javadoc
*/
或单独坐在以下行上的括号:
while(...)
{
...
}
答案 3 :(得分:0)
我不熟悉eclipse,但是如果它有预测,那就应该这样做:
\n(?!//)
答案 4 :(得分:0)
^ \ S *(?!//)\ S * $
突出显示以任意数量的空格(\ s *“)开头的任何行(”^“),然后不开始注释(”(?!//)“),然后有一个非空格字符( “\ S”),然后有任意数量的任何字符,直到行尾(“。* $”)。