我想找一个块使用正则表达式。这里使用下面的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("................");
}
提前致谢
答案 0 :(得分:0)
因为{}
可以在理论上无限期地嵌套,所以在正则表达式中你无法可靠地匹配。如果你知道你的try
区块有一个catch
(它应该有)你可以将它与正则表达式的这个怪物匹配(必须避免匹配单词try
或catch
当他们在字符串或评论中时。)
您的代码块将位于捕获组2内。
(['"])(?:(?!\1|\\).|\\.)*\1|\/\/[^\n]*(?:\n|$)|\/\*(?:[^*]|\*(?!\/))*\*\/|(\btry\b(?:(['"])(?:(?!\3|\\).|\\.)*\3|\/\/[^\n]*(?:\n|$)|\/\*(?:[^*]|\*(?!\/))*\*\/|(?:[^c]|\Bc|c(?!atch)|catch\B))*\bcatch\b)
答案 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,基础知识可以很快学到,它可以在很多情况下帮助你,而不仅仅是这一项任务。