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
, 1
oder 2
.
Die -
Bereichsdefinition reicht von 1
bis 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 0
wird in ASCII als Dezimalzahl 48 codiert. 9
Somit 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.