使用特定扩展名排除文件名的正则表达式

时间:2017-07-26 08:24:36

标签: java regex

我正在尝试找到一个允许没有特定扩展名的文件名的正则表达式。例如:

  • test.pdf =>确定
  • test.exe => KO
  • test.tmp => KO
  • test.EXE => KO
  • test.PDF =>确定

我无法使用结尾,因为我必须将整个RegEx放在.properties文件中。

我尝试了^.*\.(^exe|^tmp)$,但它根本不起作用。

编辑:这不是REGEX for any file extension的重复,因为我需要忽略某些扩展。这不是另一个问题的目的。

2 个答案:

答案 0 :(得分:1)

希望这可能会有所帮助!

public class StackOverflowQuestion45321328 {

    public static void main(String[] args) {

        List<String> data = new ArrayList();
        data.add("test.pdf");
        data.add("test.exe");
        data.add("test.tmp");
        data.add("test.EXE");
        data.add("test.PDF");

        String regex = "^.*(?<!exe|tmp)$";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        for (String filename : data) {
            Matcher matcher = pattern.matcher(filename);
            boolean isMatchingPattern = matcher.matches();
            System.out.println(filename + " : " + isMatchingPattern);
        }
    }
}

输出:

test.pdf : true
test.exe : false
test.tmp : false
test.EXE : false
test.PDF : true

答案 1 :(得分:0)

试试这个正则表达式:

.*\.(?!(exe|tmp|EXE|TMP))(.+)

test.pdf -> OK
test.exe 
test.tmp 
test.EXE 
test.PDF 
tets.abcd.dfdf -> OK
abc.exe
abc.tmp
aexe.abc -> OK

跳这个帮助!