日期偏移的正则表达式

Regular expression for day offset

我想根据用户定义的表达式计算时间偏移量(天数)。该表达式将支持以下关键字:

  1. + -> 增量
  2. - -> 递减
  3. D -> 天
  4. W -> 周
  5. M -> 月份
  6. WD -> 工作日(公历中非节假日)

示例:

+3D means adding 3 days to the offset
-3D means reduce 3 day from the offset
+34M+3D means adding 34 months and 3 days to the offset
+3D+1WD  means adding 3 days and then add one extra working day.

问题是我不确定如何编写正则表达式来处理字符串。谁能给我举个例子吗?

这是我目前尝试的方法,请注意第二个标记不正确

Pattern p = Pattern.compile("[+-]+([0-9]+)[WD|D|W|M]");
 Matcher m = p.matcher("+1D-2WD+3M");
while(m.find()){
    System.out.println(m.group(0));
}

结果:

+1D
-2W
+3M

我会选择

(([+-])(\d+)(WD|[DWM]))

[+-] : + 或 - 符号

\d+ : 至少一位数字

WD : WD

| : 或

[DWM] : D 或 W 或 M

Working example

Pattern p = Pattern.compile("(([+-])(\d+)(WD|[DWM]))");
        Matcher m = p.matcher("+1D-2WD+3M");
        while(m.find()){
            System.out.println(m.group(1));
            // Splitted argument
            System.out.println("Operator : " +  m.group(2));
            System.out.println("Number : " +  m.group(3));
            System.out.println("Period : " +  m.group(4));

        }