数字范围的正则表达式
寻找一个包含数字范围的正则表达式。更具体地说,考虑数字格式:数字范围的正则表达式
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
我想正则表达式,这样我可以在插入值的范围变得非常容易。有任何想法吗?
这对我来说并不完全清楚,而且你没有提到的语言为好,但在PHP它看起来像这样:
if (preg_match('~\d{2}-\d{2}~', $input, $matches) {
// do something here
}
你有任何使用情况下,所以我们可以调整代码以您的需求?
验证日期不是正则表达式的优点。
例如,如何验证2月份的闰年。
的解决方案是使用现有的日期API在你的语言
不试图验证日期。日期在文件名中。我只想挑选一个日期之后和另一个日期之前的文件。 – dublintech
在正则表达式组中捕获两个数字,然后将发现的数字字符串转换为数字类型并比较数字。 –
'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
什么正则表达式风味您使用的?看到这个[链接](http://www.regular-expressions.info/numericranges.html)为insiration –
所以这些是日期?否则,“01-32”没有包括在内的解释是什么?你不能(或不应该)单独使用正则表达式来完成。 –
这些日期?如果是这样,你不想使用正则表达式来验证它们。请使用您的语言中的日期库/工具。 – Qtax