41

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

Птичка, цветочек, прямые линии. Почти неотличимо от обычного регекса)

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

  • Валидировать строки

  • Искать нужные подстроки в строках

  • Извлекать необходимые данные

Regex не ограничивается только языком Java.

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

Regex часто кажется сложным для понимания, особенно новичкам.

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

Существует множество решений для упрощения написания и тестирования регулярных выражений.

К счастью, существуют готовые онлайн-решения, которые существенно облегчают процесс понимания. Например, regex101.com - сервис, который мы будем использовать далее. Вот пример того, как мы валидируем формат даты:

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

Можете пока не вдаваться в подробности. Ниже я объясню как им пользоваться.

Самые основы. Ищем котов.

Давайте начнем с самых основ. Допустим, у нас есть задача: мы хотим найти все упоминания слова 'cat' в строке 'catdogbananacat'. Выражение для этой задачи будет очень простым: 'cat'. Именно так, просто слово.

Теперь давайте посмотрим, что мы найдем, используя утилиту regex101.com:

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

Мы нашли двух котов. (Заметьте первый кот подсвечен голубым, второй синим - тк найдено 2 упоминания или подстроки в строке).

Символ начала строки ^

Теперь найдем только котов которые стоят в самом начале строки а не в середине или конце, для этого воспользуемся симоволом ^ (циркумфлекс символ или символ "домика" или "крышечки" или caret на английском).

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

Среди 3х вариантов было найдено два кота которые начинают строку.

И так среди вариантов мы нашли 2 котов которые начинают строку.

Символ конца строки $

Также, аналогично предыдущему, давайте найдем только те варианты, где 'cat' будет заканчивать строку. Для этого воспользуемся символом $. Итак, наше выражение будет cat$.

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

Найден лишь один который который заканчивает строку.

Усложняем задачу, находим двух котов между которыми есть цифра. Символ числа \d

Теперь усложним задачу и найдем двух котов, между которыми есть цифра. Для этого мы используем \d (от слова 'digit' - цифра). Итак, искомое выражение будет 'cat\dcat'.

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

Как мы видим лишь один случай найден. Именно один варинт ровно 1 числа между двумя котами.

Знакомимся с \w и последовательностью +

Теперь предположим, что мы ищем двух котов, между которыми может быть несколько цифр, букв или подчеркиваний. Для этого воспользуемся \w, а затем добавим символ +, подсказыва регексу, что символов может быть больше одного. Конечное выражение: cat\w+cat

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

красным подчеркнуто, чтобы для удобства просмотра)

Перечисляем допустимые символы. Символ [ ]

Теперь сузим поиск и предположим, что мы ищем пару двух котов, между которыми есть лишь буквы a, b, c (либо их вариации). Для перечисления используем квадратные скобки: [abc], и добавим +, чтобы указать, что букв может быть несколько.

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

первые три вариана не подходя потому что: в первом есть цифра, во втором дефис, в третьем подчеркивание.

Указываем минимальную и максимальную длину. Символ { }

Теперь сузим поиск еще сильнее, предположим что в сумме букв a,b,c между котами может быть не менее 1 и не более 5 символов. Для этого воспользуемся фигурными скобками и получим выражение cat[abc]{1,5}cat

Добавляем вариации. Логическое ИЛИ. Символ |

Теперь допустим мы ищем всех котов между которыми может быть:

  • Уже знакомый вариант с a,b,c которых не более 5 и не менее 1

  • Либо слово dog

Для этого воспользуемся логическим выражением или используя | символ. Также чтобы указать что между двумя котами может быть лишь 1 вариант нам нужно использовать круглые скобки чтобы объединить их. Круглые скобки играют еще и другие роли (об этом будет позже). Итого наше выражение cat([abc]{1,5}|dog)cat

Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение IT, Регулярные выражения, Regex, Длиннопост, Telegram (ссылка), Telegram

К старым результатам добавился catdogcat что и было ожидаемо.

Резюмируя первую часть статьи.

И так мы хорошо поработали, теперь мы научились работать с такими иероглифами как:

  • ^ начало строки, $ конец строки

  • + несколько последовательных символов (неограниченное количество)

  • \d любое число 0-9

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

  • [ ] - перечисление допустимх символов

  • { } - указание минимальной, максимальной длины повторений

  • | - логическое ИЛИ которое для большинства случаев требует наличие скобок ( )

Что дальше?

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

Тем, кто интересуется разработкой и всем, что с ней связано, приглашаю в мой телеграм канал.

Спасибо за внимание.