gpt4 book ai didi

java - 在java中使用正则表达式验证文件名

转载 作者:行者123 更新时间:2023-12-02 07:17:51 25 4
gpt4 key购买 nike

这里我想使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com