我有以下格式,我想用正则表达式检查它:
2016-05-24T22:00:00
如果我想通过简单的java操作来实现它,那将非常容易。但我认为在regx中这样做会更有效率。谁能帮助我如何用regx做到这一点?(我对正则表达式来说是全新的)
答案 0 :(得分:2)
由于您不熟悉正则表达式,因此请查看您需要匹配的内容:
YYYY-MM-dd
)T
开头,格式为hh:mm:ss
)。所以你真的只需匹配一些特定的字符(-
,T
和:
),其他一切只是一个数字\d
。因此,一个非常基本的示例可以匹配满足此模式的任何数字:
\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}
这是做什么的?
\d{4} # Matches four consecutive digits (year)
\- # Matches an explicit dash (separating years and months)
\d{2} # Matches two consecutive digits (months)
\- # Matches another dash (months and days)
\d{2} # Matches two more digits (days)
T # Matches a T (indicating the start of your time)
\d{2} # Matches two digits (hours)
: # Matches a colon (between hours and minutes)
\d{2} # Matches two more digits (minutes)
: # Matches another colon (minutes and seconds)
\d{2} # Finally, matches two digits for seconds
这显然是一种非常基本的方法,如Thomas' response所见,它肯定会缩短。我只想帮助您了解如何构建表达式来解决此问题。
答案 1 :(得分:2)
要小心以前的简单答案,因为他们甚至接受2016-75-92T40:25:82这样的事情,没有任何限制,你需要单独执行它们
举一个例子,这个匹配任何4位数年份和01到12个月
\d{4}-(0[1-9]|1[0-2])
但限制日子会很痛苦
答案 2 :(得分:1)
这个正则表达式完成了工作:
\d{4}(?:-\d{2}){2}T\d{2}(?::\d{2}){2}
见demo。说明:
\d{4} match a digit [0-9]
Quantifier: {4} Exactly 4 times
(?:-\d{2}){2} Non-capturing group
Quantifier: {2} Exactly 2 times
- matches the character - literally
\d{2} match a digit [0-9]
Quantifier: {2} Exactly 2 times
T matches the character T literally (case sensitive)
\d{2} match a digit [0-9]
Quantifier: {2} Exactly 2 times
(?::\d{2}){2} Non-capturing group
Quantifier: {2} Exactly 2 times
: matches the character : literally
\d{2} match a digit [0-9]
Quantifier: {2} Exactly 2 times
答案 3 :(得分:1)
我会改用SimpleDateFormat
。它拥有您需要的一切,例如检查小时数是否符合数字范围。你可以跳过这些检查,否则这对正则表达式来说是一个恐怖的任务。
答案 4 :(得分:1)
首先要了解正则表达式是如何工作的,因此格式化变得非常简单,这里是答案用法
\d{4}\-\d{2}\-\d{2}T\d{2}:\d{2}:\d{2}
以下是解释:
\
用于许多编程语言中的转义序列,因此在java中也是如此。
d表示十进制整数
阅读格式化数字打印输出,它将帮助您理解模式规范。
https://docs.oracle.com/javase/tutorial/java/data/numberformat.html