Какое регулярное выражение соответствует этому шаблону: 22-NOV-09 - PullRequest
2 голосов
/ 06 декабря 2009

Я пробовал:

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

и у меня нет успеха. Что я делаю не так?

Спасибо, ребята!

Ответы [ 5 ]

4 голосов
/ 06 декабря 2009
/^([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])$/

3 голосов
/ 06 декабря 2009

Чтобы быть чрезмерно педантичным, этому регулярному выражению соответствует: 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. Я уверен, что большинство других языков также имеют доступ к этой функции.

1 голос
/ 06 декабря 2009

Классы символов должны быть представлены в квадратных скобках.

/^([0-3][0-9])-([A-Za-z]+)-([0-1][0-9])?$/
1 голос
/ 06 декабря 2009
/^([0-3][0-9])-([A-Za-z]+)-([0-1][0-9])$/
0 голосов
/ 06 декабря 2009

Брось ? . И вы можете отбросить парены, если вы не вытягиваете подстроки:

/^([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]$/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...