HH的正则表达式模式:MM:SS时间字符串

use*_*836 37 regex expression hour minute seconds

我想解析一个hh:mm:ss字符串.一个简单的是([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) 期望2:3:2402:03:24字符串.

我想更进一步,即使在像这样的情况下也要通过验证

  1. 如果你只输入56,它应该通过,因为56可以被认为是56秒[SS]
  2. 如果您输入2:3或02:03或02:3或2:03则应该通过.2分3秒[MM:SS]
  3. 如果你进入20:30:12传球20小时30分12秒[HH:MM:SS]
  4. 如果你输入78:12,不要过78分钟是错误的....

基本上,如果找到一个":",则将":"之前的数字视为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$)
Run Code Online (Sandbox Code Playgroud)

它似乎工作正常.我想知道任何其他更简单的正则表达式,它可以完成这项工作.

Tim*_*ker 113

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
Run Code Online (Sandbox Code Playgroud)

说明:

^                   # 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
Run Code Online (Sandbox Code Playgroud)

  • @ user418836:查看www.regular-expressions.info (7认同)
  • 精彩的解释.如果你还想匹配小数秒,也很容易添加:`^(?:(?:( [01]?\ d | 2 [0-3]):)?([0-5]?\d):)?([0-5]?\ d)(?:\.(\ d +))?$`,试试[这里](http://pythex.org/?regex=%5E( %3F%3A(%3F%3A(%5B01%5D%3F%5CD%7C2%5B0-3%5D)%3A)%3F(%5B0-5%5D%3F%5CD)%3A)%3F( %5B0-5%5D%3F%5CD)(%3F%3A%5C.(%5CD%2B))%3F%24&test_string = 10%3A34%3A23.414&忽略大小写= 0&多行=​​ 0&DOTALL = 0&冗长= 0) (3认同)
  • 非常感谢.这更简单,更酷.我想学习正则表达式.请指出我正确的方向.我如何学习正则表达式.我目前所知道的只是基本语法(快速教程类的东西) (2认同)
  • @ user418836 - Tim的upvote怎么样? (2认同)
  • @AdityaGameProgrammer:尝试`[0-9]`而不是`\ d`. (2认同)
  • @bcattle你可能的意思是 `^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5] ?\d)(\.(\d{1,9}))?$` - 毫秒通常仅在某个点之后显示...如果有的话 (2认同)

Ste*_*uan 6

@Tim Pietzcker涵盖了OP对HH:MM:SS解析器的要求,其中SS是强制性的,即

  • HH:MM:SS
  • MM:SS
  • SS

如果您允许我稍微偏离OP的要求,并考虑HH是强制性的情况,即

  • HH
  • HH:MM
  • HH:MM:SS

我想出的正则表达式是:

^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$
Run Code Online (Sandbox Code Playgroud)

让我们分解一下:

  • ([0-1]?\d|2[0-3]) - 匹配数小时
  • (?::([0-5]?\d))? - 可选择匹配分钟
  • (?::([0-5]?\d))? - 可选择匹配秒