Klaus Mock: reguläre ausdrücke /[\d]{N,M}/

Beitrag lesen

Hallo,

er enthält aber doch drei zahlen...
Na und?
Ehm ... und warum enthält er dann doch nur zwei Zahlen?

Er enthält unter anderm auch zwei Zahlen X[99]9 bzw. X9[99].

Jetzt weiss aber echt jeder der das Wort Perl buchstabieren kann, wovon du spichst. Oder?
Ein klein wenig mehr Erklärung wäre doch echt nicht schlecht.
Vielleicht sogar der richtige RegEx mit einer Erklärung?
Wäre doch mal was anderes, oder?

/\d{1,2}/ sagt aus, daß im String _irgendwo_ eine einzelne oder zwei Ziffer hintereinander vorkommen müssen, um ein positives Matching zu erreichen. Wo und ob mehrere vorkommen ist vollkommen egal.

/^\d{1,2}$/ sagt aus, daß der String nur aus einer oder zwei Zffern bestehen darf. Das ^ steht für String-Anfang und das $ für String-Ende.

Bei dem Eingangs erwähnten Beispiel gäbe es durchaus mehrere Möglichkeiten, eine gültige Regex zu formulieren. Die verwendete (/\d{1,2}/ ist für das gewünshcte Ergebnis einfach nur zu ungenau. /^X\d{1,2}/, /\D\d{1,2}/, /[1]\d{1,2}/ oder Variantionen wie /^\D+\d{1,2}.$/ wären einige Ausdrücke aber sicherlich nicht alle.

Wichtig bei der Formulierung einer Regex ist imho, daß man den potentiellen Aufbau des Strings sehr genau kennt.
ICh schreibe hier einmal einige Klartextformulierungen auf, so wie ich die obigen Ausdrücke interpretieren würde:

/^X\d{1,2}/: Beginnt mit großem X, gefolgt von einer oder zwei Ziffern, der Rest ist egal

/\D\d{1,2}/: Beginnt mit einer Nicht-Ziffer, gefolgt von einer oder zwei Ziffern, der Rest ist egal

/[2]\d{1,2}/: Beginnt mit Großbuchstaben, gefolgt von einer oder zwei Ziffern, der Rest ist egal

/^\D+\d{1,2}.$/: Beginnt mit nindestens einer Nicht-Ziffer, gefolgt von einer oder zwei Ziffern und einem beliebigen Zeichen.

Thomas, der selbst gerne Perl können würde

Das ist zwar kein ausschließliches Perl-Thema, aber vielleicht hilft ja http://www.perldoc.com/perl5.6/pod/perlre.html bzw. http://www.perldoc.com/perl5.6/pod/perlfaq6.html etwas weiter.

Grüße
  Klaus


  1. A-Z ↩︎

  2. A-Z ↩︎