2011-03-04 53 views
2

正則表達式我需要一些正則表達式.NET符合以下模式YYYYMM對匹配值YYYYMM

其中:

  • YYYY是 2000年至2049年之間
  • MM是01和12

之間的個月我也做了下面的一個問題這一點,是它包含無效的月份值。

[2]{1}[0]{1}[0-4]{1}[0-9]{1}[0-1]{1}[0-9]{1} 

有什麼建議嗎?

回答

8

這應該工作:20[0-4]\d(0[1-9]|1[0-2])

一個月匹配,你需要尋找之一:

  • 以後內容從0以後內容從[1-9]
  • 一個1[0-2]

如果您想要捕捉的年份和月份,(20[0-4]\d)(0[1-9]|1[0-2])

如果你不想捕捉任何一年或一個月,20[0-4]\d(?:0[1-9]|1[0-2])

如果你想用的名字捕捉它們,(?<year>20[0-4]\d)(?<month>0[1-9]|1[0-2])

+0

感謝看來這是我需要的。 – ArBR 2011-03-04 18:07:24

+0

您可能會考慮進行一些小調整:在括號內添加一個?:防止在月份創建捕獲組,例如'20 [0-4] [0-9](?: 0 [1-9] | 1 [0-2])'。 – 2011-03-04 18:26:04

4
(?<year>20[0-4]\d(?<month>(0[1-9])|(1[0-2]))) 

這是我將在兩個命名組中分開的正則表達式

+0

我從來沒有聽說過命名組,可能這對於更復雜的模式可能有用 – ArBR 2011-03-04 18:18:35

+0

@Arce,實際上,組(命名或其他)對於簡單和複雜模式都很有用,如果您需要提取匹配值供以後使用。 – 2011-03-04 18:24:15

+0

是的命名組是有用的,因爲在找到與正則表達式類匹配後,您可以提取月份和年份,例如match.Groups [「year」] – Serghei 2011-03-04 18:26:32