Другое

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

Lorem ipsum dolor

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

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

  • JS;

  • Java;

  • PHP;

  • C;

  • SQL;

  • и др.

Основная функция регулярных выражений — это найти в тексте заданное сочетание символов, поэтому при помощи них можно:

  • найти определенный текст в строках;

  • заменить нужный текст;

  • просто извлечь нужную информацию из текста;

  • и др.

При этом для каждой такой операции нужно будет применить собственный синтаксис.

 

Регулярные выражения в JS, Java, PHP, C и др.

Как мы уже сказали, регулярные выражения применяются во многих языках программирования; все, чем они могут отличаться, — это реализацией, но сама суть их применения везде одинакова. В состав этих выражений входят определенные символы, при помощи которых формируются отдельные команды на тему «Что нужно сделать с текстом?».

Можно даже сказать, что регулярные выражения чем-то напоминают язык программирования, только они ничего не программируют, а лишь осуществляют поиск по тексту. По своему применению они чем-то похожи на команды в «терминале».

Регулярные выражения обозначаются терминами «RegExp» или «RegEx», и происходят эти термины от английского «Regular Expressions». Если объяснить очень просто, то регулярные выражения — это некий специальный шаблон-фильтр, через который вы пропускаете текст, чтобы обнаружить нужное сочетание символов. 

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

 

Как начать применять регулярные выражения

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

Онлайн-сервисы с возможностью применить регулярные выражения: 

 

Регулярные выражения в JS, Java, PHP, C: поиск нужного слова

Приведем самый простой вариант:

Есть текст: Лето, лето, осень

Ищем выражение: лето

Будет результат: Лето, лето, осень

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

Если искомых выражений у нас в тексте будет несколько, например: «Лето, лето, лето, лето, осень». То по умолчанию результатом будет первое найденное слово «лето». Чтобы найти все вхождения искомого слова, это также нужно будет отметить.

Если наше искомое выражение является частью большого выражения, то оно все равно будет найдено. Например, если наш текст будет: «Лето, 2021летобр, осень», то результатом станет: «Лето, 2021летобр, осень». То есть по умолчанию не идет поиск по точному совпадению, а лишь по первому совпадению искомых символов.

 

Поиск любых символов

Точка «.» найдет любой одиночный символ. Например:

Есть текст: Ира, Ива, Карина, Олеся, Иванна

Ищем символы: И.а

Будет результат: Ира, Ива, Карина, Олеся, Иванна

То есть, точка «.» заменяет любой один символ (включая пробел!), не только буквы, например, если у нас в тексте будут выражения: «И7а, И&а, И а», то они также будут найдены.

А что делать, если нам нужно найти саму «точку». Это очень часто применяется, когда нужно найти нужное расширение файла, допустим «.exe», тогда нам нужно воспользоваться символом «\», например:

Есть текст: game.exe, logo.png, 2exe.docx

Ищем: \.exe

Результат: game.exe, logo.png, 2exe.docx

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

 

Поиск, используя набор символов

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

Ищем: В..а

Результат: Вера, Веранда, В56анд, аоплтВ&&апро, Вита, Виталий

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

Ищем: B[еи][рт]а

Результат: Вера, Веранда, В56анд, аоплтВ&&апро, Вита, Виталий

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

  • [еи] — могут быть только «е» и «и»;

  • [а-я] — все буквы русского алфавита в нижнем регистре;

  • [А-Я] — все буквы русского алфавита в верхнем регистре;

  • [А-Яа-яёЁ] — абсолютно все буквы русского алфавита;

  • [a-z] — латинский алфавит в нижнем регистре;

  • [A-Z] — латинский алфавит в верхнем регистре;

  • [A-Za-z] — весь латинский алфавит;

  • [0-9] — любые цифры;

  • [Г-Л] — диапазон букв русского алфавита в верхнем регистре от «Г» до «Л»;

  • и др.

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

  • между значениями диапазона мы ставим дефис «-»;

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

Например:

  • [xyz] — из вариантов возможны только буквы «x», «y», «z»;

  • [x y z] — возможны буквы и пробелы, а это может привести к неожиданному результату; 

  • [x, y, z] — возможны буквы, пробелы и запятые.

Еще один важный момент — символ «^» создает исключение в квадратных скобках, например:

  • [^2-6] — любой символ, кроме цифр: 2, 3, 4, 5, 6;

  • [^Аа] — любой символ, исключая букву «а» в верхнем и нижнем регистре;

  • [^б-к] — любой символ, исключая диапазон букв в нижнем регистре от «б» и до «к»;

  • и т. д.

 

