Введение в регулярные выражения на Python, JavaScript, PHP, Java и на другие языки

Регулярные выражения или, как его обычно называют, RegEx - это любая последовательность символов, которая может использоваться в качестве шаблона для поиска символов или строк.

Например, чтобы определить, содержит ли строка или фраза слово "яблоко", мы можем использовать регулярное выражение /яблоко для поиска в строке. В качестве другого примера мы можем использовать /[0-9], чтобы проверить, содержит ли данная строка число от 0 до 9.

Регулярные выражения и их использование

Регулярные выражения широко используются для различных целей в современных веб-операциях. Проверка веб-форм, поисковые системы, лексические анализаторы в IDE, текстовые редакторы и редакторы документов - вот лишь несколько примеров, в которых часто используются регулярные выражения.

Мы все использовали CTRL + F много раз для поиска в документе или фрагменте кода, чтобы найти определенное слово, фразу или выражение. Эту операцию можно назвать очень распространенным примером использования регулярных выражений.

Прежде чем продолжить, давайте взглянем на очень часто используемое регулярное выражение.

Можете ли вы догадаться приведенный ниже RegEX, для чего он используется?

^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$

Не волнуйтесь, если не можете угадать. Я уверен, что вы сможете догадаться к концу этой статьи.

Токены

Для начала давайте посмотрим на различные символы в показанном выше регулярном выражении

^([a-zA-Z0-9_\-\.]+)@([a-zA-Z0-9_\-\.]+)\.([a-zA-Z]{2,5})$

Если мы посмотрим на приведенное выше регулярное выражение, мы увидим, что оно состоит из множества символов или токенов. Давайте узнаем, что они означают:

ТокенЗначение
^Этот токен обозначает начало строки.
(…)Обозначает группу, в которой фиксируется все, что дано в (…).
[…][] Включает символы, любой из которых может быть сопоставлен. Например - [abc] будет соответствовать либо a, либо b, либо c.
a-zНабор букв от a до z. Мы должны помнить, что Regex чувствителен к регистру.
A-ZНабор заглавных букв от A до Z.
0-9Цифры от 0 до 9.
_Это будет соответствовать символу _.
\Экранирование символов.
\.Соответствует символу "." (точка). Его используется потому, что символ «.» в регулярном выражении - это сам по себе токен, который соответствует любому символу
+Количественный показатель, соответствует одному или нескольким символам, с которыми он используется. Например, «a+» означает одно или несколько вхождений символа «а» .
\-Будет соответствовать символу «-».
@Будет соответствовать символу «@».
{}Это еще один количественный показатель. Он используется для обозначения количества вхождений символа. Например, a{3} означает ровно три «a».
$Означает конец строки.

Разбивка данного шаблона регулярных выражений

Теперь, вооружившись этой таблицей, давайте попробуем декодировать указанное выше регулярное выражение:

^([a-zA-Z0-9_\-\.]+) означает, что мы ищем строку, которая начинается как минимум с одного или нескольких буквенно-цифровых символов верхнего или нижнего регистра, знаков подчеркивания, дефисов или точек. Например, все, что похоже на user_name.01, будет соответствовать шаблону. Мы должны помнить, что здесь нет необходимости включать все символы, достаточно одного символа [a-zA-Z0-9_\-\.].

Символ @ соответствует единственному вхождению @. Добавляя к предыдущему примеру, подойдет что-то вроде user_name.01@.

([a-zA-Z0-9_\-\.]+) аналогичен первому пункту. Это также означает, что мы ищем строку, содержащую хотя бы один или несколько буквенно-цифровых символов, подчеркиваний, дефисов или точек. Например: user_name.01@gmail

Как вы уже догадались, мы намекаем на шаблон электронной почты. Двигаясь дальше, \. соответствует символу точки ".". Если мы продолжим текущий пример, получится что-то вроде user_name.01@gmail.

([a-zA-Z]{2,5})$ означает, что строка должна заканчиваться от 2 до 5 букв алфавита в верхнем или нижнем регистре. Если мы добавим .com к предыдущему примеру, мы можем получить user_name.01@gmail.com, что является общим шаблоном строки электронной почты.

Объединив все вышеперечисленное, мы видим, что ищем строку идентификатора электронной почты. Теперь мы можем использовать это выражение для проверки любого идентификатора электронной почты.

PS. - Это шаблон для наиболее распространенных идентификаторов электронной почты в Интернете.

Типы токенов

Многие токены могут использоваться в различных комбинациях в регулярном выражении для описания широкого спектра выражений. Ниже мы рассмотрим различные типы токенов, которые используются в регулярных выражениях. Кроме того, мы также рассмотрим наиболее часто используемые токены в каждой категории.

Базовые токены

Начнем с основных токенов. Эти токены используются почти во всех регулярных выражениях. Следовательно, мы должны сначала узнать о них.

ТокенЗначение
\rСоответствует символу возврата каретки (перевода строки).
\0Соответствует нулевому символу.
\nИщет новую строку.
\tСоответствует табуляции (Tab).

Классы символов

Двигаясь дальше, давайте посмотрим на токены символов. Они используются для сопоставления алфавитов, чисел и других специальных символов.

