Java文件扩展名正则表达式

4
我将尝试编写一个Java正则表达式,只有当文件名具有有效扩展名时才匹配。例如,它应该匹配"foo.bar"和"foo.b",但不匹配"foo."或"foo"。
我已经编写了以下测试程序。
public static void main(String[] args) {
  Pattern fileExtensionPattern = Pattern.compile("\\.\\w+\\z");

  boolean one = fileExtensionPattern.matcher("foo.bar").matches();
  boolean two = fileExtensionPattern.matcher("foo.b").matches();
  boolean three = fileExtensionPattern.matcher("foo.").matches();
  boolean four = fileExtensionPattern.matcher("foo").matches();

  System.out.println(one + " " + two + " " + three + " " + four);
}

我希望这段代码输出"true true false false",但实际上它对于所有4个情况都输出了false。我哪里出错了呢?
谢谢, Don
3个回答

10

Matcher.matches() 函数尝试将模式与整个输入进行匹配。因此,您需要将 .* 添加到您的正则表达式开头(并且末尾的 \\Z 也是多余的),或使用 find() 方法。


此外,Don 可以考虑将他的正则表达式包装在 FileFilter 中:http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileFilter.html - Chris Dolan

8
public boolean isFilename(String filename) {
    int i=filename.lastInstanceOf(".");
    return(i != -1 && i != filename.length - 1)
}

这将显著提高速度,并且无论您做什么,将其放入方法中将更易读。


0
package regularexpression;

import java.io.File;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularFile {
    public static void main(String[] args) {
        new RegularFile();
    }

    public RegularFile() {

        String fileName = null;
        boolean bName = false;
        int iCount = 0;
        File dir = new File("C:/regularfolder");
        File[] files = dir.listFiles();
        System.out.println("List Of Files ::");

        for (File f : files) {

            fileName = f.getName();
            System.out.println(fileName);

            Pattern uName = Pattern.compile(".*l.zip.*");
            Matcher mUname = uName.matcher(fileName);
            bName = mUname.matches();
            if (bName) {
                iCount++;

            }
        }
        System.out.println("File Count In Folder ::" + iCount);

    }
}

感谢您发布答案!虽然代码片段可以回答问题,但添加一些额外的信息,如解释等,仍然很棒。 - j0k

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接