我想解析一个hh:mm:ss
字符串。
一个简单的([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
,需要2:3:24
或02:03:24
字符串。
我想更进一步,即使在像
这样的情况下也要通过验证基本上,如果找到一个“:”,则将“:”之前的数字视为MM,将“:”之后的数字视为SS 。如果发现两个“:”,则认为是HH:MM:SS
我想出了这种模式。
(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
似乎工作正常。我想知道任何其他更简单的正则表达式,它可以完成这项工作。
答案 0 :(得分:110)
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
<强>解释强>
^ # Start of string
(?: # Try to match...
(?: # Try to match...
([01]?\d|2[0-3]): # HH:
)? # (optionally).
([0-5]?\d): # MM: (required)
)? # (entire group optional, so either HH:MM:, MM: or nothing)
([0-5]?\d) # SS (required)
$ # End of string
答案 1 :(得分:6)
@Tim Pietzcker涵盖OP对HH:MM:SS解析器的要求,其中SS是强制性的,即
如果您允许我偏离OP的要求,并考虑HH是强制性的情况,即
我想出的正则表达式是:
^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
让我们分解一下:
([0-1]?\d|2[0-3])
- 匹配数小时(?::([0-5]?\d))?
- 可选择匹配分钟(?::([0-5]?\d))?
- 可选择匹配秒数