另外,我非常感谢您的解释。抱歉,但我一生中从未使用过正则表达式,几乎无法阅读它们。
2 回答
\d{4}/\d{2}/\d{2}\s+\d{2}:\d{2}:\d{2}
\d
是一个数字{4}
是数字的数量(它前面的正则表达式部分)/
只是一个斜线:
只是一个冒号\s
是任何空格+
是一个或多个空格(它前面的正则表达式部分)
请注意,这可能用于快速初始检查,但您应该使用其他方法检查完整日期格式,例如SimpleDateFormat
Rohit Jain 或 Jon Skeet 所宣传的。
正如其他人指出的那样,日期时间是不规则的表达方式。仅通过正则表达式验证是不可能的。仅闰秒就排除了这一点。您能做的最好的事情就是限制误报。但是,您消除的误报越多,表达式就越复杂。
对于时间组件,您可以使用它
([2][0-3]|[0-1][0-9]|[1-9]):[0-5][0-9]:([0-5][0-9]|[6][0])
[x]
表示这匹配 x[a-z]
表示这匹配来自 az 的任何字母a|b
表示这匹配 a 或 b(..)
分组比赛所以
([2][0-3]|[0-1][0-9]|[1-9])
将匹配 20-23 或 00-19 或 1-9
对于日期部分
\d{4}/([1][0-2]|[0][0-9])/([3][0-1]|[1-2][0-9]|[0][1-9]|[1-9])
正如你所看到的,它变得非常大,我们仍然有一些误报。
把它放在一起
\d{4}/([1][0-2]|[0][0-9])/([3][0-1]|[1-2][0-9]|[0][1-9]|[1-9]) ([2][0-3]|[0-1][0-9]|[1-9]):[0-5][0-9]:([0-5][0-9]|[6][0])
这将允许0000\02\31 01:59:60
在这么多级别上无效。
它也不允许999\02\12 01:59:59
,可以通过替换来
\d{4}
补救\d+
。
+
表示 1 个或多个。
我的正则表达式 foo 相当缺乏所以我总是去这里寻求帮助
ps 虽然日期时间通常为 60 秒 60 分钟 24 小时 365 天,但阴历/阳历并不稳定。有些日历忽略了这一点,UTC 没有,西方日历中最知名的人工制品是大约每 4 年在 2 月底添加一个闰日。下一个最常见的人工制品是在不规则的时期添加闰秒。这可以是正面的也可以是负面的,因此一分钟的长度可以在 59-61 秒之间。