[英]Regex in python for not matching word
我正在审查java代码并且有很多类要检查,我做了一个正则表达式来找到一个用java编写的方法,它不会在finally块中关闭IO流。
(?s)(?<=public|private|protected).
(?<!finally).*?.close\\(\\)\\;
由于某种原因,这不起作用,它甚至匹配最终阻塞的那些方法,所以下面也找到了
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块中。 您可以使用类似(?s)(?<=public|private|protected)((?!finally[^}]*close\\(\\)\\;).)*close\\(\\)\\;
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.