python中的正则表达式不匹配单词

时间:2016-06-22 05:08:59

标签: java python regex review

我正在审查java代码,有很多类要检查,我做了一个正则表达式 找到一个用java编写的方法,它不会在finally块中关闭IO流。

(?s)(?<=public|private|protected).(?<!finally).*?.close\(\)\;

由于某些原因,这不起作用,它甚至匹配那些最终阻止的方法,所以下面也找到了

(?<!finally).*?.close\(\)\;

虽然只有下面应匹配

public testMethod(){
   InputStream stream = .....
   try{ 
     //do something
   } finally {
      if(stream != null){
         stream.close();
      }
   }
}

任何指针?

1 个答案:

答案 0 :(得分:1)

你的正则表达式应该是:(?s)(?<=public|private|protected)((?!finally).)*close\(\)\;。在regex101上演示。

解释((?!finally).)*验证字符串的其余部分是否包含finally

注意:为了涵盖所有情况,您可能还想检查close()是否实际位于finally块中。您可以使用(?s)(?<=public|private|protected)((?!finally[^}]*close\(\)\;).)*close\(\)\;等表达式来执行此操作。