Используем метасимволы

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

  • \b — граница слова;

  • \d — это [0-9];

  • \D — это [^0-9];

  • \w — это [A-Za-z0-9];

  • \W — это [^A-Za-z0-9];

  • \s — это «пробел», «табуляция», «перенос строки»; как мы помним, это все невидимые символы, которые также имеют свое обозначение;

  • \S — это любой символ, кроме «пробела»;

  • \0 — это «null»;

  • \n — это символ новой строки;

  • \t — это символ табуляции;

  • «.» это любой символ, кроме символа новой строки;

  • ^ обозначает начало выражения/строки;

  • $ обозначает конец выражения/строки;

  • и др.

 

Пример применения метасимвола

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

Ищем: жар

Результат может быть: пожар, жаровня, жаркое, жара, прожаренный

В общем, результатом может быть что угодно, лишь бы содержало символы «жар». Но что делать, когда нужно конкретное слово «жар» и ничего больше?

В этом случае мы можем применить метасимвол «\b», например:

Ищем: \bжар\b

Результат будет только: жар

В результате не будет: пожар, жаровня, жара и т. д.

Если оставить границу слова только спереди, например будем искать «\bжар», тогда результатом будет: жар, жара, жаровня, то есть те слова, которые начинаются на «жар».

Если границу слова поставить в конце, например, будем искать «жар\b», тогда результатом будет: жар, пожар, то есть те слова, которые оканчиваются на «жар».

А что если нам нужно найти целое предложение/выражение/строку? Тогда также можно применить специальные метасимволы, например:

Ищем: ^Я сплю!$

Результат будет: Я сплю!

В результате не будет: «Не звони мне! Я сплю!» или «Я сплю! Будить меня не надо!»

 

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

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

  • {n} — количество повторений символа;

  • {m,n} — количество повторений символа в заданном диапазоне, где m — это начало диапазона, а n — это конец диапазона;

  • {m,} символы могут повторяться от m-количества раз и больше;

  • {,n} — символы могут повторяться до n-количества раз;

  • ? аналогичен {0,1} и обозначает от нуля и до одного вхождения символов;

  • * аналогичен {0,} и обозначает от нуля и более раз;

  • + аналогичен {1,} и обозначает от 1 и более вхождений.

Важно запомнить, что любой квантификатор применяется только к последнему символу, например:

Ищем: лето{2}

Найдет: летоо

И не найдет: летолето

Поэтому если мы хотим применить квантификатор к группе символов, то их нужно обернуть в круглые скобки, например:

Ищем: (лето){2}

Найдет: летолето

И не найдет: летоо

 

Как применять регулярные выражения в JS, Java, PHP, C

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

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

 

Регулярные выражения в JS

Регулярные выражения в JS создаются довольно просто: создается объект «regex» с шаблоном регулярного выражения и потом еще один объект с методами взаимодействия с регулярным выражениями. Например:

var regex = /шаблон регулярного выражения обязательно в 2-х слешах «//»/;

var matches = str.match(regex)

 

Регулярные выражения в Java

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

Pattern pattern = Pattern.compile("наша строка или документ для исследования", Pattern.CASE_INSENSITIVE);

Matcher matcher = pattern.matcher("шаблон регулярного выражения");

 

Регулярные выражения в С

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

string str = "текст/строка/выражение/документ для исследования";

Regex regex = new Regex(@"шаблон регулярного выражения");

MatchCollection matches = regex.Matches(str);

 

Регулярные выражения в PHP

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

function (){

if (!шаблон регулярного выражения для проверки чего-либо, например, почты)

{

return false;

}

else return true;

}

 

Заключение

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

В следующих статьях мы подробнее остановимся на том, как применяются регулярные выражения в JS, Java, C, PHP, SQL, Excel, Oracle и др.

Схожие статьи

Предметно-ориентированное программирование. Достоинства и недостатки
Другое

Предметно-ориентированное программирование. Достоинства и недостатки

Выбираем самый популярный фреймворк PHP в 2021 году: рейтинг лучших
Другое

Выбираем самый популярный фреймворк PHP в 2021 году: рейтинг лучших

Изучаем Three.js. Примеры создания сцен и коротко о 3D-моделировании
Другое

Изучаем Three.js. Примеры создания сцен и коротко о 3D-моделировании

Что такое Буткемп: программное обеспечение или обучение IT
Другое

Что такое Буткемп: программное обеспечение или обучение IT