【问题标题】:Regular expression for day offset日偏移的正则表达式
【发布时间】:2015-03-23 15:01:20
【问题描述】:

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

  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

【问题讨论】:

  • 我们可以看看what have you tried till now?
  • 您是否尝试将“java 正则表达式”放入 Google?这就是 upvote 和 downvote 工具提示中“研究工作”一词的含义。
  • 请看我的更新
  • 因为您没有使用正确的正则表达式: [WD|D|W|M] 是 WD|M 列表中的单个字符(区分大小写)。的| [] 内部不再是“或”,而是字符 |自己。
  • 我在下面的回答中添加了工作代码示例

标签: java regex quartz-scheduler


【解决方案1】:

我会去

(([+-])(\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));

        }

【讨论】:

  • 了解正则表达式的好链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2020-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
相关资源
最近更新 更多