【问题标题】:Java file extension regexJava 文件扩展名正则表达式
【发布时间】:2010-09-19 01:17:58
【问题描述】:

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

干杯, 唐

【问题讨论】:

    标签: java regex


    【解决方案1】:

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

    【讨论】:

    【解决方案2】:
    public boolean isFilename(String filename) {
        int i=filename.lastInstanceOf(".");
        return(i != -1 && i != filename.length - 1)
    }
    

    会明显更快,无论您做什么,将其放入方法中都会更具可读性。

    【讨论】:

      【解决方案3】:
      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);
      
          }
      }
      

      【讨论】:

      • 感谢您发布答案!虽然代码 sn-p 可以回答这个问题,但添加一些附加信息仍然很棒,比如解释等..
      猜你喜欢
      • 1970-01-01
      • 2013-03-18
      • 1970-01-01
      • 2010-12-21
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      相关资源
      最近更新 更多