FileNameFilter实现的Java正则表达式

时间:2012-08-23 09:19:01

标签: java regex

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

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。

3 个答案:

答案 0 :(得分:1)

  

我对<one or more characters of any type>-<single digit>.<single digit>.xml

感到满意

任何类型的字符”是正则表达式中的危险语句!如果我们通过假设您对任何字母或数字感到满意来限制此更好。根据这个假设,你想要:

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

将匹配a-z,A-Z,0-9范围内的字符,后跟连字符,一位数,一个句点,一位数和.xml

答案 1 :(得分:1)

Regexr上看到它的实际操作:

^\w+-\d\.\d\.xml

答案 2 :(得分: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路径分隔符替换^