4

我需要扫描文件夹并过滤与特定正则表达式模式匹配的文件。

FileNameFilter 的 accept 方法中的示例代码


Scanner fileNameScanner = new Scanner(fileName);

Pattern mainPattern = Pattern.compile(this.pattern);

fileNameScanner.findInLine(mainPattern);

MatchResult result = fileNameScanner.match();

现在,我需要一个正则表达式来过滤匹配名称为 impl-2.0.xml 的文件的文件,同时它不应该匹配 impl-Test-2.0.xml。

我尝试了一些设置,但似乎不起作用。它也选择 impl-Test-2.0.xml。

4

3 回答 3

1

我很高兴<one or more characters of any type>-<single digit>.<single digit>.xml

任何类型的字符”是正则表达式中的危险语句!如果我们通过假设您对任何字母或数字感到满意来限制这一点会更好。基于该假设,您希望:

Pattern p = Pattern.compile("\\w+-\\d\\.\\d\\.xml");

它将匹配 az、AZ、0-9 范围内的字符,后跟连字符、一位数字、句点、一位数字和.xml.

于 2012-08-23T12:34:13.567 回答
1

在Regexr上查看它的实际效果:

^\w+-\d\.\d\.xml
于 2012-08-23T12:36:34.000 回答
0

评论后编辑

对于大小数量有限的绝对路径

Pattern.compile(".*impl-[0-9]{1,2}\\.[0-9]{1,2}.xml");

对于名称文件:

Pattern.compile("impl-[0-9]+\\.[0-9]+.xml");

编辑 2

final Pattern patt = Pattern.compile("^\\p{Alnum}+\\-[0-9]+\\.[0-9]+.xml$");

安慰

impl-3.0.xml
api-3.0.xml
x10-2.0.xml

^如果您 grep 绝对路径,则可以用 Java 路径分隔符替换

于 2012-08-23T11:54:42.237 回答