3

我尝试使用如下名称搜索文件:ENV20120517 每一件事你做什么并由 .DAT 完成

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

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

为什么对于前面的模式,我得到了正确的:name = "ENV20120516053518.DAT" ?

4

3 回答 3

4

String.matches()采用正则表达式,而不是glob 模式

碰巧这ENV20120517*.*DAT是一个有效的正则表达式。但是,它确实与您所期望的含义不同:它匹配任何以开头ENV2012051和结尾的字符串DAT.*匹配任何内容,并且7*实际上是无操作)。

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

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

于 2012-05-24T08:33:52.280 回答
0

尝试

pattern = "ENV20120517.*\\.DAT"

或者更严格地说:

pattern = "^ENV20120517.*\\.DAT$"
于 2012-05-24T09:45:29.450 回答
0

部分应该是"ENV20120517.*DAT",因为"ENV20120517*.*DAT",第一个*匹配 0 个或更多 7 个字符,所以"ENV20120516053518.DAT".matches("ENV20120517*.*DAT")是真的。

于 2012-05-24T08:40:24.327 回答