⚠️ Этот текст — максимально краткое введение в регулярные выражения. Если вы хотите разобраться подробнее, у «Системного Блока» есть большой гайд по регулярным выражениям в трёх частях: раз, два, три.
Что такое регулярные выражения?
Регулярные выражения (Regular Expression или Regex) — это инструмент для работы с текстом, который позволяет искать и изменять подстроки в тексте, соответствующие заданному шаблону.
К примеру, представим большой текстовый файл с данными о студентах: именами, фамилиями и адресами электронной почты. В этом файле необходимо найти все адреса, чтобы составить рассылку. У адресов электронной почты общая структура: они состоят из двух строк, разделённых символом «@», поэтому можно задать регулярное выражение, которое описывает эту структуру, и затем использовать его для поиска всех адресов.
Как устроены регулярные выражения?
Регулярные выражения состоят из символов, которые представляют определённые шаблоны и правила поиска. Вот некоторые из наиболее часто используемых:
- Символы. Обычные символы соответствуют сами себе. Например, выражение «abc» найдет все строки «abc» в тексте.
- Метасимволы — специальные символы, которые представляют классы символов. Например, символ «.» соответствует любому символу, а символ «\d» соответствует любой цифре.
- Группы и альтернация позволяют объединять символы в группы (границы группы обозначаются скобками) и искать альтернативы (альтернация обозначается символом «|»). Например, выражение «(abc|def)» найдет либо «abc», либо «def».
- Квантификаторы определяют количество повторений символа или группы символов. Символ «+» соответствует одному или более вхождению предыдущего символа или группы символов.
Приведём пример регулярного выражения, которое решает задачу поиска адресов электронной почты. Электронный адрес состоит из имени пользователя и доменного имени (gmail.com, mail.ru и так далее), эти две части разделены символом «@». Зададим регулярное выражение, которое решает эту задачу (для простоты примера предположим, что все домены находятся либо в ru, либо в com):
(.+)@(.+)\.(com|ru)
Это регулярное выражение содержит три группы:
- Группа (.+) (до символа «@») соответствует имени пользователя, которое представляет из себя хотя бы один (хотя бы единичное вхождение определяется квантификатором «+») символ (любой символ обозначается метасимволом «.»).
- Группа (.+), которая идет после символа «@», задаёт доменное имя.
- В группе (com|ru), которая идет после «\.» содержатся две строки: «com» и «ru», символом альтернации «|» мы говорим, что в тексте может содержаться либо «com», либо «ru».
«\» перед точкой позволяет различать метасимволы, границы группы и квантификаторы от обычных символов. Так «.» — это метасимвол, а «\.» обозначает просто точку.
Отметим, что на самом деле адреса электронных почт определяются большим количеством правил: так, например, имя пользователя не может содержать некоторые символы.
Где используются регулярные выражения?
Регулярные выражения используются для анализа текстов в NLP и Digital Humanities, в биоинформатике для поисков паттернов в геномах. Также программисты пользуются ими для быстрого редактирования текста кода и для валидации входных данных пользователя: проверки правильности введенной электронной почты, даты и других данных, которые должны следовать определённому шаблону.