时间表达式字符串的正则表达式模式

Posted

技术标签:

【中文标题】时间表达式字符串的正则表达式模式【英文标题】:Regex pattern for time expression string 【发布时间】:2014-09-05 09:38:16 【问题描述】:

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

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

我想出了这个模式:

([+-]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)是可选的

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

【问题讨论】:

在什么情况下不行? 【参考方案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

【讨论】:

【参考方案2】:

这是我用于验证的内容:

 ^(?:(?: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 格式,允许大写 am/pm。

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

【讨论】:

以上是关于时间表达式字符串的正则表达式模式的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式查找字符串模式

包括所有特殊字符的正则表达式模式

简化正则表达式 OR 模式

正则表达式验证模式只允许一个字符[重复]

正则表达式的使用

将字符串匹配到多个正则表达式模式并返回组号