使用正则表达式在try块中查找特定字符串

时间:2014-09-09 07:09:49

标签: java regex

我想找一个块使用正则表达式。这里使用下面的reg表达式来查找只有“logger.error(”................“)”的try块,并且块中没有业务逻辑。请参阅以下代码示例代码参考

尝试[\ s]的 \ {((/ \ (|。[\ r \ n])的 \ /)|?\ S)* \}

因此,请提供如何使用explain来查找try块中的logger.error

例如:

try {

System.out.println("......");
        /*
         * fsdsddgd ddgdgdfg gdfgdgdfg gdfgdfg fgdfgfg
         */

        /*
         * fsdsddgd ddgdgdfg gdfgdgdfg gdfgdfg fgdfgfg
         */
//single line comments
logger.error("................");

    }

提前致谢

2 个答案:

答案 0 :(得分:0)

因为{}可以在理论上无限期地嵌套,所以在正则表达式中你无法可靠地匹配。如果你知道你的try区块有一个catch(它应该有)你可以将它与正则表达式的这个怪物匹配(必须避免匹配单词trycatch当他们在字符串或评论中时。)

您的代码块将位于捕获组2内。

(['"])(?:(?!\1|\\).|\\.)*\1|\/\/[^\n]*(?:\n|$)|\/\*(?:[^*]|\*(?!\/))*\*\/|(\btry\b(?:(['"])(?:(?!\3|\\).|\\.)*\3|\/\/[^\n]*(?:\n|$)|\/\*(?:[^*]|\*(?!\/))*\*\/|(?:[^c]|\Bc|c(?!atch)|catch\B))*\bcatch\b)

Regular expression visualization

Debuggex Demo

答案 1 :(得分:0)

正如已经说过的评论一样,仅用一个RegEx就无法做到这一点。 当我偶然发现这些任务时,我喜欢使用AWK脚本。

/try/{
 //You found the start of a try block
 printLineNumber = true;
}

/logger\.error/{
 if(printLineNumber){
  print NR; //NR is an AWK field, that contains the current line number
 }
}

/catch/{
 //You found the end of a try block
 printLineNumber = false;
}

我没有尝试过这段代码,因此它可以立即获胜。 谷歌有点为AWK,基础知识可以很快学到,它可以在很多情况下帮助你,而不仅仅是这一项任务。