执行以下正则表达式匹配以验证日期是否为 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";
}
您的正则表达式为 day 组件指定了 2 位数字,如果您想允许 1 位或 2 位数字,您应该使用{1,2}
而不是{2}
好吧,如果您查看您拥有的数据:2012_07_7,您会看到日期部分不是两位数。
明显地。您的模式规定最后一个数字块应该是两位数,而您提供的是 1。因此,如果您希望您的模式与此文本匹配,请尝试以下操作:
if ($cmdParams{RunId} !~ m/^\d{4}_\d{2}_\d\d?$/)
我的解决方案:^\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