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