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\(\)\;.

这样的表达式来完成