如何使用Regex验证文件名?

时间:2019-07-25 05:02:41

标签: java regex

嗨,我正在编写用于文件名验证的正则表达式。来自不同论坛的点点滴滴,但没有正确的测试结果。下面是我要实现的示例的格式

  

格式:ABC <1 | 2> _DEF <6-7个数字> _GHI <1 | 2 | 3> .xml示例:   ABC2_DEF1234567_GHI3.xml

这是用Java定义的正则表达式。

private static final String PATTERN = "ABC[1|2|3]+_DEF\\d[0-9]{6,7}+_GHI[1|2|3].xml$";

2 个答案:

答案 0 :(得分:2)

我的猜测是,您可能希望设计一个类似于以下内容的表达式:

^ABC[12]_DEF[0-9]{6,7}_GHI[1-3]\.xml$

该表达式在regex101.com的右上角进行了解释,如果您想探索/简化/修改它,在this link中,您可以观察到它如何与某些示例输入匹配,如果你喜欢。

测试

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "^ABC[12]_DEF[0-9]{6,7}_GHI[1-3]\\.xml$";
final String string = "ABC2_DEF1234567_GHI3.xml\n"
     + "ABC<1|2>_DEF<6-7digits>_GHI<1|2|3>.xml";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

RegEx电路

jex.im可视化正则表达式:

enter image description here

答案 1 :(得分:1)

以下内容就足够了:

"(?i)abc[12]_def\d{6,7}_ghi[123]\.xml

请注意使用?i标志来区分大小写。您也可以使用Pattern.CASE_INSENSITIVE常量。

此正则表达式匹配abc,后跟12,后跟_def,后跟6-7位数字,后跟_ghi ,后跟123,扩展名为.xml

Demo