Java文件扩展名正则表达式

时间:2008-10-24 16:27:03

标签: java regex

我正在尝试提出一个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。我哪里错了?

干杯, 唐

3 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:8)

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

显着更快,无论你做什么,把它放在一个方法中会更具可读性。

答案 2 :(得分: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);

    }
}
相关问题