这里我想使用java中的正则表达式验证文件名。我实现了下面的代码,但这对我来说不适用于第三种类型的文件。
我可以检查正则表达式中的前缀和扩展名吗???
我的验证文件名看起来像这 3 种方式
1) prefix_digit.digit.extenstion example : AB_1.1.fuij (Here fuij is my extension)
2) prefix_digit.digit.digit.extenstion example : AB_1.1.1.fuij
3) prefix_digit.digit.B/P.digit.extensionexample : AB_1.1.B.1.fuij
仅这3种类型的文件有效。第三个是测试版和试点版文件。如果测试版和试点版文件存在,那么应该像我上面提到的那样
我将编写一些有效和无效的文件
**Valid :**
AB_1.1.fuij
AB_1.4.fuij
AB_1.1.1.fuij
AB_1.1.B.1.fuij
AB_3.4.P.7.fuij
***Invalid :***
AB_0.1.fuij
AB_1.B.1.1.fuij(B/P should be place on 3rd always)
AB_1.2.B.0.fuij
代码:
import java.util.ArrayList;
import java.util.regex.Pattern;
public class democlass {
/**
* Test harness.
*/
public static void main(String[] args) {
ArrayList<String> demoversion = new ArrayList<String>();
System.out.println("Result >>>>>>>>>>>> "
+isFileValid("AB_1.1.fuij"));
System.out.println("Result >>>>>>>>>>>> "
+isFileValid("AB_1.B.fuij"));
System.out.println("Result >>>>>>>>>>>> "
+isFileValid("AB_1.1.1.fuij"));
System.out.println("Result >>>>>>>>>>>> "
+isFileValid("AB_1.P.1.1.fuij"));
System.out.println("Result >>>>>>>>>>>> "
+isFileValid("AB_1.1.B.1.fuij"));
}
private static boolean isFileValid(String input)
{
String regexFinalBugFix = "^\\d+\\.\\d+\\.\\d+$";
String regexFinal = "^\\d+\\.\\d+$";
String regexBetaPilot = "^\\d+\\.\\d+\\.\\[BP]+\\.\\d+$";
final Pattern pattern1 = Pattern.compile(regexFinal);
final Pattern pattern2 = Pattern.compile(regexBetaPilot);
final Pattern pattern3 = Pattern.compile(regexFinalBugFix);
String inputVersion = null;
int suffixIndex = input.lastIndexOf(".");
int prefixIndex = input.lastIndexOf("_");
if (suffixIndex > 0 && prefixIndex > 0) {
inputVersion = input.substring(prefixIndex + 1,
suffixIndex);
String prefixString1 = input.substring(0, 3);
String suffixString1 = input.substring(suffixIndex);
if(prefixString1.equals("AB_") && suffixString1.equals(".fuij"))
{
if (pattern1.matcher(inputVersion).matches()
|| pattern2.matcher(inputVersion).matches()
|| pattern3.matcher(inputVersion).matches()) {
return true;
}
return false;
}
return false;
}
return false;
}
}
输出:
Result >>>>>>>>>>>> true
Result >>>>>>>>>>>> false
Result >>>>>>>>>>>> true
Result >>>>>>>>>>>> false
Result >>>>>>>>>>>> false : It should be valid but it is false, why??
最佳答案
您的regexBetaPilot
是错误的:您正在转义[BP]
类的左括号。试试这个:
String regexBetaPilot = "^\\d+\\.\\d+\\.[BP]+\\.\\d+$";
您可以轻松地将所有三种模式组合成一个模式:
String regex = "\\d+\\.(\\d+\\.([BP]+\\.)?)?\\d+";
您不需要 anchor (^
和 $
)。由于您使用的是 matches()
而不是 find()
,因此它将始终尝试匹配整个字符串。
编辑我在[BP]
之后留下了+
,因为这就是您原始代码中的内容。但是,如果您想匹配单个 B 或 P,那么您应该从模式中删除 +
。
关于java - 在java中使用正则表达式验证文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14693069/