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 любой алфавитный, цифровой символ и подчеркивание
[ ] - перечисление допустимх символов
{ } - указание минимальной, максимальной длины повторений
| - логическое ИЛИ которое для большинства случаев требует наличие скобок ( )
Что дальше?
Итак, мы познакомились с довольно простыми вещами, которые не слишком иллюстрируют всю мощь регулярных выражений. В следующих частях мы узнаем еще больше магических символов и применим их для первых промышленных задач.
Тем, кто интересуется разработкой и всем, что с ней связано, приглашаю в мой телеграм канал.
Спасибо за внимание.
Страх и ненависть в римской пекарне
Римские императоры очень не любили городские бунты в столице, а потому одной из важнейших задач была минимизация поводов для них. Так для решения проблемы выступлений из-за плохого питания действовала система хлебных раздач. В общем виде она работала так: в Рим поступало зерно, взятое налогами в провинциях, там подрядчики пекари выпекали из него хлеб и реализовывали по льготным ценам.
Так как объёмы выпечки, качество и цены контролировало государство, то увеличить прибыль можно было лишь снизив издержки. И один ушлый коммерсант в конце 4 века н.э. решил радикально снизить затраты на рабочую силу - получать её стабильно и забесплатно.
Рядом с пекарней был выстроен бордель, второй этаж которого был соединён с первым этажом пекарни люком. Работники борделя выискивали иногородних посетителей, которых вряд ли будут искать, отводили на второй этаж, там то ли били по голове и спускали через люк в пекарню, то ли они сами падали в люк, а для острастки били уже внизу. Там бедняг заковывали в цепи и отводили в рабочую зону без окон и с охраной на входе, где заставляли печь хлеб. Сбежать новоявленному рабу после этого было невозможно.
Схема работала отлично, поставляя полностью бесплатных рабочих, пока в борделе не совершили чудовищную ошибку. Уж не знаю как тамошние работники не распознали в посетителе солдата, ведь у того на военном поясе висел кинжал, что не каждому разрешено было носить. Но его по привычке спустили в пекарню, а там... наш солдат опомнился, достал кинжал и начал крошить охрану.
Выбравшись из пекарни, он тут же отправился к командирам, а те довели дело до императора. Залет был серьёзный, так как само по себе такое обращение в рабство граждан дюже незаконная штука. Так идиоты ещё и попытались сделать это с солдатом, поклявшемся в верности, императору. А это уже попахивает госизменой. Поэтому ушлого коммерса и его бизнес ждала незавидная участь.
___________________________________________________________________
Подпишись на сообщество Катехизис Катарсиса, чтобы не пропустить новые интересные посты авторов Cat.Cat!
Пост с навигацией по Cat.Cat
Также читайте Cat.Cat на других ресурсах:
Телеграм
ВК
Дзен
Живой список постов [НЕАКТУАЛЬНО]
Всем привет!
Не так давно мне подсказали одну фичу, которая позволила создать "живой" список постов по категориям, которые постоянно будут пополняться. Вместо архивов теперь будут просто списки сохранённых постов, которые сделаны публичными. Пользуйтесь на здоровье!
ИНДЕЙЦЫ: pikabu.ru/@Cat.Cat/saved/1368253
АНТИЧНОСТЬ И ДРЕВНИЙ МИР: pikabu.ru/@Cat.Cat/saved/1368247
СРЕДНЕВЕКОВЬЕ: pikabu.ru/@Cat.Cat/saved/1368260
КАЗАНСКОЕ ВЗЯТИЕ - огромный длинноцикл от Ивана Мизерова о взятии Иваном Грозным Казани, предыстории, предпосылках и последствиях: pikabu.ru/@Cat.Cat/saved/1368262
НОВОЕ ВРЕМЯ: pikabu.ru/@Cat.Cat/saved/1368254
ХХ ВЕК, РАЗНОЕ - всё, что не удалось привязать к другим категориям: pikabu.ru/@Cat.Cat/saved/1368280
РУССКО-ЯПОНСКАЯ ВОЙНА: pikabu.ru/@Cat.Cat/saved/1368316
ЧЕРЧИЛЛЬ - цикл от Андрея Лебедева с биографией Уинстона Черчилля: pikabu.ru/@Cat.Cat/saved/1368350
ПЕРВАЯ МИРОВАЯ: pikabu.ru/@Cat.Cat/saved/1367610
ГРАЖДАНСКАЯ ВОЙНА - всё, связанное с периодом 1917-1922гг на просторах России: pikabu.ru/@Cat.Cat/saved/1367613
ИНТЕРБЕЛЛУМ - период между мировыми войнами: pikabu.ru/@Cat.Cat/saved/1367630
ВТОРАЯ МИРОВАЯ: pikabu.ru/@Cat.Cat/saved/1367618
ХОЛОДНАЯ ВОЙНА - всё, что происходило в период с 1945 по 1990: pikabu.ru/@Cat.Cat/saved/1367632
ШЕСТИДНЕВНАЯ ВОЙНА - цикл Александра Соцкого о самом эпичном противостоянии арабов и евреев, золотая классика Кэткэта: pikabu.ru/@Cat.Cat/saved/1367635
ВОЙНА ВО ВЬЕТНАМЕ: pikabu.ru/@Cat.Cat/saved/1367784
ВОЙНА В АФГАНИСТАНЕ: pikabu.ru/@Cat.Cat/saved/1367786
ЧЕРНОБЫЛЬ - цикл Александра Старостина и прочие статьи, связанные с этим: pikabu.ru/@Cat.Cat/saved/1368343
ДЕВЯНОСТЫЕ: pikabu.ru/@Cat.Cat/saved/1368244
ЮГОСЛАВСКИЕ ВОЙНЫ: pikabu.ru/@Cat.Cat/saved/1367788
ОТЕЧЕСТВЕННАЯ ЛЁГКАЯ БРОНЕТЕХНИКА - цикл Александра Старостина о наших бронированных машинках: pikabu.ru/@Cat.Cat/saved/1368271
ПОЕЗДА СОВЕТСКОГО МЕТРО: цикл Александра Старостина: pikabu.ru/@Cat.Cat/saved/1368275
МОСМЕТРОСТРОЙ - цикл Александра Старостина о строительстве московского метрополитена: pikabu.ru/@Cat.Cat/saved/1368281
НУЛЕВЫЕ: pikabu.ru/@Cat.Cat/saved/1367639
НАШИ ДНИ - с 2010 по сегодняшний день: pikabu.ru/@Cat.Cat/saved/1368294
ВИДЕОИГРЫ: pikabu.ru/@Cat.Cat/saved/1368296
ПЕРВОАПРЕЛЬСКОЕ - шуточные статьи от авторов: pikabu.ru/@Cat.Cat/saved/1368391
ВНЕВРЕМЕННОЕ - то, что не удалось привязать ни к одному периоду: pikabu.ru/@Cat.Cat/saved/1367641
Бонус в комментариях.
Как-то так. И да, дорогой усатый и пушистый котан, если ты хочешь поддержать авторов материально - можно задонатить сотку на пиво/печеньки. Это дело абсолютно добровольное, авторы такое любят, но вполне себе спокойно пишут и без этого. Всех благ тебе, встретимся на страницах истории)
Твой @Cat.Cat.















![Живой список постов [НЕАКТУАЛЬНО]](https://cs12.pikabu.ru/post_img/2020/09/13/6/1599985678141945412.png)