寻找涵盖数字范围的正则表达式。更具体地说,考虑一种数字格式:
NN-NN
其中N是数字。例如:
04-11
07-12
06-06
我希望能够指定范围。例如,之间的任何事情:
01-27
和02-03
当我说范围时,就好像-
不存在一样。所以范围:
范围01-27
到02-03
将涵盖:
01-28, 01-29, 01-30, 01-31
和02-01
我想要正则表达式,以便我可以非常轻松地插入范围的值。有任何想法吗?
答案 0 :(得分:2)
验证日期不是正则表达式的优势所在。
例如,您如何验证二月份的闰年。解决方案是使用您所用语言的可用日期API
答案 1 :(得分:1)
'0[12]-[0-3][1-9]'
会匹配所有必需的日期,但是,它也会匹配01-03之类的日期。如果你想完全匹配并且只想匹配该范围内的日期,你需要做一些更高级的事情。
这是Python中一个易于配置的示例:
from calendar import monthrange
import re
startdate = (1,27)
enddate = (2,3)
d = startdate
dateList = []
while d != enddate:
(month, day) = d
dateList += ['%02i-%02i' % (month, day)]
daysInMonth = monthrange(2011,month)[1] # took a random non-leap year
# but you might want to take the current year
day += 1
if day > daysInMonth:
day = 1
month+=1
if month > 12:
month = 1
d = (month,day)
dateRegex = '|'.join(dateList)
testDates = ['01-28', '01-29', '01-30', '01-31', '02-01',
'04-11', '07-12', '06-06']
isMatch = [re.match(dateRegex,x)!=None for x in testDates]
for i, testDate in enumerate(testDates):
print testDate, isMatch[i]
dateRegex
看起来像这样:
'01-27|01-28|01-29|01-30|01-31|02-01|02-02'
输出是:
01-28 True
01-29 True
01-30 True
01-31 True
02-01 True
04-11 False
07-12 False
06-06 False
答案 2 :(得分:0)
对我来说并不完全清楚,你也没有提到语言,但在PHP中看起来像这样:
if (preg_match('~\d{2}-\d{2}~', $input, $matches) {
// do something here
}
您是否有任何用例,以便我们根据您的需求调整代码?