我在为一系列日期生成正则表达式时遇到问题。
例如,此范围[2015-11-17, 2017-10-05]
,我该怎么办?使用正则表达式验证是否有一个日期属于该范围。
第二个问题是否有可能有一个通用正则表达式,我可以在几个日期范围内使用,只用正则表达式替换我的新范围中的几个值,并且正则表达式继续验证一系列日期,但是新的范围。在此先感谢您的帮助=)
答案 0 :(得分:0)
正如评论所述,正则表达式不适用于一系列日期,也不适用于任何时间段。正如只看文本的语法而不是语义(意思)一样,正则表达式是“愚蠢的”。
使用Java 8及更高版本中内置的java.time框架。
将字符串解析为LocalDate
个对象。
LocalDate start = LocalDate.parse( "2015-11-17" );
通过调用isEqual,isBefore和isAfter方法进行比较。
请注意,我们通常在日期工作中使用半开放式方法,其中开头是包含在内的,而结尾是独占的。
Stack Overflow上的许多其他问题和解答已经涵盖了这些问题。所以我在这里缩写了我的讨论。
答案 1 :(得分:0)
只是为了完整性:您实际上可以使用正则表达式来识别任何有限的字符串集,例如特定的日期范围,但它更像是学术练习而不是实际推荐的用法。 然而,如果您正在编写一些神秘的硬件,那么实际上它是必要的。
假设输入始终是给定格式的有效日期,则示例的正则表达式可以包含:
2015-0[1-9].*
- 2015年1月至9月
2015-10.*
- 2015年10月
2015-11-0[1-9]
- 2015年11月1日至9日
2015-11-1[0-7]
- 2015年11月10日至17日
2016.*
- 2016年的所有日期
2017年类似地添加,使用|进行分离(a | b | c | ...),应用你正在使用的正则表达式实现的转义,然后你有你的日期检查器。如果输入不能保证是有效日期,那么它会变得有点复杂,但仍然可能。