正则表达式匹配此模式:22-NOV-09

时间:2009-12-06 07:35:54

标签: regex

我试过了:

/^([0-3][0-9])-(A-Za-z)-([0-1][0-9])?$/

并没有成功。我做错了什么?

谢谢大家!

5 个答案:

答案 0 :(得分:4)

/^([0-3][0-9])-([A-Z]{3})-([0-1][0-9])$/

编辑: /^(0[1-9]|[1-2][0-9]|3[0-1])-([A-Z]{3})-(0[1-9]|1[0-9])$/

答案 1 :(得分:3)

过于迂腐,这个正则表达式匹配它:22-NOV-09

如果您想要的是验证给定字符串是否是特定格式的验证日期,那么我建议使用strptime之类的内容。例如:

#define _XOPEN_SOURCE
#include <time.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
   struct tm tm;
   char *p;

   p = strptime(argv[1], "%d-%b-%y", &tm);
   if (p && *p == '\0')  {
      printf("Matches\n");
      return 0;
   }
   else {
      printf("Didn't match\n");
      return 1;
   }
}

Python有datetime.datetime.strptime,Perl有POSIX::strptime。我相信大多数其他语言也可以使用这个功能。

答案 2 :(得分:1)

/^([0-3][0-9])-([A-Za-z]+)-([0-1][0-9])$/

答案 3 :(得分:1)

字符类用方括号表示。

/^([0-3][0-9])-([A-Za-z]+)-([0-1][0-9])?$/

答案 4 :(得分:0)

放弃。你可以删除parens,除非你在拉子串匹配:

/^([0-3][0-9])-([A-Z][A-Z][A-Z])-([0-1][0-9])$/

/^[0-3][0-9]-[A-Z][A-Z][A-Z]-[0-1][0-9]$/