Системное администрирование и разработка программного обеспечения – области, в которых специалисты часто должны знать об особых символах и функциях, а также процессах, происходящих в различных системах, незаметных пользовательскому глазу. Пример – использование особых символов для распознавания начала и конца строки. Обычно они не печатаются и не отображаются в тексте, но системы и программы должны «знать», где начинается и заканчивается элемент.
Для этого используются так называемые регулярные выражения. Далее предстоит поговорить о них более подробно. Необходимо выяснить, что собой представляет регулярное выражение, как и для чего оно используется, в каких областях применяется. Эта информация пригодится не только новичкам, но и более опытным разработчикам/системным администраторам.
Определение
Регулярное выражение (или regexp, regular expressions) – это формальный язык, который используется в программном обеспечении, работающем с текстом. Применяется regexp для поиска и осуществления различных операций с подстроками в тексте. Базируется на внедрении специальных метасимволов (символов джокеров или wildcard characters). Для поиска используется строка-образец (маска или шаблон), которая состоит из символов и метасимволов. Она задает правила поиска необходимой информации. Для операций с текстом будет дополнительно задана строка замены, которая может включать в себя специальные символы.
Регулярные выражения в программировании – удобный метод описания текстовых шаблонов. С их помощью удается проверять пользовательский ввод, а также искать некоторые маски. Представлены regexp своеобразными «шаблонами», которые будут использоваться для сопоставления символов в строках. Встречаются в различных языках разработки.
Пример – в JavaScript рассматриваемые шаблоны используются в методах и объектах:
- test;
- exec;
- string;
- match;
- search;
- replace;
- regexp.
Далее регулярка будет рассмотрена на примерах Python и JavaScript. Это поможет быстрее разобраться в том, как определиться конец строки, а также воспользоваться соответствующими данными для редактирования информации и совершения иных операций.
Что можно сделать при помощи regexp
Регулярка в программировании и системном администрировании – полезный компонент. При помощи регулярных выражений можно:
- проверять, что вводит пользователь для уверенности в корректности информации (пример – правильно ли человек указал телефон, IP-адрес или e-mail);
- производить замену по заданному шаблону;
- быстрее оперировать данными и управлять ими на профессиональном уровне;
- разбивать текст на небольшие куски (пример – выбирать данные из крупного лога).
Регулярка поддерживается большинством текстовых редакторов, а также языков программирования.
Синтаксис
Синтаксическая запись регулярных выражений является простой и понятной. Она включает в себя символ, который выступает в качестве разделителя (он указывается в начале и конце выражения), а также шаблон поиска и необязательные модификаторы. Выглядит форма записи regexp так:
В качестве разделителя может выступать любой символ. Обычно это «/» или «~». Главное, чтобы строка шаблона начиналась и заканчивалась одним и тем же символом. В конце regexp указываются модификаторы. Они требуются для изменения логики работы имеющихся шаблонов.
Вот наглядный пример строки на изучаемом языке: / Мы пошли гулять одни/ ugi. Здесь:
- / – начальный символ, выступающий в виде разделителя строки;
- «Мы пошли гулять одни» – поисковый шаблон;
- / – символ, указывающий на конец строки;
- ugi – модификаторы (UTF-8, global, case insensitive).
Соответствующая запись в строке будет искать текст «Мы пошли гулять одни», независимо от регистра по заданному тексту неограниченное количество раз. U – модификатор, который явно указывает на то, что текстовые данные написаны на Unicode (содержат символы, отличающиеся от латиницы). I используется для регистронезависимости во время поиска. Если написать этот символ в строке, система будет искать по шаблону информацию, независимо от типа регистра. G – модификатор, который указывает поисковику на то, что нужно идти в процессе выполнения задачи до самого конца документа. В противном случае система прекратит операции при первом обнаруженном совпадении в строке.
В программировании
Отдельное внимание regex рекомендуется уделить непосредственно в разработке программного обеспечения. В Python соответствующий компонент представляет некоторое выражение, представленное в виде последовательности команд. Составляется такая запись при помощи специальных метасимволов. Они будут изучены подробнее далее.
Стоит обратить внимание на то, что регулярные выражения (regular expressions) во время проверки (поиска) информации будет учитывать регистр. Буквы «ё» и «Ё» не входят в имеющиеся алфавитные диапазоны. Чтобы обнаружить их в строке, потребуется указывать соответствующие компоненты отдельно.
В JavaScript регулярные выражения могут быть созданы несколькими способами:
- Через литералы регулярных выражений. Они вызывают предварительную компиляцию regexp при анализе имеющегося скрипта. Если используемая «команда» часто применяется, такой вариант создания поможет увеличить производительность.
- При помощи вызова конструктора объекта символьного класса RegExp. Компиляция регулярного выражения будет осуществляться непосредственно во время исполнения скрипта. Прием особо хорош тогда, когда разработчик знает, что выражение будет изменяться. Используется данная концепция и тогда, когда шаблон неизвестен заранее. Пример – получение строки из стороннего источника или путем пользовательского ввода.
Выше можно увидеть два примера regexp соответственно. В JavaScript пользователи могут составлять шаблоны рассматриваемого компонента. Они состоят из обычных слов или комбинаций обычных и специальных символов в строке. Скобки часто используются для «запоминания». Этот знак позволяет «зафиксировать» информацию для дальнейшего использования.
Применение простых шаблонов и специальных символов
Простой шаблон используется для нахождения прямого соответствия в текстовой строке. Пример – /abc / соответствует комбинации символов в строке только тогда, когда символы abc встречаются в заданной последовательности. Это – элементарное соответствие, которое будет искать система. Набор символов, указанных в «шаблоне» не предусматривает никаких изменений. Такой поиск требуется не всегда. Обычно разработчики и системные администраторы стараются найти данные с «расширенными» параметрами.
Для этого используются специальные символы. Находить с их помощью данные удается быстрее и точнее. Пример – можно найти символы в диапазоне или без учета регистра. Запись /ab*c/ указывает на то, что искать необходимо символы, в которой за a следует ноль или более b. Символ «звездочка» указывает на ноль или более вхождений предыдущего символа в строке. Далее в используемой записи следует один символ c.
Таблицы специальных символов
Чтобы грамотно составлять регулярные выражения (regular expression), разработчику необходимо познакомиться со специальными символами. Их очень много для каждого языка. Далее будут рассмотрены основные спецсимволы в JavaScript и Python.
Для Python
Внутри «поискового шаблона» разработчик должен использовать спецсимволы для того, чтобы задавать различные параметры поиска. Вот наиболее распространенные записи:
Символьное обозначениеДля чего используется. (точка)Соответствует любому символу, исключая новую строчку[] (квадратные скобки)Любой символ из указанных в скобках. Символьные данные разрешено задавать как перечислением, так и диапазоном через дефис.[^]Любой «знак», за исключением написанных в скобках.^Начало строчки$Конец строки|Логическое или. Регулярное выражение будет искать один из нескольких вариантов.\ (обратный слеш)Экранирование. Дает возможность выражениям ориентироваться, является ли следующий за \ символ в строке обычным или специальным.
При записи регулярных выражений часто какая-то часть заданного шаблона должна повторяться установленное количество раз. Число вхождений в синтаксисе regex задается через так называемые квантификаторы. Они всегда размещаются там, где шаблонная запись должна повториться.
Символьная записьОпределение{} (фигурные скобки)Указывает на то, что граница слова или выражения может быть задана единичным числом или диапазоном. Цифра, указывающая на границу, указывается внутри скобок. Диапазон задается через запятую.? (вопросительный знак)От нуля до одного вхождения* (звездочка)От нуля вхождений. «Верхняя» граница в этом диапазоне не задается.+ (плюс)Одно или более вхождений.
Заданные примеры актуальны для Python. Далее предстоит поближе познакомиться со специальными символьными записями для поиска строк и их частей в JavaScript.
В JavaScript
В случае с JavaScript пользователю предстоит задействовать аналогичные знаки для осуществления различных действий при использовании regexp. Вот то, что необходимо запомнить об их применении в JS:
Символьная запись в строкеОписание и особенности\может соответствовать окончанию слова – если обработка осуществляется буквально;интерпретируется буквально – если шаблон обрабатывается особым образом;требует экранирования при использовании в записи new Reg экранирующим компонентов в обычных строках.^Начало строки. Указывает на «момент», начиная от которого, осуществляется ввод. При установки спецсимвола многострочности (перевод строки), работает после переноса строчки. Каретки в самом начале шаблона имеет иное значение. Пример – /[^a-z\s] указывает на I в «I have 3 sisters»$Конец ввода. Работает при переносе строки.*Соответствие предыдущему компоненту, который повторен 0 или больше раз.+Предыдущий компонент, повторенный 1 больше раз. Работает как и в Python.?Предыдущий повторенный компонент 0 или 1 раз. При применении после квалификаторов *, +, ?, {} делает квалификатор соответствующим минимальному количеству элементов в шаблоне.(…)Соответствие с указанным в скобках компонентом. Называется такая запись «захватывающими скобками».\wЛюбой цифробуквенный элемент, включая подчеркивания.\WЛюбой компонент, который не является цифробуквенным.\rВозврат каретки\nПеревод строки\fПрогон страницы. Относится к категории управляющих символьных записей для печати.
Здесь можно увидеть больше примеров регулярных выражений для JavaScript. Они будут одинаково хорошо работать как в Python, так и в JavaScript.
Расширенный поиск и флаги
У регулярных выражений во всех языках разработки и при системном администрировании поддерживаются опциональные флаги. С их помощью специалисты смогут задавать расширенные параметры поиска. Флаги могут использоваться самостоятельно или совместно в любом порядке. Их запись иногда – это часть регулярного выражения в сформированном запросе.
Что за флаг (обозначение)Краткое описаниеgОтвечает за глобальный поиск. Система будет проверять весь текстовых документ.iПоиск без поддержки учета регистраmМногострочный поискvНачинает поиск от знака, который расположен на позиции свойства lastindex текущего регулярного выражения.
Для того, чтобы использовать обозначенные флаги в шаблоне, регулярные выражения предлагают следующий синтаксис:
Флаги – это неотъемлемая часть регулярного выражения. Они не могут быть скорректированы позднее. Установка «уточняющих» знаков в шаблоне возможна исключительно до обработки соответствующего фрагмента.
Спецсимволы и проверка входных данных
Еще один момент, на который необходимо обратить внимание – это принцип использования спецсимволов (знаки начала строки, окончания и так далее) для проверки корректности входных данных.
Вот – пример, в котором пользователь должен ввести номер телефона. После нажатия клиентом на кнопку «Check», скрипт проверит корректность указанной комбинации. Если все верно, система сообщит об этом в виде благодарности. В противном случае появляется уведомление о том, что номер неправильный.
Внутри незахватывающих скобок (?:, регулярное выражение будет искать три цифры \d{3} или | открывающую скобку \(, после этого – три цифры и закрывающую скобку \).
Событие «Изменить» будет активировано после того, как пользователь подтвердит ввод значения регулярного выражения. Для этого потребуется нажать на клавишу «Enter».
Особенности осуществления поиска
Regexp – это инструменты для работы со строками, которые являются основной их единицей. Строка представлена рассматриваемым компонентом, а также текстом, по которому осуществляется непосредственный поиск.
Обнаруженные в тексте совпадения с заданным шаблоном – это подстроки. Пример – есть regexp м. (буква «м» и любой символ), а также строка текста «Мама мыла раму». При применении regex будут обнаружены подстроки:
Подстрока «Ма» будет пропущена ввиду того, что в ней используется другой регистр.
Более мелким компонентом в строке является группа. Она представляет собой часть подстроки, которая выделена специально. Группы выделяются круглыми скобками (). В Python можно сформировать на основе уже изученного примера такую строку «запроса»:
Здесь указано следующее:
- буквенный символ, выделенный группой;
- за ним – три буквенных символа, которые тоже выделены группой.
Этот шаблон представляет собой 4 буквенных символа. В строке «Мама мыла раму» будут обнаружены три совпадения. Из них система выделит две группы:
За счет такого приема удается из найденной подстроки извлечь необходимую конкретную информацию. Пример – обнаружение адреса, в котором есть: улица, номер дома и квартира. Подстрока – это «полный адрес», а в группы можно выделить отдельно каждую его структурную единицу, чтобы в будущем обращаться к соответствующим компонентам напрямую.
Группы могут получать имена. Для этого используется форма:
Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в Otus!
<!DOCTYPE html>
<html dir="ltr" lang="ru-RU">
<head>
<meta charset="UTF-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="profile" href="http://gmpg.org/xfn/11" />
<title>Регулярные выражения OTUS</title>
<!-- All in One SEO 4.5.2.1 - aioseo.com -->
<meta name="description" content="Системное администрирование и разработка программного обеспечения – области, в которых специалисты часто должны знать об особых символах и функциях, а также процессах, происходящих в различных системах, незаметных пользовательскому глазу. Пример – использование особых символов для распознавания начала и конца строки. Обычно они не печатаются и не отображаются в тексте, но системы и программы должны «знать»," />
<meta name="robots" content="max-image-preview:large" />
<link rel="canonical" href="https://otus.ru/journal/regulyarnye-vyrazheniya/" />
<meta name="generator" content="All in One SEO (AIOSEO) 4.5.2.1" />
<script type="application/ld+json" class="aioseo-schema">
{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#article","name":"\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f OTUS","headline":"\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f","author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/06\/oj-1080x72056-1.jpg","width":2245,"height":1587},"datePublished":"2023-06-05T21:00:25+00:00","dateModified":"2023-06-05T21:03:05+00:00","inLanguage":"ru-RU","mainEntityOfPage":{"@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#webpage"},"isPartOf":{"@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#webpage"},"articleSection":"\u041f\u043e\u043b\u0435\u0437\u043d\u043e\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435"},{"@type":"BreadcrumbList","@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/#listItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/otus.ru\/journal\/","nextItem":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#listItem"},{"@type":"ListItem","@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#listItem","position":2,"name":"\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f","previousItem":"https:\/\/otus.ru\/journal\/#listItem"}]},{"@type":"Organization","@id":"https:\/\/otus.ru\/journal\/#organization","name":"\u041e\u0442\u0443\u0441 \u043e\u043d\u043b\u0430\u0439\u043d-\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435","url":"https:\/\/otus.ru\/journal\/","sameAs":["https:\/\/www.youtube.com\/channel\/UCetgtvy93o3i3CvyGXKFU3g"],"contactPoint":{"@type":"ContactPoint","telephone":"+74999389202","contactType":"Customer Support"}},{"@type":"Person","@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author","url":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/","name":"A. Pavlenko","image":{"@type":"ImageObject","@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/d4c499a104d7c2522fa41f89e6819499?s=96&d=mm&r=g","width":96,"height":96,"caption":"A. Pavlenko"}},{"@type":"WebPage","@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#webpage","url":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/","name":"\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f OTUS","description":"\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0435 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u2013 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u0447\u0430\u0441\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445, \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445, \u043d\u0435\u0437\u0430\u043c\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u043c\u0443 \u0433\u043b\u0430\u0437\u0443. \u041f\u0440\u0438\u043c\u0435\u0440 \u2013 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0441\u043e\u0431\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0438 \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u0440\u043e\u043a\u0438. \u041e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0438 \u043d\u0435 \u043f\u0435\u0447\u0430\u0442\u0430\u044e\u0442\u0441\u044f \u0438 \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0435\u043a\u0441\u0442\u0435, \u043d\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u00ab\u0437\u043d\u0430\u0442\u044c\u00bb,","inLanguage":"ru-RU","isPartOf":{"@id":"https:\/\/otus.ru\/journal\/#website"},"breadcrumb":{"@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#breadcrumblist"},"author":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"creator":{"@id":"https:\/\/otus.ru\/journal\/author\/a-pavlenko\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/otus.ru\/journal\/wp-content\/uploads\/2023\/06\/oj-1080x72056-1.jpg","@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#mainImage","width":2245,"height":1587},"primaryImageOfPage":{"@id":"https:\/\/otus.ru\/journal\/regulyarnye-vyrazheniya\/#mainImage"},"datePublished":"2023-06-05T21:00:25+00:00","dateModified":"2023-06-05T21:03:05+00:00"},{"@type":"WebSite","@id":"https:\/\/otus.ru\/journal\/#website","url":"https:\/\/otus.ru\/journal\/","name":"OTUS JOURNAL","description":"Blog about IT","inLanguage":"ru-RU","publisher":{"@id":"https:\/\/otus.ru\/journal\/#organization"}}]}
</script>
<!-- All in One SEO -->
<link rel='dns-prefetch' href='//otus.ru' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel='stylesheet' id='wp-block-library-css' href='https://otus.ru/journal/wp-includes/css/dist/block-library/style.min.css?ver=6.4.7' type='text/css' media='all' />
<style id='classic-theme-styles-inline-css' type='text/css'>
/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
</style>
<style id='global-styles-inline-css' type='text/css'>
body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}body .is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}body .is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}body .is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}body .is-layout-flex{flex-wrap: wrap;align-items: center;}body .is-layout-flex > *{margin: 0;}body .is-layout-grid{display: grid;}body .is-layout-grid > *{margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
.wp-block-navigation a:where(:not(.wp-element-button)){color: inherit;}
:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}
:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}
.wp-block-pullquote{font-size: 1.5em;line-height: 1.6;}
</style>
<link rel='stylesheet' id='wbcr-comments-plus-url-span-css' href='https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/css/url-span.css?ver=2.2.0' type='text/css' media='all' />
<link rel='stylesheet' id='wpel-style-css' href='https://otus.ru/journal/wp-content/plugins/wp-external-links/public/css/wpel.css?ver=2.59' type='text/css' media='all' />
<link rel='stylesheet' id='ez-toc-css' href='https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/css/screen.min.css?ver=2.0.61' type='text/css' media='all' />
<style id='ez-toc-inline-css' type='text/css'>
div#ez-toc-container .ez-toc-title {font-size: 120%;}div#ez-toc-container .ez-toc-title {font-weight: 500;}div#ez-toc-container ul li {font-size: 95%;}div#ez-toc-container nav ul ul li {font-size: 90%;}
.ez-toc-container-direction {direction: ltr;}.ez-toc-counter ul{counter-reset: item ;}.ez-toc-counter nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }.ez-toc-widget-direction {direction: ltr;}.ez-toc-widget-container ul{counter-reset: item ;}.ez-toc-widget-container nav ul li a::before {content: counters(item, ".", decimal) ". ";display: inline-block;counter-increment: item;flex-grow: 0;flex-shrink: 0;margin-right: .2em; float: left; }
</style>
<link rel='stylesheet' id='contentberg-fonts-css' href='https://fonts.googleapis.com/css?family=Roboto%3A400%2C500%2C700%7CPT+Serif%3A400%2C400i%2C600%7CIBM+Plex+Serif%3A500' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-core-css' href='https://otus.ru/journal/wp-content/themes/contentberg/style.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='contentberg-lightbox-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/lightbox.css?ver=1.8.3' type='text/css' media='all' />
<link rel='stylesheet' id='font-awesome-css' href='https://otus.ru/journal/wp-content/themes/contentberg/css/fontawesome/css/font-awesome.min.css?ver=1.8.3' type='text/css' media='all' />
<script type="text/javascript" id="breeze-prefetch-js-extra">
/* <![CDATA[ */
var breeze_prefetch = {"local_url":"https:\/\/otus.ru\/journal","ignore_remote_prefetch":"1","ignore_list":["\/wp-admin\/"]};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/breeze/assets/js/js-front-end/breeze-prefetch-links.min.js" id="breeze-prefetch-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.min.js" id="jquery-core-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery-migrate.min.js" id="jquery-migrate-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/lazysizes.js" id="lazysizes-js"></script>
<link rel="https://api.w.org/" href="https://otus.ru/journal/wp-json/" /><link rel="alternate" type="application/json" href="https://otus.ru/journal/wp-json/wp/v2/posts/6586" /><link rel='shortlink' href='https://otus.ru/journal/?p=6586' />
<link rel="alternate" type="application/json+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fregulyarnye-vyrazheniya%2F" />
<link rel="alternate" type="text/xml+oembed" href="https://otus.ru/journal/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fregulyarnye-vyrazheniya%2F&format=xml" />
<script>var Sphere_Plugin = {"ajaxurl":"https:\/\/otus.ru\/journal\/wp-admin\/admin-ajax.php"};</script><link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-32x32.png" sizes="32x32" />
<link rel="icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-192x192.png" sizes="192x192" />
<link rel="apple-touch-icon" href="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-180x180.png" />
<meta name="msapplication-TileImage" content="https://otus.ru/journal/wp-content/uploads/2020/11/cropped-OTUS_logo_OTUS-COMP-LOGO-WHITE-1-270x270.png" />
<style type="text/css" id="wp-custom-css">
#menu-item-10406 .wpel-icon {
display: none;
}
#menu-item-10407 .wpel-icon {
display: none;
}
.otus-login-site a .wpel-icon {
display: none;
}
.menu-menju-navykov-container a .wpel-icon {
display: none;
}
.otus-login-site a
{
background: #ffd709;
border-radius: 12px;
color: #0f0f10;
font-size: 14px;
font-weight: 700;
line-height: 20px;
display: block;
text-align: center;
padding: 8px 25px;
}
.main-footer.dark {
background: linear-gradient(90deg, #a64fc5, #4f54e6);
border-color: transparent;
}
.main-footer.bold .copyright {
color: #fff;
}
.main-footer.bold .to-top i {
color: #fff;
}
.main-footer.bold .back-to-top {
color: #fff;
}
.nav__scroll {
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
.scrollable-menu .menu {
display: flex;
}
.nav__scroll
{
background: linear-gradient(90deg, #a64fc5, #4f54e6);
}
.scrollable-menu .menu .menu-item {
flex: 0 0 auto;
padding: 15px 15px;
}
.scrollable-menu .menu .menu-item a {
color: #fff;
}
.nav__scroll::-webkit-scrollbar{background-color:#fff;height:5px;}
.nav__scroll::-webkit-scrollbar-thumb{background-color:#dcdcdc;}
.nav__scroll::-webkit-scrollbar-track{-webkit-border-radius:0;border-radius:0;background-color:#fff;}/
body {
min-width: 320px;
}
.banner-click img {
margin: 0 auto;
display: block;
}
.banner-click {
cursor: pointer;
}
.banner-footer-area {
margin-bottom: 20px;
}
.banner-left-area {
margin-top: 40px;
} </style>
<!--Start VDZ Yandex Metrika Plugin-->
<!-- Yandex.Metrika counter --><script type="text/javascript" >(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");ym(34531570, "init", {clickmap:true, trackLinks:true, accurateTrackBounce:true, webvisor:true, trackHash:true, ecommerce:"dataLayer"});</script>
<noscript><div><img src="https://mc.yandex.ru/watch/34531570" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter --><!--START ADD EVENTS FROM CF7--><script type='text/javascript'>document.addEventListener( 'wpcf7submit', function( event ) {
//event.detail.contactFormId;
if(ym){
//console.log(event.detail);
ym(34531570, 'reachGoal', 'VDZ_SEND_CONTACT_FORM_7');
ym(34531570, 'params', {
page_url: window.location.href,
status: event.detail.status,
locale: event.detail.contactFormLocale,
form_id: event.detail.contactFormId,
});
}
}, false );
</script><!--END ADD EVENTS FROM CF7-->
<!--End VDZ Yandex Metrika Plugin-->
</head>
<body class="post-template-default single single-post postid-6586 single-format-standard right-sidebar lazy-normal has-lb">
<div class="main-wrap">
<header id="main-head" class="main-head head-nav-below has-search-modal simple simple-boxed">
<div class="inner inner-head" data-sticky-bar="0">
<div class="wrap cf wrap-head">
<div class="left-contain">
<span class="mobile-nav"><i class="fa fa-bars"></i></span>
<div class="title">
<a href="https://otus.ru/journal/" title="OTUS JOURNAL" rel="home" data-wpel-link="internal">
<span class="text-logo"><img src="/journal/wp-content/themes/contentberg/img/logo_site.svg" alt="OTUS JOURNAL"></span>
</a>
</div>
</div>
<div class="navigation-wrap inline">
<nav class="navigation inline simple light" data-sticky-bar="0">
<div class="menu-rubriki-container"><ul id="menu-rubriki" class="menu"><li id="menu-item-109" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-1 menu-item-109"><a href="https://otus.ru/journal/category/pro-it/" data-wpel-link="internal"><span>Про IT</span></a></li>
<li id="menu-item-113" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-cat-4 menu-item-113"><a href="https://otus.ru/journal/category/polza/" data-wpel-link="internal"><span>Полезное</span></a></li>
<li id="menu-item-114" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-cat-3 menu-item-114"><a href="https://otus.ru/journal/category/lifestyle/" data-wpel-link="internal"><span>Лайфстайл</span></a></li>
<li id="menu-item-10406" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10406"><a href="https://otus.ru/catalog/courses" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Обучение</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10407" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10407"><a href="https://otus.ru/about" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right"><span>Информация</span><span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </nav>
</div>
<div class="actions">
<div class="otus-login-site">
<a href="https://otus.ru/login/" target="_blank" data-wpel-link="external" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Войти<span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
<a href="#" title="Search" class="search-link"><i class="fa fa-search"></i></a>
</div>
</div>
</div>
</header> <!-- .main-head -->
<div class="nav nav_disable nav_colored nav_transparent course-categories__nav nav__scroll ">
<div class="container wrap">
<div class="links inline simple light scrollable-menu">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov" class="menu"><li id="menu-item-10413" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10414" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10415" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10416" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10417" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10418" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10419" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10420" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li id="menu-item-10421" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
</div>
</div>
<div class="main wrap">
<div class="ts-row cf">
<div class="col-8 main-content cf">
<article id="post-6586" class="the-post post-6586 post type-post status-publish format-standard has-post-thumbnail category-polza tag-programmirovanie">
<header class="post-header the-post-header cf">
<div class="post-meta the-post-meta">
<span class="post-cat">
<a href="https://otus.ru/journal/category/polza/" class="category" data-wpel-link="internal">Полезное</a>
</span>
<h1 class="post-title">
Регулярные выражения
</h1>
<a href="https://otus.ru/journal/regulyarnye-vyrazheniya/" class="date-link" data-wpel-link="internal"><time class="post-date">5 июня, 2023</time></a>
</div>
<div class="featured">
<a href="https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72056-1.jpg" class="image-link" data-wpel-link="internal"><img width="770" height="515" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20770%20515%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-contentberg-main size-contentberg-main lazyload wp-post-image" alt="Регулярные выражения" title="Регулярные выражения" decoding="async" fetchpriority="high" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72056-1-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72056-1-270x180.jpg 270w" data-src="https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72056-1-770x515.jpg" data-sizes="(max-width: 770px) 100vw, 770px" /> </a>
</div>
</header><!-- .post-header -->
<div class="post-content description cf entry-content content-normal">
<div id="ez-toc-container" class="ez-toc-v2_0_61 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title " >Содержание</p>
<span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5" title="Определение">Определение</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#%D0%A7%D1%82%D0%BE_%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_regexp" title="Что можно сделать при помощи regexp">Что можно сделать при помощи regexp</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="#%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81" title="Синтаксис">Синтаксис</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#%D0%92_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8" title="В программировании">В программировании</a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-5" href="#%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D1%85_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2_%D0%B8_%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2" title="Применение простых шаблонов и специальных символов">Применение простых шаблонов и специальных символов</a></li></ul></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="#%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2" title="Таблицы специальных символов">Таблицы специальных символов</a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-7" href="#%D0%94%D0%BB%D1%8F_Python" title="Для Python">Для Python</a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="#%D0%92_JavaScript" title="В JavaScript">В JavaScript</a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-9" href="#%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA_%D0%B8_%D1%84%D0%BB%D0%B0%D0%B3%D0%B8" title="Расширенный поиск и флаги">Расширенный поиск и флаги</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-10" href="#%D0%A1%D0%BF%D0%B5%D1%86%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%B2%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85" title="Спецсимволы и проверка входных данных">Спецсимволы и проверка входных данных</a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="#%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0" title="Особенности осуществления поиска">Особенности осуществления поиска</a></li></ul></nav></div>
<p>Системное администрирование и разработка программного обеспечения – области, в которых специалисты часто должны знать об особых символах и функциях, а также процессах, происходящих в различных системах, незаметных пользовательскому глазу. Пример – использование особых символов для распознавания начала и конца строки. Обычно они не печатаются и не отображаются в тексте, но системы и программы должны «знать», где начинается и заканчивается элемент.</p>
<p>Для этого используются так называемые регулярные выражения. Далее предстоит поговорить о них более подробно. Необходимо выяснить, что собой представляет регулярное выражение, как и для чего оно используется, в каких областях применяется. Эта информация пригодится не только новичкам, но и более опытным разработчикам/системным администраторам.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5"></span>Определение<span class="ez-toc-section-end"></span></h2>
<p>Регулярное выражение (или regexp, regular expressions) – это формальный язык, который используется в программном обеспечении, работающем с текстом. Применяется regexp для поиска и осуществления различных операций с подстроками в тексте. Базируется на внедрении специальных метасимволов (символов джокеров или wildcard characters). Для поиска используется строка-образец (маска или шаблон), которая состоит из символов и метасимволов. Она задает правила поиска необходимой информации. Для операций с текстом будет дополнительно задана строка замены, которая может включать в себя специальные символы.</p>
<p>Регулярные выражения в программировании – удобный метод описания текстовых шаблонов. С их помощью удается проверять пользовательский ввод, а также искать некоторые маски. Представлены regexp своеобразными «шаблонами», которые будут использоваться для сопоставления символов в строках. Встречаются в различных языках разработки.</p>
<p>Пример – в JavaScript рассматриваемые шаблоны используются в методах и объектах:</p>
<ul>
<li>test;</li>
<li>exec;</li>
<li>string;</li>
<li>match;</li>
<li>search;</li>
<li>replace;</li>
<li>regexp.</li>
</ul>
<p>Далее регулярка будет рассмотрена на примерах Python и JavaScript. Это поможет быстрее разобраться в том, как определиться конец строки, а также воспользоваться соответствующими данными для редактирования информации и совершения иных операций.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A7%D1%82%D0%BE_%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%BF%D1%80%D0%B8_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8_regexp"></span>Что можно сделать при помощи regexp<span class="ez-toc-section-end"></span></h2>
<p>Регулярка в программировании и системном администрировании – полезный компонент. При помощи регулярных выражений можно:</p>
<ul>
<li>проверять, что вводит пользователь для уверенности в корректности информации (пример – правильно ли человек указал телефон, IP-адрес или e-mail);</li>
<li>производить замену по заданному шаблону;</li>
<li>быстрее оперировать данными и управлять ими на профессиональном уровне;</li>
<li>разбивать текст на небольшие куски (пример – выбирать данные из крупного лога).</li>
</ul>
<p>Регулярка поддерживается большинством текстовых редакторов, а также языков программирования.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%81"></span>Синтаксис<span class="ez-toc-section-end"></span></h2>
<p>Синтаксическая запись регулярных выражений является простой и понятной. Она включает в себя символ, который выступает в качестве разделителя (он указывается в начале и конце выражения), а также шаблон поиска и необязательные модификаторы. Выглядит форма записи regexp так:</p>
<figure class="wp-block-image size-full"><img decoding="async" width="387" height="40" src="https://otus.ru/journal/wp-content/uploads/2023/06/image-78.png" alt="Регулярные выражения" class="wp-image-6588" srcset="https://otus.ru/journal/wp-content/uploads/2023/06/image-78.png 387w, https://otus.ru/journal/wp-content/uploads/2023/06/image-78-300x31.png 300w, https://otus.ru/journal/wp-content/uploads/2023/06/image-78-150x16.png 150w" sizes="(max-width: 387px) 100vw, 387px" /></figure>
<p>В качестве разделителя может выступать любой символ. Обычно это «/» или «~». Главное, чтобы строка шаблона начиналась и заканчивалась одним и тем же символом. В конце regexp указываются модификаторы. Они требуются для изменения логики работы имеющихся шаблонов.</p>
<p>Вот наглядный пример строки на изучаемом языке: / Мы пошли гулять одни/ ugi. Здесь:</p>
<ul>
<li>/ – начальный символ, выступающий в виде разделителя строки;</li>
<li>«Мы пошли гулять одни» – поисковый шаблон;</li>
<li>/ – символ, указывающий на конец строки;</li>
<li>ugi – модификаторы (UTF-8, global, case insensitive).</li>
</ul>
<p>Соответствующая запись в строке будет искать текст «Мы пошли гулять одни», независимо от регистра по заданному тексту неограниченное количество раз. U – модификатор, который явно указывает на то, что текстовые данные написаны на Unicode (содержат символы, отличающиеся от латиницы). I используется для регистронезависимости во время поиска. Если написать этот символ в строке, система будет искать по шаблону информацию, независимо от типа регистра. G – модификатор, который указывает поисковику на то, что нужно идти в процессе выполнения задачи до самого конца документа. В противном случае система прекратит операции при первом обнаруженном совпадении в строке.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8"></span>В программировании<span class="ez-toc-section-end"></span></h3>
<p>Отдельное внимание regex рекомендуется уделить непосредственно в разработке программного обеспечения. В Python соответствующий компонент представляет некоторое выражение, представленное в виде последовательности команд. Составляется такая запись при помощи специальных метасимволов. Они будут изучены подробнее далее.</p>
<p>Стоит обратить внимание на то, что регулярные выражения (regular expressions) во время проверки (поиска) информации будет учитывать регистр. Буквы «ё» и «Ё» не входят в имеющиеся алфавитные диапазоны. Чтобы обнаружить их в строке, потребуется указывать соответствующие компоненты отдельно.</p>
<p>В JavaScript регулярные выражения могут быть созданы несколькими способами:</p>
<ol>
<li>Через литералы регулярных выражений. Они вызывают предварительную компиляцию regexp при анализе имеющегося скрипта. Если используемая «команда» часто применяется, такой вариант создания поможет увеличить производительность.</li>
<li>При помощи вызова конструктора объекта символьного класса RegExp. Компиляция регулярного выражения будет осуществляться непосредственно во время исполнения скрипта. Прием особо хорош тогда, когда разработчик знает, что выражение будет изменяться. Используется данная концепция и тогда, когда шаблон неизвестен заранее. Пример – получение строки из стороннего источника или путем пользовательского ввода.</li>
</ol>
<figure class="wp-block-image size-full"><img decoding="async" width="149" height="38" src="https://otus.ru/journal/wp-content/uploads/2023/06/image-77.png" alt="Регулярные выражения" class="wp-image-6587"/></figure>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="220" height="36" src="https://otus.ru/journal/wp-content/uploads/2023/06/image-79.png" alt="Регулярные выражения" class="wp-image-6589" srcset="https://otus.ru/journal/wp-content/uploads/2023/06/image-79.png 220w, https://otus.ru/journal/wp-content/uploads/2023/06/image-79-150x25.png 150w" sizes="(max-width: 220px) 100vw, 220px" /></figure>
<p>Выше можно увидеть два примера regexp соответственно. В JavaScript пользователи могут составлять шаблоны рассматриваемого компонента. Они состоят из обычных слов или комбинаций обычных и специальных символов в строке. Скобки часто используются для «запоминания». Этот знак позволяет «зафиксировать» информацию для дальнейшего использования.</p>
<h4 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D1%85_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%BE%D0%B2_%D0%B8_%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2"></span><em>Применение простых шаблонов и специальных символов</em><span class="ez-toc-section-end"></span></h4>
<p>Простой шаблон используется для нахождения прямого соответствия в текстовой строке. Пример – /abc / соответствует комбинации символов в строке только тогда, когда символы abc встречаются в заданной последовательности. Это – элементарное соответствие, которое будет искать система. Набор символов, указанных в «шаблоне» не предусматривает никаких изменений. Такой поиск требуется не всегда. Обычно разработчики и системные администраторы стараются найти данные с «расширенными» параметрами.</p>
<p>Для этого используются специальные символы. Находить с их помощью данные удается быстрее и точнее. Пример – можно найти символы в диапазоне или без учета регистра. Запись /ab*c/ указывает на то, что искать необходимо символы, в которой за a следует ноль или более b. Символ «звездочка» указывает на ноль или более вхождений предыдущего символа в строке. Далее в используемой записи следует один символ c.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A2%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D1%8B_%D1%81%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D1%85_%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D0%BE%D0%B2"></span>Таблицы специальных символов<span class="ez-toc-section-end"></span></h2>
<p>Чтобы грамотно составлять регулярные выражения (regular expression), разработчику необходимо познакомиться со специальными символами. Их очень много для каждого языка. Далее будут рассмотрены основные спецсимволы в JavaScript и Python.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%94%D0%BB%D1%8F_Python"></span>Для Python<span class="ez-toc-section-end"></span></h3>
<p>Внутри «поискового шаблона» разработчик должен использовать спецсимволы для того, чтобы задавать различные параметры поиска. Вот наиболее распространенные записи:</p>
<figure class="wp-block-table"><table><tbody><tr><td>Символьное обозначение</td><td>Для чего используется</td></tr><tr><td>. (точка)</td><td>Соответствует любому символу, исключая новую строчку</td></tr><tr><td>[] (квадратные скобки)</td><td>Любой символ из указанных в скобках. Символьные данные разрешено задавать как перечислением, так и диапазоном через дефис.</td></tr><tr><td>[^]</td><td>Любой «знак», за исключением написанных в скобках.</td></tr><tr><td>^</td><td>Начало строчки</td></tr><tr><td>$</td><td>Конец строки</td></tr><tr><td>|</td><td>Логическое или. Регулярное выражение будет искать один из нескольких вариантов.</td></tr><tr><td>\ (обратный слеш)</td><td>Экранирование. Дает возможность выражениям ориентироваться, является ли следующий за \ символ в строке обычным или специальным.</td></tr></tbody></table></figure>
<p>При записи регулярных выражений часто какая-то часть заданного шаблона должна повторяться установленное количество раз. Число вхождений в синтаксисе regex задается через так называемые квантификаторы. Они всегда размещаются там, где шаблонная запись должна повториться.</p>
<figure class="wp-block-table"><table><tbody><tr><td>Символьная запись</td><td>Определение</td></tr><tr><td>{} (фигурные скобки)</td><td>Указывает на то, что граница слова или выражения может быть задана единичным числом или диапазоном. Цифра, указывающая на границу, указывается внутри скобок. Диапазон задается через запятую.</td></tr><tr><td>? (вопросительный знак)</td><td>От нуля до одного вхождения</td></tr><tr><td>* (звездочка)</td><td>От нуля вхождений. «Верхняя» граница в этом диапазоне не задается.</td></tr><tr><td>+ (плюс)</td><td>Одно или более вхождений.</td></tr></tbody></table></figure>
<p>Заданные примеры актуальны для Python. Далее предстоит поближе познакомиться со специальными символьными записями для поиска строк и их частей в JavaScript.</p>
<h3 class="wp-block-heading"><span class="ez-toc-section" id="%D0%92_JavaScript"></span>В JavaScript<span class="ez-toc-section-end"></span></h3>
<p>В случае с JavaScript пользователю предстоит задействовать аналогичные знаки для осуществления различных действий при использовании regexp. Вот то, что необходимо запомнить об их применении в JS:</p>
<figure class="wp-block-table"><table><tbody><tr><td>Символьная запись в строке</td><td>Описание и особенности</td></tr><tr><td>\</td><td>может соответствовать окончанию слова – если обработка осуществляется буквально;интерпретируется буквально – если шаблон обрабатывается особым образом;требует экранирования при использовании в записи new Reg экранирующим компонентов в обычных строках.</td></tr><tr><td>^</td><td>Начало строки. Указывает на «момент», начиная от которого, осуществляется ввод. При установки спецсимвола многострочности (перевод строки), работает после переноса строчки. Каретки в самом начале шаблона имеет иное значение. Пример – /[^a-z\s] указывает на I в «I have 3 sisters»</td></tr><tr><td>$</td><td>Конец ввода. Работает при переносе строки.</td></tr><tr><td>*</td><td>Соответствие предыдущему компоненту, который повторен 0 или больше раз.</td></tr><tr><td>+</td><td>Предыдущий компонент, повторенный 1 больше раз. Работает как и в Python.</td></tr><tr><td>?</td><td>Предыдущий повторенный компонент 0 или 1 раз. При применении после квалификаторов *, +, ?, {} делает квалификатор соответствующим минимальному количеству элементов в шаблоне.</td></tr><tr><td>(…)</td><td>Соответствие с указанным в скобках компонентом. Называется такая запись «захватывающими скобками».</td></tr><tr><td>\w</td><td>Любой цифробуквенный элемент, включая подчеркивания.</td></tr><tr><td>\W</td><td>Любой компонент, который не является цифробуквенным.</td></tr><tr><td>\r</td><td>Возврат каретки</td></tr><tr><td>\n</td><td>Перевод строки</td></tr><tr><td>\f</td><td>Прогон страницы. Относится к категории управляющих символьных записей для печати.</td></tr></tbody></table></figure>
<p><a href="https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Regular_Expressions" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Здесь<span class="wpel-icon wpel-image wpel-icon-6"></span></a> можно увидеть больше примеров регулярных выражений для JavaScript. Они будут одинаково хорошо работать как в Python, так и в JavaScript.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A0%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA_%D0%B8_%D1%84%D0%BB%D0%B0%D0%B3%D0%B8"></span>Расширенный поиск и флаги<span class="ez-toc-section-end"></span></h2>
<p>У регулярных выражений во всех языках разработки и при системном администрировании поддерживаются опциональные флаги. С их помощью специалисты смогут задавать расширенные параметры поиска. Флаги могут использоваться самостоятельно или совместно в любом порядке. Их запись иногда – это часть регулярного выражения в сформированном запросе.</p>
<figure class="wp-block-table"><table><tbody><tr><td>Что за флаг (обозначение)</td><td>Краткое описание</td></tr><tr><td>g</td><td>Отвечает за глобальный поиск. Система будет проверять весь текстовых документ.</td></tr><tr><td>i</td><td>Поиск без поддержки учета регистра</td></tr><tr><td>m</td><td>Многострочный поиск</td></tr><tr><td>v</td><td>Начинает поиск от знака, который расположен на позиции свойства lastindex текущего регулярного выражения.</td></tr></tbody></table></figure>
<p>Для того, чтобы использовать обозначенные флаги в шаблоне, регулярные выражения предлагают следующий синтаксис:</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="367" height="154" src="https://otus.ru/journal/wp-content/uploads/2023/06/Screenshot_2.png" alt="Регулярные выражения" class="wp-image-6596" srcset="https://otus.ru/journal/wp-content/uploads/2023/06/Screenshot_2.png 367w, https://otus.ru/journal/wp-content/uploads/2023/06/Screenshot_2-300x126.png 300w, https://otus.ru/journal/wp-content/uploads/2023/06/Screenshot_2-150x63.png 150w" sizes="(max-width: 367px) 100vw, 367px" /></figure>
<p>Флаги – это неотъемлемая часть регулярного выражения. Они не могут быть скорректированы позднее. Установка «уточняющих» знаков в шаблоне возможна исключительно до обработки соответствующего фрагмента.</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%A1%D0%BF%D0%B5%D1%86%D1%81%D0%B8%D0%BC%D0%B2%D0%BE%D0%BB%D1%8B_%D0%B8_%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B0_%D0%B2%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85"></span>Спецсимволы и проверка входных данных<span class="ez-toc-section-end"></span></h2>
<p>Еще один момент, на который необходимо обратить внимание – это принцип использования спецсимволов (знаки начала строки, окончания и так далее) для проверки корректности входных данных.</p>
<p>Вот – пример, в котором пользователь должен ввести номер телефона. После нажатия клиентом на кнопку «Check», скрипт проверит корректность указанной комбинации. Если все верно, система сообщит об этом в виде благодарности. В противном случае появляется уведомление о том, что номер неправильный.</p>
<p>Внутри незахватывающих скобок (?:, регулярное выражение будет искать три цифры \d{3} или | открывающую скобку \(, после этого – три цифры и закрывающую скобку \). </p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="466" height="455" src="https://otus.ru/journal/wp-content/uploads/2023/06/image-80.png" alt="Регулярные выражения" class="wp-image-6590" srcset="https://otus.ru/journal/wp-content/uploads/2023/06/image-80.png 466w, https://otus.ru/journal/wp-content/uploads/2023/06/image-80-300x293.png 300w, https://otus.ru/journal/wp-content/uploads/2023/06/image-80-150x146.png 150w" sizes="(max-width: 466px) 100vw, 466px" /></figure>
<p>Событие «Изменить» будет активировано после того, как пользователь подтвердит ввод значения регулярного выражения. Для этого потребуется нажать на клавишу «Enter».</p>
<h2 class="wp-block-heading"><span class="ez-toc-section" id="%D0%9E%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%81%D1%83%D1%89%D0%B5%D1%81%D1%82%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA%D0%B0"></span>Особенности осуществления поиска<span class="ez-toc-section-end"></span></h2>
<p>Regexp – это инструменты для работы со строками, которые являются основной их единицей. Строка представлена рассматриваемым компонентом, а также текстом, по которому осуществляется непосредственный поиск.</p>
<p>Обнаруженные в тексте совпадения с заданным шаблоном – это подстроки. Пример – есть regexp м. (буква «м» и любой символ), а также строка текста «Мама мыла раму». При применении regex будут обнаружены подстроки:</p>
<ul>
<li>ма;</li>
<li>мы;</li>
<li>му.</li>
</ul>
<p>Подстрока «Ма» будет пропущена ввиду того, что в ней используется другой регистр.</p>
<p>Более мелким компонентом в строке является группа. Она представляет собой часть подстроки, которая выделена специально. Группы выделяются круглыми скобками (). В Python можно сформировать на основе уже изученного примера такую строку «запроса»:</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="107" height="35" src="https://otus.ru/journal/wp-content/uploads/2023/06/image-81.png" alt="Регулярные выражения" class="wp-image-6591"/></figure>
<p>Здесь указано следующее:</p>
<ul>
<li>буквенный символ, выделенный группой;</li>
<li>за ним – три буквенных символа, которые тоже выделены группой.</li>
</ul>
<p>Этот шаблон представляет собой 4 буквенных символа. В строке «Мама мыла раму» будут обнаружены три совпадения. Из них система выделит две группы:</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="512" height="141" src="https://otus.ru/journal/wp-content/uploads/2023/06/image-82.png" alt="Регулярные выражения" class="wp-image-6592" srcset="https://otus.ru/journal/wp-content/uploads/2023/06/image-82.png 512w, https://otus.ru/journal/wp-content/uploads/2023/06/image-82-300x83.png 300w, https://otus.ru/journal/wp-content/uploads/2023/06/image-82-150x41.png 150w" sizes="(max-width: 512px) 100vw, 512px" /></figure>
<p>За счет такого приема удается из найденной подстроки извлечь необходимую конкретную информацию. Пример – обнаружение адреса, в котором есть: улица, номер дома и квартира. Подстрока – это «полный адрес», а в группы можно выделить отдельно каждую его структурную единицу, чтобы в будущем обращаться к соответствующим компонентам напрямую.</p>
<p>Группы могут получать имена. Для этого используется форма: </p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="288" height="90" src="https://otus.ru/journal/wp-content/uploads/2023/06/Screenshot_1-1.png" alt="Регулярные выражения" class="wp-image-6595" srcset="https://otus.ru/journal/wp-content/uploads/2023/06/Screenshot_1-1.png 288w, https://otus.ru/journal/wp-content/uploads/2023/06/Screenshot_1-1-150x47.png 150w" sizes="(max-width: 288px) 100vw, 288px" /></figure>
<p><em>Хотите освоить современную IT-специальность? Огромный выбор курсов по востребованным IT-направлениям есть в <a href="https://otus.ru/?utm_source=oj" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Otus<span class="wpel-icon wpel-image wpel-icon-6"></span></a>!</em> </p>
</div><!-- .post-content -->
<div class="the-post-foot cf">
<div class="tag-share cf">
<div class="post-tags"><a href="https://otus.ru/journal/tag/programmirovanie/" rel="tag" data-wpel-link="internal">программирование</a></div>
<div class="post-share">
<div class="post-share-icons cf">
<span class="counters">
</span>
<a href="https://www.facebook.com/sharer.php?u=https%3A%2F%2Fotus.ru%2Fjournal%2Fregulyarnye-vyrazheniya%2F" class="link facebook wpel-icon-right" target="_blank" title="Share on Facebook" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-facebook"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://twitter.com/intent/tweet?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fregulyarnye-vyrazheniya%2F&text=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5%20%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F" class="link twitter wpel-icon-right" target="_blank" title="Share on Twitter" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-twitter"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fotus.ru%2Fjournal%2Fregulyarnye-vyrazheniya%2F" class="link linkedin wpel-icon-right" target="_blank" title="LinkedIn" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-linkedin"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
<a href="https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fotus.ru%2Fjournal%2Fregulyarnye-vyrazheniya%2F&media=https%3A%2F%2Fotus.ru%2Fjournal%2Fwp-content%2Fuploads%2F2023%2F06%2Foj-1080x72056-1.jpg&description=%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5%20%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F" class="link pinterest wpel-icon-right" target="_blank" title="Pinterest" data-wpel-link="external" rel="nofollow external noopener noreferrer"><i class="fa fa-pinterest-p"></i><span class="wpel-icon wpel-image wpel-icon-6"></span></a>
</div>
</div>
</div>
</div>
<div class="post-nav">
<div class="post previous cf">
<a href="https://otus.ru/journal/privilegii-v-sql/" title="Prev Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-left"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/privilegii-v-sql/" class="image-link" rel="previous" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Привилегии в SQL" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72055-1-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72055-1-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72055-1-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72055-1-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72055-1-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72055-1-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="Привилегии в SQL" /> </a>
<div class="post-meta">
<span class="label">Prev Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/privilegii-v-sql/" data-wpel-link="internal">Привилегии в SQL</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/privilegii-v-sql/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-06-05T20:54:13+00:00">5 июня, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">13 Mins Read</span>
</div>
</div> </div>
</span>
</div>
<div class="post next cf">
<a href="https://otus.ru/journal/traceback-v-pitone/" title="Next Post" class="nav-icon" data-wpel-link="internal">
<i class="fa fa-angle-right"></i>
</a>
<span class="content">
<a href="https://otus.ru/journal/traceback-v-pitone/" class="image-link" rel="next" data-wpel-link="internal">
<img width="150" height="106" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20150%20106%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="attachment-thumbnail size-thumbnail lazyload wp-post-image" alt="Traceback в Питоне" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72057-1-150x106.jpg 150w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72057-1-300x212.jpg 300w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72057-1-1024x724.jpg 1024w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72057-1-768x543.jpg 768w, https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72057-1-1536x1086.jpg 1536w" data-src="https://otus.ru/journal/wp-content/uploads/2023/06/oj-1080x72057-1-150x106.jpg" data-sizes="(max-width: 150px) 100vw, 150px" title="Traceback в Питоне" /> </a>
<div class="post-meta">
<span class="label">Next Post</span>
<div class="post-meta post-meta-b">
<h2 class="post-title">
<a href="https://otus.ru/journal/traceback-v-pitone/" data-wpel-link="internal">Traceback в Питоне</a>
</h2>
<div class="below">
<a href="https://otus.ru/journal/traceback-v-pitone/" class="meta-item date-link" data-wpel-link="internal"><time class="post-date" datetime="2023-06-06T15:49:38+00:00">6 июня, 2023</time></a>
<span class="meta-sep"></span>
<span class="meta-item read-time">13 Mins Read</span>
</div>
</div> </div>
</span>
</div>
</div>
<section class="related-posts grid-3">
<h4 class="section-head"><span class="title">Читать ещё</span></h4>
<div class="ts-row posts cf">
<article class="post col-4">
<a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" title="Уровень готовности CTO к 2026" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Уровень готовности CTO к 2026" title="Уровень готовности CTO к 2026" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-3-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/uroven-gotovnosti-cto-k-2026/" class="post-link" data-wpel-link="internal">Уровень готовности CTO к 2026</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-16T19:50:59+00:00">16 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" title="Новые уроки ноября: только топ-темы по программированию" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Новые уроки ноября: только топ-темы по программированию" title="Новые уроки ноября: только топ-темы по программированию" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg 270w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-770x515.jpg 770w, https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-370x245.jpg 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/11/oj-1080x720-kopiya-2-270x180.jpg" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/novye-uroki-noyabrya-tolko-top-temy-po-programmirovaniju/" class="post-link" data-wpel-link="internal">Новые уроки ноября: только топ-темы по программированию</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-11-09T23:24:11+00:00">9 ноября, 2025</time>
</div>
</div>
</article >
<article class="post col-4">
<a href="https://otus.ru/journal/schjot-idjot-na-chasy/" title="Счёт идёт на часы" class="image-link" data-wpel-link="internal">
<img width="270" height="180" src="data:image/svg+xml,%3Csvg%20viewBox%3D%270%200%20270%20180%27%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3C%2Fsvg%3E" class="image lazyload wp-post-image" alt="Счёт идёт на часы" title="Счёт идёт на часы" decoding="async" loading="lazy" data-srcset="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png 270w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-770x515.png 770w, https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-370x245.png 370w" data-src="https://otus.ru/journal/wp-content/uploads/2025/10/oj-1080x720-kopiya-7-270x180.png" data-sizes="(max-width: 270px) 100vw, 270px" /> </a>
<div class="content">
<h3 class="post-title"><a href="https://otus.ru/journal/schjot-idjot-na-chasy/" class="post-link" data-wpel-link="internal">Счёт идёт на часы</a></h3>
<div class="post-meta">
<time class="post-date" datetime="2025-10-30T15:04:59+00:00">30 октября, 2025</time>
</div>
</div>
</article >
</div>
</section>
</article> <!-- .the-post -->
</div>
<aside class="col-4 sidebar">
<div class="inner">
<ul>
<li id="search-2" class="widget widget_search"><h5 class="widget-title"><span>Поиск по блогу</span></h5>
<form method="get" class="search-form" action="https://otus.ru/journal/">
<label>
<span class="screen-reader-text">Search for:</span>
<input type="search" class="search-field" placeholder="Введите запрос и нажмите Enter" value="" name="s" title="Search for:" />
</label>
<button type="submit" class="search-submit"><i class="fa fa-search"></i></button>
</form>
</li>
<li id="tag_cloud-5" class="widget widget_tag_cloud"><h5 class="widget-title"><span>Метки</span></h5><div class="tagcloud"><a href="https://otus.ru/journal/tag/android-2/" class="tag-cloud-link tag-link-74 tag-link-position-1" style="font-size: 12.472222222222pt;" aria-label="Android (34 элемента)" data-wpel-link="internal">Android</a>
<a href="https://otus.ru/journal/tag/c-3/" class="tag-cloud-link tag-link-91 tag-link-position-2" style="font-size: 10.916666666667pt;" aria-label="C (23 элемента)" data-wpel-link="internal">C</a>
<a href="https://otus.ru/journal/tag/c-2/" class="tag-cloud-link tag-link-81 tag-link-position-3" style="font-size: 12.666666666667pt;" aria-label="C# (35 элементов)" data-wpel-link="internal">C#</a>
<a href="https://otus.ru/journal/tag/c/" class="tag-cloud-link tag-link-20 tag-link-position-4" style="font-size: 12.472222222222pt;" aria-label="c++ (34 элемента)" data-wpel-link="internal">c++</a>
<a href="https://otus.ru/journal/tag/computer-science/" class="tag-cloud-link tag-link-209 tag-link-position-5" style="font-size: 15.972222222222pt;" aria-label="computer science (78 элементов)" data-wpel-link="internal">computer science</a>
<a href="https://otus.ru/journal/tag/css/" class="tag-cloud-link tag-link-288 tag-link-position-6" style="font-size: 8.6805555555556pt;" aria-label="CSS (13 элементов)" data-wpel-link="internal">CSS</a>
<a href="https://otus.ru/journal/tag/data-science/" class="tag-cloud-link tag-link-151 tag-link-position-7" style="font-size: 8pt;" aria-label="Data Science (11 элементов)" data-wpel-link="internal">Data Science</a>
<a href="https://otus.ru/journal/tag/devops/" class="tag-cloud-link tag-link-98 tag-link-position-8" style="font-size: 10.138888888889pt;" aria-label="devops (19 элементов)" data-wpel-link="internal">devops</a>
<a href="https://otus.ru/journal/tag/docker/" class="tag-cloud-link tag-link-143 tag-link-position-9" style="font-size: 8.2916666666667pt;" aria-label="Docker (12 элементов)" data-wpel-link="internal">Docker</a>
<a href="https://otus.ru/journal/tag/gamedev/" class="tag-cloud-link tag-link-25 tag-link-position-10" style="font-size: 11.694444444444pt;" aria-label="gamedev (28 элементов)" data-wpel-link="internal">gamedev</a>
<a href="https://otus.ru/journal/tag/hr/" class="tag-cloud-link tag-link-103 tag-link-position-11" style="font-size: 8pt;" aria-label="hr (11 элементов)" data-wpel-link="internal">hr</a>
<a href="https://otus.ru/journal/tag/html/" class="tag-cloud-link tag-link-217 tag-link-position-12" style="font-size: 11.208333333333pt;" aria-label="HTML (25 элементов)" data-wpel-link="internal">HTML</a>
<a href="https://otus.ru/journal/tag/ios/" class="tag-cloud-link tag-link-101 tag-link-position-13" style="font-size: 8.9722222222222pt;" aria-label="iOS (14 элементов)" data-wpel-link="internal">iOS</a>
<a href="https://otus.ru/journal/tag/it/" class="tag-cloud-link tag-link-50 tag-link-position-14" style="font-size: 10.527777777778pt;" aria-label="IT (21 элемент)" data-wpel-link="internal">IT</a>
<a href="https://otus.ru/journal/tag/java/" class="tag-cloud-link tag-link-75 tag-link-position-15" style="font-size: 15.680555555556pt;" aria-label="Java (73 элемента)" data-wpel-link="internal">Java</a>
<a href="https://otus.ru/journal/tag/javascript/" class="tag-cloud-link tag-link-83 tag-link-position-16" style="font-size: 14.319444444444pt;" aria-label="JavaScript (53 элемента)" data-wpel-link="internal">JavaScript</a>
<a href="https://otus.ru/journal/tag/linux/" class="tag-cloud-link tag-link-141 tag-link-position-17" style="font-size: 11.888888888889pt;" aria-label="Linux (29 элементов)" data-wpel-link="internal">Linux</a>
<a href="https://otus.ru/journal/tag/machine-learning/" class="tag-cloud-link tag-link-167 tag-link-position-18" style="font-size: 8.6805555555556pt;" aria-label="Machine Learning (13 элементов)" data-wpel-link="internal">Machine Learning</a>
<a href="https://otus.ru/journal/tag/otus-book/" class="tag-cloud-link tag-link-261 tag-link-position-19" style="font-size: 9.9444444444444pt;" aria-label="otus book (18 элементов)" data-wpel-link="internal">otus book</a>
<a href="https://otus.ru/journal/tag/php/" class="tag-cloud-link tag-link-45 tag-link-position-20" style="font-size: 10.527777777778pt;" aria-label="PHP (21 элемент)" data-wpel-link="internal">PHP</a>
<a href="https://otus.ru/journal/tag/python/" class="tag-cloud-link tag-link-27 tag-link-position-21" style="font-size: 16.944444444444pt;" aria-label="Python (99 элементов)" data-wpel-link="internal">Python</a>
<a href="https://otus.ru/journal/tag/qa/" class="tag-cloud-link tag-link-155 tag-link-position-22" style="font-size: 11.402777777778pt;" aria-label="qa (26 элементов)" data-wpel-link="internal">qa</a>
<a href="https://otus.ru/journal/tag/sql/" class="tag-cloud-link tag-link-38 tag-link-position-23" style="font-size: 12.861111111111pt;" aria-label="SQL (37 элементов)" data-wpel-link="internal">SQL</a>
<a href="https://otus.ru/journal/tag/team-lead/" class="tag-cloud-link tag-link-364 tag-link-position-24" style="font-size: 9.9444444444444pt;" aria-label="team lead (18 элементов)" data-wpel-link="internal">team lead</a>
<a href="https://otus.ru/journal/tag/unity/" class="tag-cloud-link tag-link-24 tag-link-position-25" style="font-size: 8pt;" aria-label="unity (11 элементов)" data-wpel-link="internal">unity</a>
<a href="https://otus.ru/journal/tag/algoritmy/" class="tag-cloud-link tag-link-30 tag-link-position-26" style="font-size: 9.9444444444444pt;" aria-label="Алгоритмы (18 элементов)" data-wpel-link="internal">Алгоритмы</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh/" class="tag-cloud-link tag-link-40 tag-link-position-27" style="font-size: 10.138888888889pt;" aria-label="Базы данных (19 элементов)" data-wpel-link="internal">Базы данных</a>
<a href="https://otus.ru/journal/tag/matematika/" class="tag-cloud-link tag-link-44 tag-link-position-28" style="font-size: 10.916666666667pt;" aria-label="Математика (23 элемента)" data-wpel-link="internal">Математика</a>
<a href="https://otus.ru/journal/tag/arhitektura-po/" class="tag-cloud-link tag-link-10 tag-link-position-29" style="font-size: 9.4583333333333pt;" aria-label="архитектура ПО (16 элементов)" data-wpel-link="internal">архитектура ПО</a>
<a href="https://otus.ru/journal/tag/bazy-dannyh-2/" class="tag-cloud-link tag-link-251 tag-link-position-30" style="font-size: 10.138888888889pt;" aria-label="базы данных (19 элементов)" data-wpel-link="internal">базы данных</a>
<a href="https://otus.ru/journal/tag/vebinar/" class="tag-cloud-link tag-link-201 tag-link-position-31" style="font-size: 13.930555555556pt;" aria-label="вебинар (48 элементов)" data-wpel-link="internal">вебинар</a>
<a href="https://otus.ru/journal/tag/dajdzhest/" class="tag-cloud-link tag-link-308 tag-link-position-32" style="font-size: 10.722222222222pt;" aria-label="дайджест (22 элемента)" data-wpel-link="internal">дайджест</a>
<a href="https://otus.ru/journal/tag/zapis-vebinara/" class="tag-cloud-link tag-link-226 tag-link-position-33" style="font-size: 14.902777777778pt;" aria-label="запись вебинара (61 элемент)" data-wpel-link="internal">запись вебинара</a>
<a href="https://otus.ru/journal/tag/zapis-uroka/" class="tag-cloud-link tag-link-272 tag-link-position-34" style="font-size: 16.069444444444pt;" aria-label="запись урока (80 элементов)" data-wpel-link="internal">запись урока</a>
<a href="https://otus.ru/journal/tag/informacionnaya-bezopasnost/" class="tag-cloud-link tag-link-232 tag-link-position-35" style="font-size: 10.138888888889pt;" aria-label="информационная безопасность (19 элементов)" data-wpel-link="internal">информационная безопасность</a>
<a href="https://otus.ru/journal/tag/karera-v-it/" class="tag-cloud-link tag-link-292 tag-link-position-36" style="font-size: 9.9444444444444pt;" aria-label="карьера в IT (18 элементов)" data-wpel-link="internal">карьера в IT</a>
<a href="https://otus.ru/journal/tag/podborka/" class="tag-cloud-link tag-link-7 tag-link-position-37" style="font-size: 12.666666666667pt;" aria-label="подборка (35 элементов)" data-wpel-link="internal">подборка</a>
<a href="https://otus.ru/journal/tag/podborka-statej/" class="tag-cloud-link tag-link-219 tag-link-position-38" style="font-size: 15.777777777778pt;" aria-label="подборка статей (75 элементов)" data-wpel-link="internal">подборка статей</a>
<a href="https://otus.ru/journal/tag/programmirovanie/" class="tag-cloud-link tag-link-65 tag-link-position-39" style="font-size: 22pt;" aria-label="программирование (332 элемента)" data-wpel-link="internal">программирование</a>
<a href="https://otus.ru/journal/tag/proekt/" class="tag-cloud-link tag-link-321 tag-link-position-40" style="font-size: 11.888888888889pt;" aria-label="проект (29 элементов)" data-wpel-link="internal">проект</a>
<a href="https://otus.ru/journal/tag/proektnaya-rabota/" class="tag-cloud-link tag-link-310 tag-link-position-41" style="font-size: 11.597222222222pt;" aria-label="проектная работа (27 элементов)" data-wpel-link="internal">проектная работа</a>
<a href="https://otus.ru/journal/tag/seti/" class="tag-cloud-link tag-link-181 tag-link-position-42" style="font-size: 12.958333333333pt;" aria-label="сети (38 элементов)" data-wpel-link="internal">сети</a>
<a href="https://otus.ru/journal/tag/testirovanie/" class="tag-cloud-link tag-link-69 tag-link-position-43" style="font-size: 13.930555555556pt;" aria-label="тестирование (48 элементов)" data-wpel-link="internal">тестирование</a>
<a href="https://otus.ru/journal/tag/upravlenie-komandoj/" class="tag-cloud-link tag-link-63 tag-link-position-44" style="font-size: 11.694444444444pt;" aria-label="управление командой (28 элементов)" data-wpel-link="internal">управление командой</a>
<a href="https://otus.ru/journal/tag/habr-2/" class="tag-cloud-link tag-link-203 tag-link-position-45" style="font-size: 13.930555555556pt;" aria-label="хабр (48 элементов)" data-wpel-link="internal">хабр</a></div>
</li>
</ul>
</div>
</aside>
</div> <!-- .ts-row -->
</div> <!-- .main -->
<footer class="main-footer dark bold">
<section class="lower-footer cf">
<div class="wrap">
<div class="links">
<div class="menu-menju-navykov-container"><ul id="menu-menju-navykov-1" class="menu"><li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10413"><a href="https://otus.ru/categories/programming/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Программирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10414"><a href="https://otus.ru/categories/architecture/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Архитектура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10415"><a href="https://otus.ru/categories/operations/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Инфраструктура<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10416"><a href="https://otus.ru/categories/information-security-courses/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Безопасность<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10417"><a href="https://otus.ru/categories/data-science/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Data Science<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10418"><a href="https://otus.ru/categories/gamedev/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">GameDev<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10419"><a href="https://otus.ru/categories/marketing-business/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Управление<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10420"><a href="https://otus.ru/categories/analytics/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Аналитика и анализ<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-10421"><a href="https://otus.ru/categories/testing/" data-wpel-link="external" target="_blank" rel="nofollow external noopener noreferrer" class="wpel-icon-right">Тестирование<span class="wpel-icon wpel-image wpel-icon-6"></span></a></li>
</ul></div> </div>
<p class="copyright"> © 2015-2026 OTUS </p>
<div class="to-top">
<a href="#" class="back-to-top"><i class="fa fa-angle-up"></i> Top</a>
</div>
</div>
</section>
</footer>
</div> <!-- .main-wrap -->
<div class="mobile-menu-container off-canvas" id="mobile-menu">
<a href="#" class="close"><i class="fa fa-times"></i></a>
<div class="logo">
</div>
<ul class="mobile-menu"></ul>
</div>
<div class="search-modal-wrap">
<div class="search-modal-box" role="dialog" aria-modal="true">
<form method="get" class="search-form" action="https://otus.ru/journal/">
<input type="search" class="search-field" name="s" placeholder="Search..." value="" required />
<button type="submit" class="search-submit visuallyhidden">Submit</button>
<p class="message">
Type above and press <em>Enter</em> to search. Press <em>Esc</em> to cancel. </p>
</form>
</div>
</div>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/clearfy/components/comments-plus/assets/js/url-span.js" id="wbcr-comments-plus-url-span-js"></script>
<script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra">
/* <![CDATA[ */
var eztoc_smooth_local = {"scroll_offset":"30"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js" id="ez-toc-scroll-scriptjs-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js" id="ez-toc-js-cookie-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js" id="ez-toc-jquery-sticky-kit-js"></script>
<script type="text/javascript" id="ez-toc-js-js-extra">
/* <![CDATA[ */
var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js" id="ez-toc-js-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/custom-script.js" id="custom-script-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/magnific-popup.js" id="magnific-popup-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.fitvids.js" id="jquery-fitvids-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/imagesloaded.min.js" id="imagesloaded-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/object-fit-images.js" id="object-fit-images-js"></script>
<script type="text/javascript" id="contentberg-theme-js-extra">
/* <![CDATA[ */
var Bunyad = {"custom_ajax_url":"\/journal\/regulyarnye-vyrazheniya\/"};
/* ]]> */
</script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theme.js" id="contentberg-theme-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/theia-sticky-sidebar.js" id="theia-sticky-sidebar-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jquery.slick.js" id="jquery-slick-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-content/themes/contentberg/js/jarallax.js" id="jarallax-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/masonry.min.js" id="masonry-js"></script>
<script type="text/javascript" src="https://otus.ru/journal/wp-includes/js/jquery/jquery.masonry.min.js" id="jquery-masonry-js"></script>
</body>
</html>
<!-- Cache served by breeze CACHE - Last modified: Mon, 09 Mar 2026 17:05:44 GMT -->