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, 1lub 2.
-Definicja zakres idzie od 1celu 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] hoursnie „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 0jest kodowany w ASCII jako 48 dziesiętny; 9wynosi 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.