正则表达式检测这种模式

时间:2016-05-26 13:53:42

标签: java regex

我有以下格式,我想用正则表达式检查它:

2016-05-24T22:00:00

如果我想通过简单的java操作来实现它,那将非常容易。但我认为在regx中这样做会更有效率。谁能帮助我如何用regx做到这一点?(我对正则表达式来说是全新的)

5 个答案:

答案 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