连字符分隔的Java日期模式

时间:2019-04-26 09:54:05

标签: java regex

我想知道这是否是匹配如下所示的匹配字符串的正确模式

字符串样本

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}$");

2 个答案:

答案 0 :(得分:1)

当前正则表达式中的两个问题,

  • 第一个量词必须为{1,2},而不仅仅是{2},以支持一个或两个数字
  • 您需要转义点

您需要使用的正确正则表达式应为

^\d{1,2}\.\d{2}\.\d{4}-\d{2}\.\d{2}\.\d{4}$

Regex Demo

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}$

Demo

大概年份也可能不是固定宽度,但可能不太可能出现早于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]);
}