正则表达式检查第二个字符是0-6,第二个第五和第六个是04和正好6个数字长吗?

时间:2013-12-13 02:39:14

标签: regex

我需要正则表达式才能匹配1月至6月和2004年的日期。格式021204将匹配,而021205或071204等日期将不匹配。包含这些文件的目录还包含以7或8位数字命名的文件,这些文件不是有效日期,因此它只需要6位数字。这就是我试过的:

\d\[0-6]{2}\[4]{6}\

此正则表达式无法正常工作,我该如何解决?

4 个答案:

答案 0 :(得分:1)

寻找这样的东西?

0[1-6](?:0[1-9]|[12][0-9]|3[01])04


有些说明:

字符类[]只匹配一个字符。

[0-9]{3}匹配000-999,因为我指定它使用{3}重复3次

它与0-999不匹配,因为范围的左侧只有{1}个字符。

如果我使用[0-9]{1,3},则会匹配0-900-99000-999中的任何内容。

因此,在这种情况下,您需要将([1-9]|[12][0-9]|3[01])用于表示1-31个月中的日期。 如果你将其分解,你可以看到:

01-9 = 0[1-9]

10-29 = [12][0-9]

30-31 = 3[01]

答案 1 :(得分:0)

试试这个:

^0[1-6](([0-2][0-9])|(3[0-1]))04$

希望它有所帮助。

答案 2 :(得分:0)

^0[1-6](?:0[1-9]|[12]\d|3[01])04$

答案 3 :(得分:0)

如果您需要确保日期有效(例如,不是2月30日或6月31日),则以下内容应强制执行每月的正确天数:

^0(?:(?:[135](?:0[1-9]|[12]\d|3[01]))|(?:[46](0[1-9]|[12]\d|30))|2(?:0[1-9]|[12]\d))04$