正则表达式匹配日期格式DD-MM-YYYY和DD/MM/YYYY

5
我正在使用Sublime Text 3处理一个由行分隔的大型文本文件。我正在寻找一个正则表达式,它可以:
  • 匹配以 DD-MM-YYYY 格式出现的条目
  • 匹配以 DD/MM/YYYY 格式出现的条目
如果两种格式都太复杂,那么只匹配第一种格式就可以了。
我还没有为这样的正则表达式做任何工作,因为它实在超出了我的知识范围,我不知道从哪里开始。查看处理日期格式验证的类似答案也证实了我的怀疑。
感谢您提前的帮助。
3个回答

13

这个模式适用于您的情况。严格禁止当月至今和反之。

^([0]?[1-9]|[1|2][0-9]|[3][0|1])[./-]([0]?[1-9]|[1][0-2])[./-]([0-9]{4}|[0-9]{2})$

此模式将匹配以下格式:(日期,月份,年份)

25.04.2017  
02.04.2017  
2.4.2017  

25/04/2017  
5/12/2017  
15/2/2017  

25-04-2017  
6-10-2017  
16-5-2017  

1
这是对另一个问题的很好的回答,但并不是对这个问题的答案。 - user743382
1
注意。这也会匹配像25/04.2017和25.04-2017这样的字符串。 - Darvesh
尽管它可以匹配 25/04/2017,但有人输入这个日期的概率非常低。 - Anshuman Kumar

7
这个正则表达式可以匹配您的示例:
[0-9]{2}[-|\/]{1}[0-9]{2}[-|\/]{1}[0-9]{4}

但如果您输入了错误的日期(例如2月31日),则该正则表达式也会匹配它。


这个程序不接受 dd-mm/yyyydd/mm-yyyy 吗?即使它可能足够好,但它并没有做到问题所要求的,并且也没有提到这一点,因此很可能会误导读者。 - user743382
它没有月份限制,需要的只是日期和月份值。它允许35/31/2007成为有效日期,查看我的答案,可以解决月份和日期范围验证问题[但2月31日、4月31日、6月31日、9月31日和11月31日等无效日期仍未解决]。 - Diptesh Atha

0

请看这个:

([0-2][0-9]|(3)[0-1])[-|\/](((0)[0-9])|((1)[0-2]))[-|\/]\d{4}

我认为这是您的答案的完美匹配。 它可以接受31日,12月的日期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接