Wydaje się, że źle zrozumiałeś, jak działa definicja klas znaków w wyrażeniu regularnym.
Pasują do każdej ze strun 01
, 02
, 03
, 04
, 05
, 06
, 07
, 08
, 09
, 10
, 11
, lub 12
, coś jak to działa:
0[1-9]|1[0-2]
Bibliografia
Wyjaśnienie
Klasa znaków sama próbuje dopasować jeden i dokładnie jeden znak z ciągu wejściowego. [01-12]
faktycznie definiuje [012]
, klasę znaku, który odpowiada jeden znak z wejścia przed każdym z 3 znaków 0
, 1
lub 2
.
-
Definicja zakres idzie od 1
celu 1
, która obejmuje tylko 1
. Z drugiej strony, coś [1-9]
zawiera 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
.
Początkujący często popełniają błędy, definiując takie rzeczy jak [this|that]
. To nie „działa”. Postać ta definiuje definicji [this|a]
, tj dopasowuje jeden znak z wejścia przeciwko któremukolwiek z 6 znaków t
, h
, i
, s
, |
lub a
. Bardziej niż prawdopodobne (this|that)
jest to, co jest zamierzone.
Bibliografia
Jak definiowane są zakresy
Jest więc teraz oczywiste, że wzór taki jak between [24-48] hours
nie „działa”. Klasa znaków w tym przypadku jest równoważna [248]
.
Oznacza to, że -
w definicji klasy znaków nie definiuje się zakresu liczbowego we wzorcu. Silniki Regex tak naprawdę nie „rozumieją” liczb we wzorcu, z wyjątkiem składni skończonych powtórzeń (np. a{3,5}
Dopasowania między 3 a 5 a
).
Definicja zakresu zamiast tego wykorzystuje kodowanie znaków ASCII / Unicode do definiowania zakresów. Znak 0
jest kodowany w ASCII jako 48 dziesiętny; 9
wynosi 57. Zatem definicja znaku [0-9]
obejmuje wszystkie znaki, których wartości w kodowaniu mieszczą się w przedziale od 48 do 57 dziesiętnych. Raczej rozsądnie, przez projekt są to znaki 0
, 1
, ..., 9
.
Zobacz też
Inny przykład: od A do Z
Rzućmy okiem na inną powszechną definicję klasy znaków [a-zA-Z]
W ASCII:
A
= 65, Z
= 90
a
= 97, z
= 122
To znaczy że:
[a-zA-Z]
i [A-Za-z]
są równoważne
- W większości smaków
[a-Z]
prawdopodobnie będzie to niedozwolony zakres znaków
- ponieważ
a
(97) jest „większe niż” niż Z
(90)
[A-z]
jest legalne, ale zawiera również te sześć znaków:
[
(91), \
(92), ]
(93), ^
(94), _
(95), `
(96)
Powiązane pytania
[a-z0-9]
dopasowuje wszystkie małe litery i wszystkie cyfry, ale tylko jako pojedynczy znak.