2011-03-04 54 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