Введение в регулярные выражения на 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}$
Также рекомендуем прочитать: