python 中的正则表达式不匹配单词
Regex in python for not matching word
我正在审查 java 代码,有很多 类 需要检查,我制作了一个正则表达式
找到一个用 java 编写的方法,它不会在 finally 块中关闭 IO 流。
(?s)(?<=public|private|protected).<code>(?<!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\(\)\;
.
这样的表达式来完成
我正在审查 java 代码,有很多 类 需要检查,我制作了一个正则表达式 找到一个用 java 编写的方法,它不会在 finally 块中关闭 IO 流。
(?s)(?<=public|private|protected).<code>(?<!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\(\)\;
.