Я пробовал:Что регулярное выражение соответствует этой схеме: 22-ноября-09
/^([0-3][0-9])-(A-Za-z)-([0-1][0-9])?$/
и я, не имея успеха. Что я делаю не так?
Спасибо вам, ребята!
Я пробовал:Что регулярное выражение соответствует этой схеме: 22-ноября-09
/^([0-3][0-9])-(A-Za-z)-([0-1][0-9])?$/
и я, не имея успеха. Что я делаю не так?
Спасибо вам, ребята!
/^([0-3][0-9])-([A-Z]{3})-([0-1][0-9])$/
EDIT: /^(0[1-9]|[1-2][0-9]|3[0-1])-([A-Z]{3})-(0[1-9]|1[0-9])$/
Вы должны сказать, что ОП делал неправильно ... – bobbymcr
/^([0-3][0-9])-([A-Za-z]+)-([0-1][0-9])$/
Классы символов должны быть представлены квадратными скобками.
/^([0-3][0-9])-([A-Za-z]+)-([0-1][0-9])?$/
Отбросьте ?. И вы можете опустить скобки, если вы не тянете подстроки матчи:
/^([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]$/
Чтобы быть слишком педантичным, это регулярное выражение соответствует его: 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
. Я уверен, что большинство других языков имеют доступ к этой функции.
Вам нужно регулярное выражение, чтобы проверить, является ли дата действительной датой? В этом случае я бы воздержался от таких регулярных выражений, они также соответствуют 39-OTZ-03, что, вероятно, не то, что вы хотите. –
Я абсолютно согласен с тобой - дело в том, что я не проверяю ввод пользователя, я уверен, что при анализе импорта CSV у меня нет проблемы с смещением столбцов. Это единственный столбец в таком формате, и ответ fastcodejava работает как шарм! – Drew