hh:mm:ss
文字列を解析したい。単純なものは、([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)
または2:3:24
文字列を期待する02:03:24
です。
さらに一歩進んで、次のような場合でも検証に合格したい
基本的に、「:」が1つ見つかった場合、「:」の前の数字をMMとし、「:」の後ろの数字をSSと見なします。 2つの「:」が見つかった場合は、HH:MM:SSと見なします
このパターンを思いつきました。
(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$)
正常に動作しているようです。私は仕事をすることができる他のより単純な正規表現を知りたいと思いました。
^(?:(?:([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
@Tim Pietzckerは、SSが必須であるHH:MM:SSパーサーに対するOPの要件をカバーしています。
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))?
-オプションで秒に一致