我需要扫描文件夹并过滤与特定正则表达式模式匹配的文件。
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。
答案 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路径分隔符替换^