我想知道这是否是匹配如下所示的匹配字符串的正确模式
字符串样本
23.04.2019-30.04.2019
3.06.2019-20.06.2019
模式
private final Pattern TIMELINE_PATTERN = Pattern.compile("^\\d{2}.\\d{2}.\\d{4}-\\d{2}.\\d{2}.\\d{4}$");
答案 0 :(得分:1)
当前正则表达式中的两个问题,
{1,2}
,而不仅仅是{2}
,以支持一个或两个数字您需要使用的正确正则表达式应为
^\d{1,2}\.\d{2}\.\d{4}-\d{2}\.\d{2}\.\d{4}$
Java代码
List<String> list = Arrays.asList("23.04.2019-30.04.2019", "3.06.2019-20.06.2019");
list.forEach(x -> {
System.out.println(x + " --> " + x.matches("^\\d{1,2}\\.\\d{2}\\.\\d{4}-\\d{2}\\.\\d{2}\\.\\d{4}$"));
});
打印
23.04.2019-30.04.2019 --> true
3.06.2019-20.06.2019 --> true
答案 1 :(得分:1)
如果日/月部分可以是一个或两个数字字符,则应使用以下模式:
^\d{1,2}\.\d{1,2}\.\d{4}-\d{1,2}\.\d{1,2}\.\d{4}$
大概年份也可能不是固定宽度,但可能不太可能出现早于1000的年份,因此我们可以将年份固定为4位数字。另外,正则表达式模式中的文字点需要用反斜杠转义。
编辑:
如果您要先验证字符串,然后将两个日期分开,请考虑以下问题:
String input = "3.06.2019-20.06.2019";
if (input.matches("\\d{1,2}\\.\\d{1,2}\\.\\d{4}-\\d{1,2}\\.\\d{1,2}\\.\\d{4}")) {
String[] dates = input.split("-");
System.out.println("date1: " + dates[0]);
System.out.println("date2: " + dates[1]);
}