计算.java文件中所有有效的if语句

时间:2017-03-11 21:06:33

标签: java regex grep match regex-lookarounds

我需要计算.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;
}

2 个答案:

答案 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[^\\)]+)\\))