嗨,我正在编写用于文件名验证的正则表达式。来自不同论坛的点点滴滴,但没有正确的测试结果。下面是我要实现的示例的格式
格式: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$";
答案 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));
}
}
jex.im可视化正则表达式:
答案 1 :(得分:1)
以下内容就足够了:
"(?i)abc[12]_def\d{6,7}_ghi[123]\.xml
请注意使用?i
标志来区分大小写。您也可以使用Pattern.CASE_INSENSITIVE
常量。
此正则表达式匹配abc
,后跟1
或2
,后跟_def
,后跟6-7位数字,后跟_ghi
,后跟1
,2
或3
,扩展名为.xml
。