Краткий гайд по регуляркам

Примечание: Создавать и проверять регулярное выражение рекомендуется на сайте: https://regex101.com.

^ - начало строки. использовать перед выражением. после этого символа идет начало строки

$ - перед этим пишем то, что должно быть в конце

\ - экранирование. это если нужно спецсимволы искать.
к таким относится:
. + - ? [ ] ( ) * \ | ~ ^ $

. - любой символ
+ - может повториться еще сколько угодно раз
* - может повториться еще сколько угодно раз или отсутствовать
? - повторяется 0 или 1 раз. Но может иметь и другое значение в использовании в комбинации с некоторыми символами.

| - логическое ИЛИ. Может использоваться как для всего выражения так и для какого-то слова. если для слова, то варианты можно взять в скобки: ()
Пример: Кинуть (бананом|ананасом)

Для начала этого с головой хватит!

НО если хочется пойти дальше

то можно знать что есть еще квадратные скобки:
[ ] - внутри особенный синтаксис. Тут записывается либо символ, который нужно найти. либо диапазон. Ниже пишу распространенные диапазоны:
0-9 - любая цифра.
a-z - любая буква не наша
а-я - любая буква кириллица
{ } — количество повторений:
{n} — повторяется n раз, {m,n} — повторяется от m до n раз, {m,} - повторяется не менее m раз, {,n} — повторяется не более n раз.

() — группа для получения внутренней подстроки в поисковой фразе. Более подробно

Можно еще разные регистры типа: a-Z или A-Z, но конкретно Автопилот не учитывает регистр.

также стоит знать, что большинство символов внутри квадр. скобок не экранируются

Также стоит знать, что есть некоторые доп. варианты записи разных типов символов. Например:

  • \d — любая цифра.
  • \s — пробел.
  • s — любой символ включая переносы строк.
  • \w — цифробуквенный символ или знак _.

___________
Дальше открываем эту замечательную штуку: https://regex101.com/
и играемся / тестим! С подсветками, блэкджеком и подтанцовкой :)
_________

Пара примеров:

^вася
Начинается с вася.
пример ДА: Вася, ты куда?
пример НЕТ: Эй, Вася, ты куда?

вася$
Заканчивается на ВАСЯ.
пример ДА: тут был вася
пример НЕТ: тут был вася!!!

\[id[0-9]+\|.+\]
Найдет подстроку, начинающуюся с [id, потом любая цифра [0-9] сколько угодно раз +, после нее |, после этого «любой символ» . «сколько угодно раз» + до ]
пример ДА: @id12345 (вася)
пример НЕТ: [12345|вася]

(@id\d+?).+(https:\/\/|vk\.com\/)
содержит «подстроку», начинающуюся с @id потом любая цифра \d сколько угодно раз +, пока не закончатся цифры ?) дальше любой символ . сколько угодно раз + и ссылка на любой сайт или на ВК (https:\/\/|vk\.com\/). Скобки тут для отдельного выражения и разных вариантов ссылок соответственно.

Примеры количеств:
\w{5} — от 5 цифробукв; \d{8,10} — от 8 до 10 цифр;
(ворона|галка){2} —2 слова («ворона» или «галка») подряд.

Не содержит

Покажу просто на примере ключевых слов: слово1 и слово 2. Остальная логика должна быть понятна.

  • ^(?!(слово1|слово 2)) — не содержит ни одну из указанных фраз.
  • ^(?!(^слово1$|^слово 2$)) — не равно ни одной из указанных фраз.

Думаю что уже очевидно, что все что должно НЕ содержаться достаточно просто указывать внутри такой конструкции: ^(?!(___)) (вместо подчеркиваний __ ). А там внутри по сути такие же привычные нам регулярки.

Другие примеры

(для практического использования):

  • \d{2}.\d{2}.\d{4} —простой вариант распознавания даты
  • (0[1-9]|[12][0-9]|3[01])[- .]+(0[1-9]|1[012])[- .]+(19|20)\d\d — продвинутый вариант распознавания даты. С проверкой на правильность и разными вариантами написания:
    14-04-2019, 14 - 04 - 2019, 14. 04. 2019 и т. п..
  • (0[1-9]|[12][0-9]|3[01])[- .](январ(?:я)?|феврал(?:я)?|март(?:а)?|апрел(?:я)?|ма(?:я)?|июн(?:я)?|июл(?:я)?|август(?:а)?|сентябр(?:я)?|октябр(?:я)?|ноябр(?:я)?|декабр(?:я)?|0[1-9]|1[0-2])[- .](\d{2}|\d{4})

Пояснение:

  • (0[1-9]|[12][0-9]|3[01]) — день от 01 до 31.
  • [- .] — любой разделитель.
  • (январ(?:я)?|феврал(?:я)?|март(?:а)?|апрел(?:я)?|ма(?:я)?|июн(?:я)?|июл(?:я)?|август(?:а)?|сентябр(?:я)?|октябр(?:я)?|ноябр(?:я)?|декабр(?:я)?|0[1-9]|1[0-2])— месяц в именительном или родительном падеже. Используем (?:я)?, чтобы указать, что окончание "я" может быть опционально для слов в родительном падеже.
  • [- .] — любой разделитель.
  • (\d{2}|\d{4}) — год, состоящий из двух или четырех цифр
  • ([1][1-9])|([2-8][0-9])) — числа от 11 до 89 ;-)
  • ^б([1-9]\d{0,2}|[1-4]\d{3}|5000)$ — реагируем на Б и число от 1 до 5000, например, б1, Б5000

Больше примеров (например, регулярки для номеров телефонов) в этой статье: → vk.com/@skyautome-regexp

3153 views·52 shares