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

标签 java regex

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

相关文章:

java - setStorageEncryption 没有效果

正则表达式:逗号分隔的整数

正则表达式搜索子字符串

javascript - 正则表达式 - 用图像标签替换 URL

java - Java 中的空指针异常和作用域

java - 循环没有像预期的那样将项目添加到列表中

java - 在界面中使用@RequestMapping 是不是一个坏主意?

java - 如何从json中提取正则表达式来解析短信(android)

JavaScript 正则表达式 : How to specify option end of string

java - AdColony Aurora 安卓 3.0 SetCustomID