1

数値範囲をカバーする正規表現を探しています。より具体的には、数値形式を考えてみましょう:

NN-NN

ここで、N は数値です。例は次のとおりです。

04-11
07-12
06-06

範囲を指定できるようにしたい。たとえば、次のいずれかです。

01-2702-03

私が範囲と言うとき、それはあたかも-そこにないかのようです。したがって、範囲: までの01-27範囲 02-03

以下をカバーします: 01-28, 01-29, 01-30, 01-31および02-01

範囲の値を非常に簡単にプラグインできるように、正規表現が必要です。何か案は?

4

3 に答える 3

2

日付の検証は、正規表現の強みではありません。

たとえば、うるう年に関して 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 に答える