用正则表达式匹配2019年以下的合理日期(除了2月特殊的日期)

1:我们常见的日期格式比如有:2019年4月13日、2019/4/13、2019.4.13、20190413这几种,可能还有更多,但是我们先列举这几种;我们需要去RegexBuddy 4这个软件里面来完成一个正则表达式的编码并验证;
2:在RegexBuddy 4里面的Test框里面放入那些日期格式,然后再在上面那个框里进行正则表达式的编码:
RegexBuddy 4详情软件截图:
用正则表达式匹配2019年以下的合理日期(除了2月特殊的日期)
3:先匹配前面的年份:匹配年份前我们要考虑我们需要达到的效果(只匹配2019年以下的0,当然公元0000年也算),所以第一个数字时它的值域应该是0-2,第二个到第四个的值域为0-9,但是2119或者2222显然是不行的,所以我们需要对第一个数字为2时进行替换,:比如当第一个数字值域为0-1时,后面三个数字的值域都为0-9,当第一个数字为2时,第二个数字就必须是0,第三个数字的值域为0-1,第四个的值域为0-9;匹配完成以后我们可以看到只会匹配2019以下的数值
匹配年份截图:
用正则表达式匹配2019年以下的合理日期(除了2月特殊的日期)
4:接下来就是匹配年份以后的符号或者汉字,为了防止出现符号汉字混乱而出现非日期的情况,我们需要替换多种情况,先拿2019/4/13这个作为案例,比如要匹配 / 这个符号:[/],这样就完成了,但是肯定是没有这么简单的,因为还要考虑汉字和其他的符号,这个等下再说;然后我们再去考虑如何匹配月份,虽然我们这里看着只有一个4的数字,但实际上还要考虑一个因素,就是一共有12月,所以这里就相当于04,只不过0没有显示而已,于是我们又得替换:当月份第一个数字为0时,它可出现也可不出现,第二个数字的值域为1-9,因为没有00这个月份,当月份第一个数字为1时,第二个数字的值域为0-2,因为只有12个月,然后再把符号[/]匹配到,这样它就只会匹配到01月到12月的月份了
匹配符号,月份截图:
用正则表达式匹配2019年以下的合理日期(除了2月特殊的日期)
5:最后一个天数也就很简单了,以此类推,肯定要先考虑:没有00这天的,也没有超过31天的月份,所以还是要进行替换,当天数第一个数字的值域为0-2时,第二个数字的值域为1-9,当天数第一个数字的值域为1-3时,第二个数字的值域为0-1
匹配天数截图:
用正则表达式匹配2019年以下的合理日期(除了2月特殊的日期)
6:匹配完2019/4/13这个案例以后,我们需要把剩下的因素也匹配到,同理,根据替换和考虑种种因素以后,我最终的正则表达式在下图,然后随便写一些不是合理日期的数值它都不会匹配到
最终正则表达式截图:
用正则表达式匹配2019年以下的合理日期(除了2月特殊的日期)
附:(若还有未想到之处望多多包涵)