Здається, ви неправильно зрозуміли, як працює визначення класів символів у регулярному виразі.
Для того, щоб відповідати кожному з рядків 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]це відповідає всій малій літери та всім цифрам, але лише як один символ.