在正则表达式中排除

时间:2013-06-12 11:31:05

标签: java regex spring

我想读取不包含.temp的文件作为文件夹中的扩展名。我想为此使用正则表达式。如何在正则表达式中使用排除项来执行此操作?

4 个答案:

答案 0 :(得分:3)

这部分告诉你寻找一个特定的字符数组:[0-9]。如果要排除它,只需在其前面添加^(暗示“不是”)。与[^0-9]的“非数字”类似。

所以,要回答你的问题,你可以在正则表达式中使用它:

   ^((?!\.temp).)*$

上面的正则表达式将匹配任何不包含.temp

的行

答案 1 :(得分:2)

不要被打扰,只是否定测试:

private static final Pattern NOTME = Pattern.compile("\\.temp$");

// in code

if (NOTME.matcher(input).find())
    // illegal!

但实际上,你应该使用:

if (input.endsWith(".temp"))
    // illegal

此外,如果您使用Java 7,请弃用File并使用FilesPath

答案 2 :(得分:0)

知道它不是正则表达式,但为了便于阅读,我会使用

!fileName.endsWith(".temp")

答案 3 :(得分:0)

你可以尝试这样的东西,基于Java的FilenameFilter接口:

package dk.tbsalling;

import java.io.File;
import java.io.FilenameFilter;

public class FileDemo {
   public static void main(String[] args) {

      File f = null;
      File[] paths;

      try{      
         f = new File("d:/tmp");

         FilenameFilter fileNameFilter = new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
               return name.matches(".+(?<!\.temp)");
            }
         };

         paths = f.listFiles(fileNameFilter);

         for(File path:paths)
         {
            System.out.println(path);
         }
      }catch(Exception e){
         e.printStackTrace();
      }
   }
}