首页 > 解决方案 > Java 正则表达式在匹配时返回 false

问题描述

我基本上是在尝试过滤以 .ack.gz 结尾的文件名

例如字符串文件名 = “somefile.ack.gz”

return filename.matches(".ack.gz$");  returns false
return filename.matches("\\.ack\\.gz$");  returns false

这些不应该匹配吗?不知道我在这里错过了什么......

标签: java

解决方案


String.matches方法 ( javadoc ) 测试正则表达式是否匹配整个目标字符串。

但是在您的示例中,正则表达式".ack.gz$"并不匹配"somefile.ack.gz". 因此匹配返回false

如果您真的想使用正则表达式来执行此操作,那么您的代码应该是:

return filename.matches(".*\\.ack\\.gz");

笔记:

  1. 匹配文件名的.*第一部分。
  2. \\.表示匹配文字.字符。如果您没有转义,则.匹配任何单个字符。需要双重转义,因为该模式被表示为 Java 字符串文字。
  3. 前导^和尾随$是不必要的。它们被的语义所暗示match

但是正如@kaya 指出的那样,最好在此处使用String.endsWithjavadoc),因为您不需要此测试的正则表达式功能。


推荐阅读