РЕГЭКС | ПРОГРАММИРОВАНИЕ | СООТВЕТСТВИЕ ОБРАЗЦУ

Введение в регулярные выражения

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

Регулярные выражения или регулярное выражение — это последовательность символов, определяющая некоторую форму шаблона поиска.

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

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

Regex подобны швейцарскому армейскому ножу среди программ; их можно использовать для самых разных целей, от поиска (во всем, от файловых систем до баз данных) до программирования.

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

Регулярные выражения — это способ повысить точность поиска (и подготовки) текстовых данных. Вы также можете использовать их для отладки, преобразования, проверки или, другими словами, обработки строк. Некоторые распространенные варианты использования включают захват всех телефонных номеров из сообщения в блоге, замену их на x или удаление всех специальных символов из элементов HTML.

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

Независимо от того, являетесь ли вы ИТ-специалистом, специалистом по поисковой оптимизации, программируете, выполняете запросы к базе данных или даже изучаете данные для исследования — регулярное выражение может сэкономить вам много времени!

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

Как работает регулярное выражение?

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

Первый шаг — определить шаблон, который вы хотите сопоставить, и найти его в строке. Это может быть любая последовательность символов.

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

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

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

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

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

/  — delimiter (start and end of regex)
?  — match 0 or 1 time
*  - match 0 or more times
+  — match 1 or more times
[] — range of acceptable values
{} — exactly n characters
|  — create different branches
() — grouping
i  — case insensitive
^  — anchor to the beginning of the string
$  — anchor to the end of the string

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

Шаг 1: Определите шаблон, который нам нужно сопоставить

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

6 символов должны находиться в диапазоне от A до F или от 0 до 9.

Шаг 2: Переведите в регулярное выражение

Я буду использовать замечательный веб-сайт regex101 для проверки и тестирования нашего регулярного выражения.

Давайте сначала начнем с перечисления всех возможных значений:

/#[ABCDEF0123456789]

Мы видим, что наш шестнадцатеричный тестовый пример красного цвета (#EB4034) проходит проверку. Но если мы присмотримся, то увидим, что совпадение (основываясь на синем выделении) ограничено только первыми двумя символами.

Это потому, что мы указываем, что шаблон должен быть символом #, за которым следуют любые другие символы, как указано в [].

Чтобы исправить это, мы можем использовать оператор + в конце регулярного выражения, чтобы повторить содержимое внутри [] 1 или более раз.

Кроме того, вместо того, чтобы указывать весь список символов, мы можем использовать оператор — для указания диапазонов (например, ABCDEF становится A-F, а 0123456789 становится 0–9).

Мы также можем указать # как необязательный, используя ? оператора (поскольку иногда люди принимают # как должное).

Давайте попробуем эти изменения снова.

Как видно из приведенного выше тестового примера, теперь у нас есть выделение по всей строке.

На данный момент это выглядит хорошо, не так ли? Всегда разумно попробовать тестовые примеры, которые, как мы знаем, недействительны.

Что произойдет, если мы попытаемся проверить неправильно отформатированную шестнадцатеричную строку, такую ​​как AA?

Мы все еще получаем матч. Давайте исправим это.

Мы точно знаем, что шестнадцатеричный код должен состоять из 6 символов. Мы можем указать, сколько повторений мы хотим, используя {}. Итак, давайте поменяем + на {6}.

Хороший! У нас нет соответствия для тестового примера 5, в то время как правильно отформатированный шестнадцатеричный код прошел проверку (в тестовом примере 6).

Однако вышеизложенное создало еще одну проблему. Существуют допустимые шестнадцатеричные коды, состоящие только из 3 символов, например #B63. Этот тестовый пример завершится ошибкой с текущим регулярным выражением.

Мы можем использовать | оператор для указания условия ИЛИ.

Давайте используем приведенное ниже регулярное выражение, которое соответствует либо 6 символам, либо 3 символам.

/#?([A-F0-9]{6}|[A-F0-9]{3})

И вуаля! У нас матч.

Наш следующий тестовый пример предназначен для шестнадцатеричных кодов с разными стилями регистра (т. е. строчными или прописными буквами). В настоящее время #B63 является допустимым гексом, но #b63 потерпит неудачу.

Есть два способа, как мы можем это исправить. Мы можем указать диапазон нижнего регистра в качестве допустимых значений:

/#?([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})

OR

мы можем использовать модификатор шаблона. Мы можем использовать символ i, чтобы подчеркнуть, что это регулярное выражение нечувствительно к регистру.

/#?([A-F0-9]{6}|[A-F0-9]{3})/i

Примечание. Я использую /ig вместо /i для одновременной проверки нескольких строк. /g представляет глобальный возврат.

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

Итак, если бы мы передали эту строку: test #B63, мы бы получили неверное совпадение.

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

/^#?([A-F0-9]{6}|[A-F0-9]{3})$/i

Не совпадает. Большой!

Крутой трюк, который можно включить в наше регулярное выражение, — это сокращение пробелов. Используя символы \s*, мы укажем нашему движку регулярных выражений игнорировать любые пробелы.

/^\s*#?([A-F0-9]{6}|[A-F0-9]{3})\s*$/i

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

Но есть еще один крутой трюк, который мы должны изучить, прежде чем идти.

Позвольте представить вам https://regexper.com/. Это удивительный инструмент, который классно визуализирует ваше регулярное выражение. Этот процесс невероятно полезен, когда мы пытаемся понять и отладить наше регулярное выражение.

И вот оно! Ваше первое регулярное выражение, проверенное и завершенное. Это в основном вся суть регулярных выражений, и каждое создаваемое вами регулярное выражение, скорее всего, будет следовать одному и тому же процессу и принципам. Тем не менее, есть еще некоторые другие расширенные правила синтаксиса и некоторые распространенные ловушки, чтобы избежать их, которые мы должны рассмотреть. Но это для другого дня!

А пока потренируйтесь создавать простые проверки регулярных выражений для ваших вариантов использования и не бойтесь замарать руки!

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



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



Хотите связаться?

Я хотел бы услышать ваши мысли по теме, или что-либо AI действительно. Напишите мне по адресу [email protected], если вы хотите связаться с нами.

Линкедин