带或不带前导零的时间戳的正则表达式?

时间:2013-09-09 00:48:55

标签: java regex

我正在与Regex挣扎。

这是一个示例时间戳:00:00:00.00(小时,分钟,秒。十进制)。我还希望此值匹配00:0:0.00请注意,租赁零在中心是可选的。

我使用的是:[1-60]:[1-60]:[1-60].[1-100],但这不需要前导零。我想帮助制作适用于上述两种情况的SINGLE正则表达式。

一个完整的解决方案会很棒,但如果你能指出我正确的方向,那也会有所帮助。

3 个答案:

答案 0 :(得分:4)

您的解决方案实际上与您描述的不符;它只匹配每个位置的序列0123456中的单个数字。你可能想要像

这样的东西
[0-5]?\d:[0-5]?\d:[0-5]?\d\.\d{1,2}

答案 1 :(得分:2)

您的模式还有许多其他问题。 [1-60]是一个字符类。它将匹配单个1234560字符。其次,模式中的.任何字符匹配,而不仅仅是文字.

我认为你正在寻找的是这样的事情:

\d{1,2}:\d{1,2}:\d{1,2}\.\d{1,2}

这将匹配任意一个或两个数字,后跟文字:,后跟任意一个或两个数字,后跟文字:,后跟任意一个或两个数字,后跟文字.,后跟任意一位或两位数字。

或者只检查每个时间组件的特定范围匹配,您可以使用chrylis建议的模式,尽管我通常建议实际解析时间值,如果您确实需要这样做。

答案 2 :(得分:1)

你可以做的另一个选择:

(?:\d{1,2}:){2}\d{1,2}\.\d{1,2}

正则表达式:

(?:              group, but do not capture (2 times):
 \d{1,2}         digits (0-9) (between 1 and 2 times)
  :              ':'
  ){2}           end of grouping
   \d{1,2}       digits (0-9) (between 1 and 2 times)
   \.            '.'
    \d{1,2}      digits (0-9) (between 1 and 2 times)