C# 正则表达式检查时间

C# 正则表达式检查时间,c#,regex,C#,Regex,我有以下正则表达式: ^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 当前将接受00:00:00或00:00或00 我不想让它这样做。 它可以接受00:01或00:00:01但不能全部为零 我在正则表达式中遗漏了什么?您可以使用负lookaheads来解决此问题: ^(?!^(\D|0)*$)(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 匹配非数字和零的负前瞻。因此,如果您的时间中只有

我有以下正则表达式:

^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
当前将接受
00:00:00
00:00
00
我不想让它这样做。 它可以接受
00:01
00:00:01
但不能全部为零


我在正则表达式中遗漏了什么?

您可以使用负lookaheads来解决此问题:

^(?!^(\D|0)*$)(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$
匹配非数字和零的负前瞻。因此,如果您的时间中只有零,它将无法匹配


您可以更详细地了解它的功能。

我认为,使用另一个正则表达式来匹配您不需要的任何内容可能会更容易


类似这样的内容:
^(00:?)+$
应该匹配您不想要的内容。在使用当前正则表达式之前,只需使用该检查即可。在一个正则表达式中执行任何操作都可能会导致构建和更改的混乱。

尝试这个稍微修改过的变体:
^((?:[01]?\d[0-3]):(?:[0-5]?\d)(?:[0-5]?\d)?$