Вы, кажется, неправильно поняли, как определение классов символов работает в регулярном выражении.
Для того, чтобы соответствовать любой из строк 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].
То есть -в определении класса символов не определяется числовой диапазон в шаблоне. Механизмы регулярных выражений на самом деле не «понимают» числа в шаблоне, за исключением синтаксиса конечного повторения (например, a{3,5}совпадений между 3 и 5 a).
Вместо этого определение диапазона использует кодировку символов ASCII / Unicode для определения диапазонов. Символ 0кодируется в ASCII как десятичное число 48; 9равно 57. Таким образом, определение символа [0-9]включает в себя все символы, значения которых находятся между десятичными числами 48 и 57 в кодировке. Скорее здраво, дизайн эти символы 0, 1, ..., 9.
Смотрите также
Другой пример: от А до Я
Давайте посмотрим на определение другого общего класса символов. [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)
Связанные вопросы
[a-z0-9], что это соответствует всем строчным буквам и всем цифрам, но только как один символ.