Regex - язык регулярных выражений для новичков. Интеграция Regex'a c Java. Введение
Регулярные выражения, можно сказать, представляют собой своего рода язык запросов, благодаря которому можно выполнять следующие ключевые задачи:
Валидировать строки
Искать нужные подстроки в строках
Извлекать необходимые данные
Regex не ограничивается только языком Java.
Этот язык используется повсеместно в области информационных технологий. Зная его, вы можете применять свои навыки в множестве контекстов. Поддержка регулярных выражений присутствует в большинстве языков программирования, и множество программ полагаются на регулярные запросы. В какой-то мере regex является стандартом, который полезно знать каждому.
Regex часто кажется сложным для понимания, особенно новичкам.
К сожалению, регулярные выражения, особенно если они написаны неоптимально, могут требовать много усилий для разбора конкретного выражения.
Существует множество решений для упрощения написания и тестирования регулярных выражений.
К счастью, существуют готовые онлайн-решения, которые существенно облегчают процесс понимания. Например, regex101.com - сервис, который мы будем использовать далее. Вот пример того, как мы валидируем формат даты:
Самые основы. Ищем котов.
Давайте начнем с самых основ. Допустим, у нас есть задача: мы хотим найти все упоминания слова 'cat' в строке 'catdogbananacat'. Выражение для этой задачи будет очень простым: 'cat'. Именно так, просто слово.
Теперь давайте посмотрим, что мы найдем, используя утилиту regex101.com:
Мы нашли двух котов. (Заметьте первый кот подсвечен голубым, второй синим - тк найдено 2 упоминания или подстроки в строке).
Символ начала строки ^
Теперь найдем только котов которые стоят в самом начале строки а не в середине или конце, для этого воспользуемся симоволом ^ (циркумфлекс символ или символ "домика" или "крышечки" или caret на английском).
И так среди вариантов мы нашли 2 котов которые начинают строку.
Символ конца строки $
Также, аналогично предыдущему, давайте найдем только те варианты, где 'cat' будет заканчивать строку. Для этого воспользуемся символом $. Итак, наше выражение будет cat$.
Усложняем задачу, находим двух котов между которыми есть цифра. Символ числа \d
Теперь усложним задачу и найдем двух котов, между которыми есть цифра. Для этого мы используем \d (от слова 'digit' - цифра). Итак, искомое выражение будет 'cat\dcat'.
Знакомимся с \w и последовательностью +
Теперь предположим, что мы ищем двух котов, между которыми может быть несколько цифр, букв или подчеркиваний. Для этого воспользуемся \w, а затем добавим символ +, подсказыва регексу, что символов может быть больше одного. Конечное выражение: cat\w+cat
Перечисляем допустимые символы. Символ [ ]
Теперь сузим поиск и предположим, что мы ищем пару двух котов, между которыми есть лишь буквы a, b, c (либо их вариации). Для перечисления используем квадратные скобки: [abc], и добавим +, чтобы указать, что букв может быть несколько.
первые три вариана не подходя потому что: в первом есть цифра, во втором дефис, в третьем подчеркивание.
Указываем минимальную и максимальную длину. Символ { }
Теперь сузим поиск еще сильнее, предположим что в сумме букв a,b,c между котами может быть не менее 1 и не более 5 символов. Для этого воспользуемся фигурными скобками и получим выражение cat[abc]{1,5}cat
Добавляем вариации. Логическое ИЛИ. Символ |
Теперь допустим мы ищем всех котов между которыми может быть:
Уже знакомый вариант с a,b,c которых не более 5 и не менее 1
Либо слово dog
Для этого воспользуемся логическим выражением или используя | символ. Также чтобы указать что между двумя котами может быть лишь 1 вариант нам нужно использовать круглые скобки чтобы объединить их. Круглые скобки играют еще и другие роли (об этом будет позже). Итого наше выражение cat([abc]{1,5}|dog)cat
Резюмируя первую часть статьи.
И так мы хорошо поработали, теперь мы научились работать с такими иероглифами как:
^ начало строки, $ конец строки
+ несколько последовательных символов (неограниченное количество)
\d любое число 0-9
\w любой алфавитный, цифровой символ и подчеркивание
[ ] - перечисление допустимх символов
{ } - указание минимальной, максимальной длины повторений
| - логическое ИЛИ которое для большинства случаев требует наличие скобок ( )
Что дальше?
Итак, мы познакомились с довольно простыми вещами, которые не слишком иллюстрируют всю мощь регулярных выражений. В следующих частях мы узнаем еще больше магических символов и применим их для первых промышленных задач.
Тем, кто интересуется разработкой и всем, что с ней связано, приглашаю в мой телеграм канал.
Спасибо за внимание.