日期偏移的正则表达式
Regular expression for day offset
我想根据用户定义的表达式计算时间偏移量(天数)。该表达式将支持以下关键字:
+
-> 增量
-
-> 递减
D
-> 天
W
-> 周
M
-> 月份
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
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));
}
我想根据用户定义的表达式计算时间偏移量(天数)。该表达式将支持以下关键字:
+
-> 增量-
-> 递减D
-> 天W
-> 周M
-> 月份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
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));
}