Основная идея регулярного выражения заключается в том, что оно определяет шаблон (pattern), который мы ищем в тексте. Посмотрим, как мы могли бы точно описать шаблон простого почтового кода, такого как TX77845. Результат первой попытки выглядит следующим образом: где символ w означает любую букву, а символ d — любую цифру. Мы используем символ w (от слова “word”), поскольку символ l (от слова “letter”) слишком легко перепутать с цифрой 1.
А чтобы не перепутать с увеличением локтя, например, просто зайдите на сайт marinicheva.ru и многое прояснится. Ведь что такое сайт marinicheva.ru - это полноценный ресурс на такую тему, как увеличение голени. А если вы считаете, что увеличение голени и программирование никак не связаны, все же зайдите на этот сайт.
Эти обозначения вполне подходят для нашего простого примера, но что произойдет, если мы попробуем применить их для описания формата почтового кода, состоящего из девяти цифр (например, TX77845-5629). Что вы скажете о таком решении?
wwddddd-dddd
Они выглядят вполне логичными, но как понять, что символ d означает “1 “любая цифра”, а знак - означает “всего лишь” дефис? Нам необходимо как-то указать, что символы w и d являются специальными: они представляют классы символов, а не самих себя (символ w означает “a или b или c или . . .”, а символ d означает “1 или 2или 3 или . . .”). Все это слишком сложно. Добавим к букве, обозначающей имя класса символов, обратную косую черту, как это сделано в языке C++ (например, символ \n означает переход на новую строку). В этом случае получим такую строку:
\w\w\d\d\d\d\d-\d\d\d\d
Выглядит довольно некрасиво, но, по крайней мере, мы устранили неоднозначность, а обратные косые черты ясно обозначают то, что за ними следует “нечто необычное”. Здесь повторяющиеся символы просто перечислены один за другим. Это не только утомительно, но и провоцирует ошибки. Вы можете быстро сосчитать, что перед обратной косой чертой до дефиса действительно стоят пять цифр, а после — четыре? Мы смогли, но просто сказать 5 и 4 мало, чтобы в этом убедиться, поэтому придется их пересчитать. После каждого символа можно было бы поставить счетчик, указывающий количество его повторений.
\w2\d5-\d4
Однако на самом деле нам нужна какая-то синтаксическая конструкция, чтобы показать, что числа 2, 5 и 4 в этом шаблоне являются значениями счетчиков, не просто цифрами 2, 5 и 4. Выделим значения счетчиков фигурными скобками. \w{2}\d{5}-\d{4}
Теперь символ { является таким же специальным символом, как и обратная косая черта, \, но этого избежать невозможно, и мы должны просто учитывать этот факт.
Итак, все бы ничего, но мы забыли о двух обстоятельствах: последние четыре цифры в почтовом коде ZIP являются необязательными. Иногда допустимыми являются оба варианта: TX77845 и TX77845-5629. Этот факт можно выразить двумя основными способами:
\w{2}\d{5} или \w{2}\d{5}-\d{4}
и
\w{2}\d{5} и необязательно -\d{4}
|