我正在审查 java 代码,有很多类要检查,我做了一个正则表达式 找到一个用 java 编写的方法,它不会在 finally block 中关闭 IO 流。
(?s)(?<=public|private|protected).<code>(?<!finally).*?.close\(\)\;</code>
出于某种原因,这不起作用,它甚至匹配那些最终阻塞的方法,所以下面也找到了
public testMethod(){
InputStream stream = .....
try{
//do something
} finally {
if(stream != null){
stream.close();
}
}
}
虽然只有下面应该匹配
public testMethod(){
InputStream stream = .....
//do something
if(stream != null){
stream.close();
}
}
有什么建议吗?
最佳答案
您的正则表达式可能应该是:(?s)(?<=public|private|protected)((?!finally).)*close\(\)\;
.演示 regex101 .
解释:((?!finally).)*
验证字符串的其余部分不包含 finally
.
注意:为了涵盖所有情况,您可能还需要检查 close()
实际上是在finally的 block 里面。您可以使用类似 (?s)(?<=public|private|protected)((?!finally[^}]*close\(\)\;).)*close\(\)\;
的表达式来完成.
关于java - python中的正则表达式不匹配单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958984/