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

标签 java python regex review

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

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

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

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的 block 里面。您可以使用类似 (?s)(?<=public|private|protected)((?!finally[^}]*close\(\)\;).)*close\(\)\; 的表达式来完成.

关于java - python中的正则表达式不匹配单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37958984/

相关文章:

java - GTGE 的 Java 数学问题

java - 类别未被识别

Python MySQLdb,完整插入查询执行,忽略错误插入

python - 将切片变为范围

php - 正则表达式匹配以 %% 开头和结尾的字符串

Java 正则表达式 : Word Boundary Matcher in a String Literal

java - 为什么 Java 不支持比较器行的相等性比较?

java - 将文本文件附加到 StringBuffer 后,有没有办法恢复换行符?

python - 如何在Qprinter pyqt5中打印带有图像的html页面

regex - Haskell无法编译正则表达式代码