2012-08-02 310 views
-1

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

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

回答

2

你的正则表达式规定了恰好2位数一天组件,如果你想允许1个或2位数字,如果你看看你的数据,你有你应该使用{1,2}而不是{2}

+0

非常感谢您的信息 – Arav 2012-08-07 23:25:18

0

显然。你的模式决定了最后的数字块应该是两位数字,而你提供1.所以,如果你希望你的模式这段文字匹配,你可以试试:

if ($cmdParams{RunId} !~ m/^\d{4}_\d{2}_\d\d?$/) 
1

好:2012_07_7你可以看到这一天 - 部分是两个不数字。

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