ТокенЗначение
aБуквально соответствует символу a. Точно так же все буквы и числа, когда используются отдельно, ищет конкретный символ.
abcСоответствует строке abc.
[abc]Это ищет один символ среди a, b или c.
[^abc]Соответствует любому символу, кроме a, b или c.
[a-z]Строчный символ в диапазоне от a до z
[^a-z]Любой символ не в диапазоне от a до z. Сюда также входят символы верхнего регистра.
[A-Z]Символ верхнего регистра между A и Z.
[^A-Z]Любой символ не в диапазоне от A до Z.
[0-9]Любое число от 0 до 9
[^0-9]Символ вне диапазона от 0 до 9
[a-zA-Z0-9]Соответствует символу, который может быть символом нижнего регистра от a до z или любым символом от A до Z или любым числом от 0 до 9.
[^a-zA-Z0-9]Любой символ, не попадающий в предыдущую категорию.
.Любой одиночный символ.
\sИспользуется для поиска пробельных символов.
\SИспользуется для поиска не пробельных символов.
\dСоответствует любой цифре
\DНе соответствует цифре
\wБуквенный или цифровой символ или знак подчёркивания
\WЛюбой символ, кроме буквенного или цифрового символа или знака подчёркивания
$Означает конец строки
\bСоответствует границе слова
\BИспользуется для сопоставления границы, отличной от слова

Квантификаторы

Этот специальный класс токенов используется для сопоставления количества последовательных вхождений символа, строки или числа. Они используются вместе с другими токенами.

Давайте посмотрим на несколько распространенных кванторов.

ТокенЗначение
a?Соответствует нулю или одному вхождению.
a*Соответствует нулю или более вхождений (подряд) a.
a+Для одного или нескольких последовательных вхождений a.
a{5}Ищет ровно пять последовательных вхождений буквы a.
a{5, }Как минимум для пяти или более последовательных вхождений a.
a{5, 7}Ищет любое количество последовательных a от 5 до 7.

Группы

Эти токены, как следует из названия, будут совпадать в группах.

ТокенЗначение
(…)Захватывает все, что заключено в круглые скобки.
(a|b)Соответствует либо a, либо b.
(?:…)Соответствует всему, что заключено в квадратные скобки
(?(1)yes|no)Соответствует условному выражению.

Флаги

Это специальные инструкции, которые даются механизму сопоставления шаблонов при поиске совпадения.

ТокенЗначение
gГлобальный поиск. Будет искать до тех пор, пока не найдет больше совпадений, то есть до конца данной строки или группы строк.
mМногострочное соответствие, т. Е. Строка за строкой.
xУказывает движку игнорировать пробелы при сопоставлении.
XИспользуется для расширенного сопоставления.
sСоответствует одной строке.
iИспользуется для сопоставления без учета регистра.
uДля символов Юникода.

Якоря

Дополнительные инструкции для движка.

ТокенЗначение
^Обозначает начало строки
\AТоже означает начало строки
\ZМаркер конца строки.
\zТокен для абсолютного конца строки.
\GНачало поиска.

Часто используемые регулярные выражения

Регулярные выражения широко используются в Интернете. Регулярные выражения практически неотделимы от современных вычислительных приложений, от проверки форм до поиска данных, содержащих определенное ключевое слово или ключевые слова.

Давайте посмотрим на несколько знакомых примеров использования регулярных выражений.

Соответствие номера телефона

Давайте посмотрим, каков образец телефонного номера, используемого например в Индии. Код страны идет первым. Обычно он содержит символ «+», за которым следует число 91, которое является кодом страны для Индии. Кроме того, номера телефонов в Индии обычно начинаются с 6, 7, 8 или 9. За ними следуют еще 9 цифр.

Таким образом, действительное регулярное выражение для индийского номера мобильного телефона будет таким:

^(\+91[\-\s]?)?[0]?(91)?[6-9]\d{9}$

Проверка надежности паролей

Большинство веб-сайтов рекомендуют нам предоставить надежный пароль, который содержит комбинацию цифр, прописных и строчных букв и символов. Также должно быть минимальное количество символов - 6 или 8. Это сделано для того, чтобы пароль было очень сложно взломать.

Любой пароль, соответствующий этому правилу, может быть сгенерирован или подтвержден на надежность пароля с помощью регулярного выражения.

^(((?=.*[a-z])(?=.*[A-Z]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{6,})

Соответствие URL

URL-адреса - это наиболее распространенный способ использования Интернета и быстрого перехода на нужную веб-страницу. Почти у каждого веб-сайта есть URL-адрес. Следовательно, каждый URL-адрес стандартизирован и следует определенному шаблону. Каждый URL следует либо по протоколу HTTP, либо по протоколу HTTP, за которым часто следует « : // » и « www ». Затем название веб-сайта, за которым следует .com, .ru, .net, .org и т. д.

Чтобы проверить правильность URL-адреса, мы можем использовать регулярное выражение, подобное приведенному ниже.

https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)

Форматы даты и времени

Форматы даты и времени также очень часто используются в Интернете. Есть много форматов дат, используемых в различных приложениях, программном обеспечении или системах. Даты всегда следует использовать в формате, позволяющем использовать их для пользователя или приложения, которое пытается их прочитать.

Дата в формате дд-ММ-гггг может быть проверена с помощью регулярного выражения, которое может быть таким, как указано ниже.

^(1[0-2]|0[1-9])/(3[01]|[12][0-9]|0[1-9])/[0-9]{4}$

Также рекомендуем прочитать:

  1. Самые полезные расширения VS Code для повышения производительности
  2. Как добавить темную тему на свой сайт с помощью CSS и JavaScript
  3. 10 лучших шрифтов для программирования, которые нужны разработчикам
  4. 8 шагов, как получить 100 звезд и больше на GitHub