【问题标题】:Regex in python for not matching wordpython中的正则表达式不匹配单词
【发布时间】:2016-06-22 05:08:58
【问题描述】:

我正在审查 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();
  }
}

任何指针?

【问题讨论】:

  • 没有(public|private|protected)也可以在Java中启动一个方法
  • 感谢您的回复,但假设我们的编码人员对所有方法都使用了访问修饰符。

标签: java python regex review


【解决方案1】:

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

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

注意:为了涵盖所有情况,您可能还需要检查 close() 是否实际上在 finally 块内。你可以用(?s)(?<=public|private|protected)((?!finally[^}]*close\(\)\;).)*close\(\)\;这样的表达式来做到这一点。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 2015-12-13
  • 2011-09-20
  • 1970-01-01
  • 2014-03-14
  • 1970-01-01
相关资源
最近更新 更多