1

寻找覆盖数字范围的正则表达式。更具体地说,考虑一种数字格式:

NN-NN

其中 N 是一个数字。所以例子是:

04-11
07-12
06-06

我希望能够指定一个范围。例如,介于以下之间的任何内容:

01-2702-03

当我说范围时,就好像-不存在一样。所以范围:01-27范围 02-03

将涵盖: 01-28, 01-29, 01-30, 01-3102-01

我想要正则表达式,以便我可以很容易地插入范围的值。有任何想法吗?

4

3 回答 3

2

验证日期不是正则表达式的优势所在。

例如,您将如何验证关于闰年的二月。

解决方案是以您的语言使用可用的日期 API

于 2012-06-11T13:48:28.537 回答
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
于 2012-06-11T14:04:29.553 回答
0

这对我来说并不完全清楚,你也没有提到语言,但在 PHP 中它看起来像这样:

if (preg_match('~\d{2}-\d{2}~', $input, $matches) {
 // do something here
}

您有任何用例,以便我们可以根据您的需要调整代码吗?

于 2012-06-11T13:42:43.403 回答