Java 用于只允许文件扩展名一次的Regex
我的验证需要具有以下要求的正则表达式:Java 用于只允许文件扩展名一次的Regex,java,regex,Java,Regex,我的验证需要具有以下要求的正则表达式: 文件扩展名只能出现一次,例如。 myfile.pdf(有效) myfile.pdf.pdf(无效) 有效的文件扩展名是pdf,doc,docx: myfile.pdf(有效) myfile.doc(有效) myfile.txt(无效) 您能帮助我使用Java中的正则表达式吗。我建议单独检查需求。例如: public static void main(String[] args) throws Exception { String [] fi
(有效)myfile.pdf
(无效)myfile.pdf.pdf
pdf
,doc
,docx
:
(有效)myfile.pdf
(有效)myfile.doc
(无效)myfile.txt
您能帮助我使用Java中的正则表达式吗。我建议单独检查需求。例如:
public static void main(String[] args) throws Exception {
String [] fileNames = {"myfile.pdf","myfile.pdf.pdf","myfile.doc","myfile.txt","myfile.txt.doc"};
for(String fileName : fileNames){
boolean valid = hasValidExtension(fileName) && noDuplicates(fileName);
System.out.println(fileName+"\t" + (valid?"Valid":"Invalid"));
}
}
public static boolean hasValidExtension(String fileName){
String ext = fileName.split("\\.(?=[^\\.]+$)")[1];
if(ext.equals("pdf")||ext.equals("doc")||ext.equals("docx")){
return true;
}
return false;
}
public static boolean noDuplicates(String fileName){
String[] splited = fileName.split("\\.");
Set<String> set = new HashSet<>();
for (String str : splited) {
if (set.add(str) == false) {
return false;
}
}
return true;
}
publicstaticvoidmain(字符串[]args)引发异常{
字符串[]文件名={“myfile.pdf”、“myfile.pdf.pdf”、“myfile.doc”、“myfile.txt”、“myfile.txt.doc”};
for(字符串文件名:文件名){
boolean valid=hasValidExtension(文件名)&&noDuplicates(文件名);
System.out.println(文件名+“\t”+(有效?:“无效”);
}
}
公共静态布尔值hasValidExtension(字符串文件名){
字符串ext=fileName.split(“\\.(?=[^\\.]+$)”[1];
if(ext.equals(“pdf”)| | ext.equals(“doc”)| | ext.equals(“docx”)){
返回true;
}
返回false;
}
公共静态布尔节点副本(字符串文件名){
String[]splited=fileName.split(\\);
Set=newhashset();
for(字符串str:splited){
if(set.add(str)==false){
返回false;
}
}
返回true;
}
类似myFile.txt.pdf的内容是否匹配?它有两个扩展,但只有一个是有效的。您尝试了什么?失败在哪里?我们不是代码编写服务,请阅读有关提问的指导。是的,myFile.txt.pdf将匹配。是否pdf.pdf
有效?我认为第一个pdf
不是一个扩展。我已经尝试了([^\s]+(\.(?I)(pdf | doc | docx))$)
,但它只验证了2)