Вы, похоже, неправильно поняли, как работает определение классов символов в регулярном выражении.
Для сопоставления с любой из строк 01
, 02
, 03
, 04
, 05
, 06
, 07
, 08
, 09
, 10
, 11
или 12
, что-то вроде этого работает:
0[1-9]|1[0-2]
Ссылки
Объяснение
Класс символов сам по себе пытается сопоставить один и ровно один символ из входной строки.[01-12]
фактически определяет [012]
, класс символов, который соответствует одному символу из ввода против любого из 3 символов 0
, 1
или 2
.
Определение диапазона -
идет от 1
до 1
, что включает в себя только 1
.С другой стороны, что-то вроде [1-9]
включает 1
, 2
, 3
, 4
, 5
, 6
, 7
, 8
, 9
.
Начинающие часто делают ошибки, определяя такие вещи, как [this|that]
.Это не "работает".Это определение символа определяет [this|a]
, то есть оно соответствует одному символу из ввода против любого из 6 символов в t
, h
, i
, s
, |
или a
.Более чем вероятно (this|that)
- это то, что предназначено.
Ссылки
Как определяются диапазоны
Итак, теперь очевидно, что шаблон типа between [24-48] hours
не "работает".Класс символов в этом случае эквивалентен [248]
.
То есть -
в определении класса символов не определяет числовой диапазон в шаблоне.Движки Regex на самом деле не «понимают» числа в шаблоне, за исключением синтаксиса с конечным повторением (например, a{3,5}
совпадение от 3 до 5 a
).
Вместо определения диапазона используется кодировка ASCII / Unicodeсимволов для определения диапазонов.Символ 0
кодируется в ASCII как десятичное число 48;9
равно 57. Таким образом, определение символа [0-9]
включает в себя все символы, значения которых в кодировке находятся между десятичными 48 и 57.Весьма разумно, что по замыслу эти символы 0
, 1
, ..., 9
.
См. Также
Другой пример: от A до Z
Давайте рассмотрим определение другого общего символа [a-zA-Z]
В ASCII:
A
= 65, Z
= 90 a
= 97, z
= 122
Это означает, что:
[a-zA-Z]
и [A-Za-z]
эквивалентны - В большинстве разновидностей
[a-Z]
может быть недопустимым диапазоном символов - , поскольку
a
(97)«больше чем» чем Z
(90)
[A-z]
допустимо, но также включает в себя следующие шесть символов: [
(91), \
(92), ]
(93), ^
(94), _
(95), `
(96)
Смежные вопросы