Изготовление сайтов в Москве. Изучение регулярных выражений: руководство для начинающих

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

Регулярные выражения имеют множество вариантов использования, в том числе:

проверка ввода формы

парсинг веб-страниц

поиск и замена

фильтрация информации в больших текстовых файлах, таких как журналы

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

/^[a-zA-Z0−9.! #$%&’*+/=? ^_`{|}~-]+@[a-zA-Z0-9-]+ (?: \.[a-zA-Z0-9-]+) *$/

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

xkcd.com/208

1 кредит

Я покажу вам, как быстро освоить регулярные выражения. Во-первых, давайте уточним терминологию, используемую в этом руководстве:

шаблон: шаблон регулярного выражения

string: тестовая строка, используемая для сопоставления с шаблоном

цифра: 0−9

буква: аз, аз

символ:! $%^&* () _+|~-=`{}[]:»;'<>?,. /

пробел: один пробел, вкладка

характер: относится к букве, цифре или символу

Основы

Чтобы быстро изучить регулярное выражение с помощью этого руководства, посетите Regex101, где вы можете создавать шаблоны регулярных выражений и тестировать их на соответствие строкам (тексту), которые вы предоставляете.

Когда вы откроете сайт, вам нужно будет выбрать вариант JavaScript, так как именно его мы будем использовать в этом руководстве. (Синтаксис регулярных выражений в основном одинаков для всех языков, но есть небольшие отличия.)

Затем вам нужно отключить флаги globalи multi lineв Regex101. Мы рассмотрим их в следующем разделе. Сейчас мы рассмотрим самую простую форму регулярного выражения, которую мы можем построить. Введите следующее:

поле ввода регулярного выражения: кошка

тестовая строка: крыса, летучая мышь, кошка, села, толстые кошки, едят коврик для кошки, кошка.

базовое регулярное выражение

Обратите внимание, что регулярные выражения в JavaScript начинаются и заканчиваются на /. Если бы вы написали регулярное выражение в коде JavaScript, оно выглядело бы так: /cat/без кавычек. В приведенном выше состоянии регулярное выражение соответствует строке «кошка». Однако, как вы можете видеть на изображении выше, есть несколько строк «кошки», которые не совпадают. В следующем разделе мы рассмотрим, почему.

Глобальные и нечувствительные к регистру флаги регулярных выражений

По умолчанию шаблон регулярного выражения возвращает только первое найденное совпадение. Если вы хотите вернуть дополнительные совпадения, вам необходимо включить глобальный флаг, обозначенный как g. Шаблоны регулярных выражений также чувствительны к регистру по умолчанию. Вы можете переопределить это поведение, включив нечувствительный флаг, обозначенный i. Обновленный шаблон регулярного выражения теперь полностью выражается как /cat/gi. Как вы можете видеть ниже, все строки «cat» были сопоставлены, включая строку с другим регистром.

глобальный нечувствительный флаг

Наборы символов

В предыдущем примере мы узнали, как выполнять точные совпадения с учетом регистра. Что, если мы хотим сопоставить «летучая мышь», «кошка» и «жир». Мы можем сделать это, используя наборы символов, обозначенные []. По сути, вы вводите несколько символов, которые хотите сопоставить. Например, [bcf]atбудет соответствовать несколько строк следующим образом:

наборы символов

Наборы символов также работают с цифрами.

Диапазоны

Предположим, мы хотим сопоставить все слова, оканчивающиеся на at. Мы могли бы указать полный алфавит внутри набора символов, но это было бы утомительно. Решение состоит в том, чтобы использовать такие диапазоны [a-z]at:

диапазоны

Вот полная проверяемая строка: rat bat cat sat fat cats eat tat cat dog mat CAT.

Как видите, все слова совпадают, как и ожидалось. Я добавил слово dogтолько для того, чтобы добавить недопустимое совпадение. Вот другие способы использования диапазонов:

Частичный диапазон: такие варианты, как [a-f]или [g-p].

Диапазон с заглавной буквы: [A-Z].

Диапазон цифр: [0−9].

Диапазон символов: например, [#$%&@].

Смешанный диапазон: например, [a-zA-Z0−9]включает все цифры, строчные и прописные буквы. Обратите внимание, что диапазон указывает только несколько альтернатив для одного символа в шаблоне.

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

ascii-таблица

Повторяющиеся символы

Допустим, вы хотите сопоставить все трехбуквенные слова. Вероятно, вы бы сделали это так:

[a-z][a-z][a-z]

Это будет соответствовать всем трехбуквенным словам. Но что, если вы хотите сопоставить слово из пяти или восьми символов. Вышеупомянутый метод утомителен. Есть лучший способ выразить такой шаблон с помощью {}фигурных скобок. Все, что вам нужно сделать, это указать количество повторяющихся символов. Вот примеры:

a{5}будет соответствовать «ааааа».

n{3}будет соответствовать «nnn».

[a-z]{4}будет соответствовать любому слову из четырех букв, например «дверь», «комната» или «книга».

[a-z]{6, }будет соответствовать любому слову с шестью или более буквами.

[a-z]{8,11}будет соответствовать любому слову от восьми до 11 букв. Таким образом можно выполнить базовую проверку пароля.

[0−9]{11}будет соответствовать 11-значному числу. Таким образом можно выполнить базовую международную проверку телефона.

Метасимволы

Метасимволы позволяют писать еще более компактные шаблоны регулярных выражений. Давайте пройдемся по ним один за другим:

\dсоответствует любой цифре, которая совпадает с[0−9]

\wсоответствует любой букве, цифре и символу подчеркивания

\sсоответствует символу пробела, то есть пробелу или табуляции

\tсоответствует только символу табуляции

Из того, что мы уже узнали, мы можем писать регулярные выражения следующим образом:

\w{5}соответствует любому пятибуквенному слову или пятизначному числу

\d{11}соответствует 11-значному числу, например номеру телефона

Специальные символы

Специальные символы делают нас еще одним шагом вперед в написании более сложных выражений шаблонов:

+: один или несколько квантификаторов (предшествующий символ должен существовать и может быть дублирован). Например, выражение c+atбудет соответствовать «cat», «ccat» и «ccccccccat». Вы можете повторять предыдущий символ столько раз, сколько хотите, и вы все равно получите совпадение.

?: Нуль или один квантификатор (предыдущий символ необязателен). Например, выражение c? atбудет соответствовать только «кошке» или «у».

*: квантификатор ноль или более (предыдущий символ является необязательным и может быть дублирован). Например, выражение c*atбудет соответствовать «at», «cat» и «ccccccat». Это как сочетание +и?.

\: этот «экранирующий символ» используется, когда мы хотим буквально использовать специальный символ. Например, c\*будет точно соответствовать «c*», а не «ccccccc».

[^]: это «отрицательное» обозначение используется для обозначения символа, который не должен совпадать в пределах диапазона. Например, выражение b[^a-c]ldне будет соответствовать словам «лысый» или «бблд», потому что вторые буквы от «а» до «с» отрицательные. Однако шаблон будет соответствовать «beld», «bild», «bold» и так далее.

.: эта нотация «do» будет соответствовать любой цифре, букве или символу, кроме новой строки. Например,. {8}будет соответствовать восьмизначный пароль, состоящий из букв, цифр и символов. например, «пароль» и «P@ssw0rd» будут совпадать.

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

. +соответствует одному или неограниченному количеству символов. Например, «c», «cc» и «bcd#. 670» будут совпадать.

[a-z]+будет соответствовать всем словам с строчными буквами независимо от длины, если они содержат хотя бы одну букву. Например, «книга» и «зал заседаний» будут совпадать.

Группы

Все специальные символы, которые мы только что упомянули, влияют только на один символ или набор диапазонов. Что, если мы хотим, чтобы эффект применялся к части выражения? Мы можем сделать это, создав группы с помощью круглых скобок — (). Например, шаблон book (.com)? будет соответствовать как «book», так и «book.com», так как мы сделали часть «.com» необязательной.

Вот более сложный пример, который можно было бы использовать в реалистичном сценарии, таком как проверка электронной почты:

шаблон: @\w+\. \w{2,3} (\. \w{2,3})?

тестовая строка: abc.com abc@mail

# valid email address

abc@mail.com</untypoX

abc@mail.nz</untypoX

abc@mail.co.nz</untypoX

abc123@mail.com</untypoX

abc.def@music.com</untypoX

# invalid email prefix

abc-@mail.com</untypoX

abc...def@mail.com

.abc@mail.com

abc#def@mail.com</untypoX

# valid email prefix

abc-d@mail.com</untypoX

abc.def@mail.com</untypoX

abc@mail.com</untypoX

abc_def@mail.com</untypoX

# invalid domain suffix

abc.def@mail.c

abc.def@mail#archive.com</untypoX

abc.def@mail</untypoX

abc.def@mail...com

# valid domain suffix

abc.def@mail.cc</untypoX

abc.def@mail-archive.com</untypoX

abc.def@mail.org</untypoX

abc.def@mail.com</untypoX

fully-qualified-domain@example.com</untypoX

Обратите внимание, что некоторые адреса электронной почты, помеченные как действительные, могут быть недействительны для определенных организаций, а некоторые, помеченные как недействительные, могут быть разрешены в других организациях. В любом случае, научиться создавать собственные регулярные выражения для организаций, в которых вы работаете, имеет первостепенное значение для удовлетворения их потребностей. Если вы застряли, вы можете рассмотреть следующие возможные решения. Обратите внимание, что ни один из них не даст вам 100% соответствия приведенным выше действительным тестовым строкам электронной почты.

Возможное решение 1:

^\w* (\-\w)? (\. \w*)? @\w* (-\w*)? \. \w{2,3} (\. \w{2,3})? $

Возможное решение 2:

^ (([^<> () \[\]\\.,;: \s@"]+ (\.[^<> () \[\]\\.,;: \s@"]+) *) | («. +»))@ ((\[[0−9]{1,3}\.[0−9]{1,3}\.[0−9]{1,3}\.[0−9]{1,3}]) | (([a-zA-Z\-0-9]+\.) +[a-zA-Z]{2, }))$

Резюме

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

Делитесь нашими материалами с друзьями!

 

 

Заказать разработку сайта