Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 排除具有特定扩展名的文件名的正则表达式_Java_Regex - Fatal编程技术网

Java 排除具有特定扩展名的文件名的正则表达式

Java 排除具有特定扩展名的文件名的正则表达式,java,regex,Java,Regex,我试图找到一个正则表达式,允许文件名没有一定的扩展名。例如: test.pdf=>ok test.exe=>ko test.tmp=>ko test.EXE=>ko test.PDF=>ok 我不能使用ends with,因为我必须将整个正则表达式放在.properties文件中 我尝试了^.*.^exe ^ tmp$,但根本不起作用 编辑:这不是的副本,因为我需要忽略某些扩展。这不是另一个问题的目的。希望这会有所帮助 public class StackOverflowQuestion4532

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

test.pdf=>ok test.exe=>ko test.tmp=>ko test.EXE=>ko test.PDF=>ok 我不能使用ends with,因为我必须将整个正则表达式放在.properties文件中

我尝试了^.*.^exe ^ tmp$,但根本不起作用

编辑:这不是的副本,因为我需要忽略某些扩展。这不是另一个问题的目的。

希望这会有所帮助

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);
        }
    }
}
让我们试试这个正则表达式:

.*\.(?!(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

快来帮忙

请。/。+\。?!exe | tmp/i怎么样!s、 匹配?i.\\\\.exe | tmp?@revo您是对的,我所说的不是Java语言,也不是链接资源中与PCRE相关的部分:虽然Perl要求lookback中的替代项具有相同的长度,但PCRE允许可变长度的替代项。是的,该术语为可变长度或宽度,除非在极少数情况下,否则不太可能使用。Java在处理它方面没有问题。Perl不支持它,Python本身也不支持,但它附带了这个特性@a当文件名中有多个点时,例如myApp.1.2.3,此选项将匹配不应匹配的文件名。exe@Aaron好的,我知道了。请注意,这会拒绝以exe或tmp结尾的文件名,无论它们是否为完整扩展名,即noextensionexe或biggerextension.hexel将正则表达式设置为^.*?
.*\.(?!(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