2 Stimmen

Welcher reguläre Ausdruck entspricht diesem Muster: 22-NOV-09

Ich habe es versucht:

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

und habe keinen Erfolg. Was mache ich falsch?

Vielen Dank, Leute!

4voto

fastcodejava Punkte 37539
/^([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])$/

3voto

Zach Hirsch Punkte 22123

Um es pedantisch auszudrücken: Dieser reguläre Ausdruck passt zu ihm: 22-NOV-09 .

Wenn Sie stattdessen überprüfen wollen, ob eine gegebene Zeichenkette ein gültiges Datum in einem bestimmten Format ist, dann würde ich empfehlen, etwas zu verwenden wie strptime . Zum Beispiel:

#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 hat datetime.datetime.strptime und Perl hat POSIX::strptime . Ich bin mir sicher, dass die meisten anderen Sprachen ebenfalls über diese Funktion verfügen.

1voto

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

1voto

Alan Haggai Alavi Punkte 69510

Zeichenklassen sind mit eckigen Klammern darzustellen.

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

0voto

NVRAM Punkte 6587

Lassen Sie die ? . Und Sie können die Parens weglassen, es sei denn, Sie suchen nach Übereinstimmungen mit Teilstrings:

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

oder

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X