-1

执行以下正则表达式匹配以验证日期是否为 YYYY_MM_DD 格式。但如果我的值为 2012_07_7,正则表达式会给出错误消息。根据正则表达式模式,日期部分和月份应该正好是 2 位数字。不知道为什么它不起作用。

if ($cmdParams{RunId} !~ m/^\d{4}_\d{2}_\d{2}$/)
{
  print "Not a valid date in the format YYYY_MM_DD";
}
4

4 回答 4

2

您的正则表达式为 day 组件指定了 2 位数字,如果您想允许 1 位或 2 位数字,您应该使用{1,2}而不是{2}

于 2012-08-02T07:25:44.957 回答
1

好吧,如果您查看您拥有的数据:2012_07_7,您会看到日期部分不是两位数。

于 2012-08-02T07:26:09.007 回答
0

明显地。您的模式规定最后一个数字块应该是两位数,而您提供的是 1。因此,如果您希望您的模式与此文本匹配,请尝试以下操作:

if ($cmdParams{RunId} !~ m/^\d{4}_\d{2}_\d\d?$/)
于 2012-08-02T07:25:33.060 回答
0

我的解决方案:^\d{4}_(?:1[0-2]|0?[1-9])_(?:3[01]|[1-2]\d|0?[1-9])$
此模式匹配:2000_12_01 或 2001_1_1 或 2001_02_1

于 2012-08-02T10:24:53.723 回答