查找带有模式的文件

时间:2012-05-24 08:30:41

标签: java regex

我尝试用以下名称搜索文件:ENV20120517你所做的每一件事都是完成的.DAT

所以我将模式设置为:“ENV20120517 *。* DAT”。

 public boolean accept(File dir, String name) {
    if (pattern != null) {
        return name.matches(pattern);
    }
    return false;
 }

为什么使用上一个模式,我认为:name =“ENV20120516053518.DAT”?

3 个答案:

答案 0 :(得分:4)

String.matches()需要regular expression,而不是glob pattern

恰好ENV20120517*.*DAT是有效的正则表达式。但是,它与您期望的内容有不同的含义:它匹配以ENV2012051开头并以DAT结尾的任何字符串(.*匹配任何内容,而7*匹配任何内容1}}实际上是无操作。

以下正则表达式等同于问题ENV20120517.*[.].*DAT

中的模式

有关如何在Java中进行全局匹配的一些想法,请参阅Is there an equivalent of java.util.regex for "glob" type patterns?

答案 1 :(得分:0)

模式应为"ENV20120517.*DAT",因为"ENV20120517*.*DAT",第一个*匹配0个或更多7个字符,因此"ENV20120516053518.DAT".matches("ENV20120517*.*DAT")为真。

答案 2 :(得分:0)

尝试

pattern = "ENV20120517.*\\.DAT"

或者更严格:

pattern = "^ENV20120517.*\\.DAT$"