1

我正在努力使用正则表达式。

这是一个示例时间戳:00:00:00.00(Hour, Minutes, Second.Decimal)。我也希望这个值匹配00:0:0.00注意,租赁零在中心是可选的。

我正在使用这个:[1-60]:[1-60]:[1-60].[1-100],但这不需要前导零。我想帮助制作一个适用于上面列出的两件事的单一正则表达式。

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

4

3 回答 3

4

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

[0-5]?\d:[0-5]?\d:[0-5]?\d\.\d{1,2}
于 2013-09-09T00:54:00.350 回答
2

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

我认为您正在寻找的是这样的东西:

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

这将匹配任何一位或两位数字,后跟一个字面量:,然后是任何一位或两位数位,然后是字面量,然后是任意一位或两位数位,然后是字面量:,然后是任意一位或.两位数位。

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

于 2013-09-09T00:53:09.153 回答
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)
于 2013-09-09T02:05:24.530 回答