我需要计算.java文件中的所有有效if语句(未注释等)
我试图修改评论项目的正则表达式:
(?:/\\*(?:[^*]|(?:\\*+[^*/]))*\\*+/)|(?://.*)
并想出了这样的事情:
(?!(([\\(])|(/\\*)|(//)))((?=\\s*))(if)(?=[\\s\\(])
但它无法正常工作
我使用此代码进行测试输入:
public class Main () {
public static void main (String[] args) {
boolean ifTrue = true;
if (ifTrue == true) {
String wariant = "wariant";
} else if (ifTrue == false) {
String dupa = "variant";
}
//if(ifTrue == true) {
String wariant2 = "This is second wariant";
//}
if(ifTrue) {
if(ifTrue) {
} else if (ifTrue) {
//if ()
/**if*/
}
}
/*if(ifTrue == true) {
String wariant2 = "To jest wariant 2";
}*/
}
}
这个计数功能:
private static int countRegexInInput(String regex, String input) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
return count;
}
答案 0 :(得分:0)
对于当前的示例代码,只计算IF
语句:
/(?:^|\}\s*else)\s+\bif\b/gm
此正则表达式匹配IF
似乎有效的语句。 (SEE DEMO)
如果您的输入文字是包含此示例的常规和复杂文字:
/* some comments!
if (condition) {
}
*/
使用此版本:(SEE DEMO)
(?:(?:\/\*)[^]*?\*\/|^)[\s\S]*?(?:^|\}?\s*else)\s*\bif\b
^^1 ^^^^^^^^^^^^^^^2 ^^^^^^3 ^^^^^^^^^^^^^^^^^^^4
说明
1-匹配Group 2
或新行^
的所有内容。
2-查找/*
并计算捕获到*/
3-匹配并传递字符,直到找到新的IF
4- IF
语句后跟^
之后或else
之后的一个/多个空格。
注意:如果这还不够,这个正则表达式模式可以改进以获得更好的匹配!
答案 1 :(得分:0)
这个正则表达式似乎适合我的情况:
([^e]\\s)(if)(\\s?\\((\\D[^\\)]+)\\))