Sie scheinen falsch verstanden zu haben, wie die Definition von Zeichenklassen in Regex funktioniert.
Um eine der Saiten zu entsprechen 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, oder 12, so etwas wie dies funktioniert:
0[1-9]|1[0-2]
Verweise
Erläuterung
Eine Zeichenklasse selbst versucht, ein und genau ein Zeichen aus der Eingabezeichenfolge abzugleichen. [01-12]tatsächlich definiert [012], eine Zeichenklasse , das ein Zeichen aus dem Eingang gegen keines der 3 Zeichen übereinstimmt 0, 1oder 2.
Die -Bereichsdefinition reicht von 1bis 1, einschließlich just 1. Auf der anderen Seite, so etwas wie [1-9]beinhaltet 1, 2, 3, 4, 5, 6, 7, 8, 9.
Anfänger machen oft die Fehler, Dinge wie zu definieren [this|that]. Das "funktioniert" nicht. Dieser Zeichendefinition definiert [this|a], dh es ist ein Zeichen aus dem Eingangs gegen keines von 6 Zeichen entspricht in t, h, i, s, |oder a. Mehr als wahrscheinlich (this|that)ist das, was beabsichtigt ist.
Verweise
Wie Bereiche definiert werden
So ist es jetzt offensichtlich, dass ein Muster wie between [24-48] hours"nicht funktioniert". Die Zeichenklasse entspricht in diesem Fall [248].
Das heißt, -in einer Zeichenklasse definiert die Definition keinen numerischen Bereich im Muster. Regex-Engines "verstehen" Zahlen im Muster nicht wirklich, mit Ausnahme der Syntax endlicher Wiederholungen (z. B. a{3,5}Übereinstimmungen zwischen 3 und 5 a).
Die Bereichsdefinition verwendet stattdessen die ASCII / Unicode-Codierung der Zeichen, um Bereiche zu definieren. Das Zeichen 0wird in ASCII als Dezimalzahl 48 codiert. 9Somit enthält die Zeichendefinition [0-9]alle Zeichen, deren Werte in der Codierung zwischen 48 und 57 liegen. Vielmehr vernünftig, durch Design , das sind die Zeichen 0, 1, ..., 9.
Siehe auch
Ein weiteres Beispiel: A bis Z.
Werfen wir einen Blick auf eine andere allgemeine Definition der Zeichenklasse [a-zA-Z]
In ASCII:
A= 65, Z= 90
a= 97, z= 122
Dies bedeutet, dass:
[a-zA-Z]und [A-Za-z]sind gleichwertig
- In den meisten Geschmacksrichtungen
[a-Z]handelt es sich wahrscheinlich um einen illegalen Zeichenbereich
- weil
a(97) "größer als" als Z(90) ist
[A-z] ist legal, enthält aber auch diese sechs Zeichen:
[(91), \(92), ](93), ^(94), _(95), `(96)
Verwandte Fragen
[a-z0-9]Dies entspricht allen Kleinbuchstaben und allen Ziffern, jedoch nur als einzelnes Zeichen.