1

我想解析一个时间表达式字符串(有 4 组:周(w)、日(d)、小时(h)和分钟(m))。一些例子是:

  1. -3w 4d 2h 1m
  2. +3w 2h 1m
  3. 3d 1m
  4. 1天
  5. ...

我想出了这个模式:

([+-]{0,1})([0-9]+)w?\s?(0?[1-9]|[12][0-9]|3[01])d?\s?([01]?[0-9]|2[0-3])h?\s?([0-5][0-9])m?
  • 以+-或无开头
  • 一周前的价值是无限的
  • 前一天的值是从 0 到 31
  • 小时之前的值是从 0 到 23
  • 分钟之前的值是从 0 到 59
  • 空格(\s)是可选的

但这种模式行不通。请帮忙。对不起我的英语不好!

4

2 回答 2

1
^([+-]?)([0-9]+)?w?\s*?(0?[1-9]|[12][0-9]|3[01])?d?\s*?([01]?[0-9]?|2[0-3])?h?\s*?([0-5]?[0-9])?m?$

修改了你的正则表达式。现在可以工作了。不过可能需要更多的测试。

见演示。

http://regex101.com/r/sB4kE6/4

于 2014-09-05T09:46:19.667 回答
0

这是我用于验证的内容:

 ^(?:(?:0?[0-9]|1[0-2]):[0-5][0-9]\s?(?:(?:[Aa]|[Pp])[Mm])?|(?:1[3-9]|2[0-3]):[0-5][0-9])$

它适用于 24:00 和 12:00 格式,允许大写上午/下午。

也许它可以帮助您朝着正确的方向前进。

于 2014-09-05T10:16:59.017 回答