Token Mentor
Token Mentor
Всё о крипте. Гайды, инсайды, тестнеты и обзоры проектов. Один из самых компетентных каналов по крипте СНГ Телеграм канал - t.me/TokenMentor
Читать 5 минут

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

Привет!

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

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

Для начала отвечу на основные обобщенные вопросы:

Что такое - регулярные выражения?

Регулярные выражения (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов. Для поиска используется строка-образец, состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.

Это то, что нам говорит википедия.

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

Что можно ими делать?

В целом что угодно. Найдя нужные совпадения по тексту, можно как извлечь результаты, провести форматирование текста (например, удаление совпадений), так и добавить нужные символы/знаки/строки - короче регулярки умеют всё :)

Звучит интересно, но нужно ли это мне?

Если есть желание развить свои навыки автоматизации чуть более уровня ноксов - нужно.

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

Страшными и непонятными они только выглядят, небольшая теория и практика сделают своё дело.

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

"\n" - новая строка

"\r" - абзац

"\t" - табуляция

"[abc]" - все заключенные символы

"[^abc]" - все символы кроме заключенных

1. "[a-z]" 2."[A-Z]" 3."[0-9]" 4."[a-zA-Z0-9]" - любой буквенный маленький (1), большой (2), любой число (3) или любой маленький, большой или числовой символ(4)

"[^a-z]" - любой символ не попадающий в промежуток a-z

"." - любой(!) символ

"\s" - любой пробельный символ (пробел, перенос строки, табуляция)

"\S" - любой НЕпробельный символ (число, знак, буква)

"\d" - любое число

"\D" - любое НЕчисло

"\w" - любая буква, число или символ нижнего подчёркивания (можно отобразить как [a-zA-Z0-9_] )

"\W" - любой символ, который не является буквой, числом или символом нижнего подчеркивания

"\K" - позиция начала работы регулярного выражения

"(?=...)" - указывает на соответствие подшаблона шаблону

"(?!...)" - указывает на несоответствие подшаблона шаблону

Следующие примеры будут показаны на букве A

"A?" - одно или ни одного совпадения элемента

"А*" - ни одного или более совпадений элемента

"А+" - одно или более совпадений элемента

"А{3}" - три совпадения элемента

"А{3,}" - три или более совпадений элемента

"А{3,6}" - от 3 до 6 совпадений элемента (включительно 3 и 6)

"А*?" - ленивый квантификатор, ищет как можно меньше совпадений

"А*+" - активный квантификатор, ищет все совпадения (даже если одно совпадение находится внутри другого)

"\G" - указывает начало поиска совпадений (используется в массиве) [...|\G]

"^" - начало строки (любой в которой есть совпадение)

"$" - конец строки (любой в которой есть совпадение)

"\A" - начало строки (конкретной)

"\Z" - конец строки (конкретной)

"\z" - конец документа (абсолютный конец)

"g" - глобальный поиск (оператор ищет совпадение, после чего ищет еще совпадения)

Разберём примеры

! Расписывать что и как я сделал не буду, это очень долго и сложно. Для понятия чего и как внимательно смотрите на саму регулярку и указанные выше метасимволы !

  1. Из даного массива извлечь все числа.

Для приготовления обеда повару понадобилось 24 кг картошки, свеклы в 3 раза меньше, а лука в 2 раза меньше чем свеклы. Сколько килограмм лука потратил повар?

Решение: (\d+)

Image for post
https://regex101.com/r/LDAzVv/1

2. Вытащить из массива ответ.

1) 24 : 3 = 8

2) 8 : 2 = 4

Выражение: 24 : 8 : 2 = 4

Ответ: 4 кг.

Решение: Ответ:(.+)

Image for post
https://regex101.com/r/OqTLQE/1

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

3. У нас есть массив ссылок вида domain.com, находящийся среди кучи лишнего текста. Задача - извлечь только ссылки.

fgfng domain.com dsckms3322 f sd facebook.com df4@@#%$% chatib.us df9)))/

telegram.com @#@%$%$/// http://suka.com fdfваывауа33№;№;%№%;

Решение: (\w+\.\w+)

Image for post
https://regex101.com/r/RRRdpm/1

4. Задача: извлечь с каждой строки только один из двух повторяющихся элементов

Решение: ([a-zA-Z0-9]+.+?)\s+\1

Image for post
https://regex101.com/r/5NtiiW/1

5. Задача: извлечь все ссылки с доменным именем .com с массива

http://facebook.com www.facebook.com facebook.com http://vk.com www.vk.com vk.com , vk.ru suka.com @@@@@ mtt.com http://suka.com https://suka.com ap.ru www.dre.fun regex101.com http://telegra.ph

Решение: ([http:\/\/|www.|https:\/\/| ]+[a-zA-Z0-9]+\.com)\s

Image for post
https://regex101.com/r/dg4Xir/1

Объяснение: часть [http:\/\/|www.|https:\/\/| ]+ показывает, что результат начинается с одного из элементов (будь то www. или http://), часть [a-zA-Z0-9]+\.com показывает что продолжение результата - это набор букв и/или чисел, заканчивающимся .com, \s показывает что экранизатором результата будет любой пробельный символ.

6. Представим неидеальную ситуацию - имеем кусочек html документа (который по какой то причине нам необходимо пропарсить именно регуляркой). Извлечь надо содержимое.

<span class="site">facebook</span>

Решение: class=.+?>(.+?)<

Image for post

7. Перед нами - кусочек письма с высланной ссылкой активации. Наша задача - извлечь ее динамическую часть.

Thanks for registration! Your activation link - http://facebook.com/hash=ghtbri4hfy5odfmjfk4yrhfnvchgjti5h4n/ . Valid only 24 hours.

Решение: условно представим что хеш имеет статическую длинну (проверить это можно отправив несколько ссылок активации и просто подсчитав длинну). итак, мы имеем динамический хеш со статической длинной в 35 символов.

hash=(.{35}?)\/

Image for post
https://regex101.com/r/ohrT8z/1

ПАРА ПОЛЕЗНЫХ РЕГУЛЯРОК КОТОРЫЕ СЭКОНОМЯТ ВРЕМЯ

([\s0-9\-\+\(\)]{10,23})

Эта решулярка вытащит вам любой номер телефона в любой записанной вариации

*

*

([\s\S]+)\s+\1

удалит любые дубли вида "дубль дубль"

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

Желаю вам удачи в добыче трафика!!!

ZennoPoster вы можете приобрести по этой ссылке - ТУТС

Всего доброго

Ваш Token Mentor

🙂

П.С. Не забывайте подписываться на наш Телеграмм канал. Если у вас остаются какие-либо вопросы, то задавайте их в комментариях к этой статье. Я постараюсь оперативно ответить на каждый вопрос.

💎Token Mentor: Telegram | Twitter | Обучающие статьи и Схемы | Чат (скоро)

46 просмотров
Добавить
Еще
Token Mentor
Всё о крипте. Гайды, инсайды, тестнеты и обзоры проектов. Один из самых компетентных каналов по крипте СНГ Телеграм канал - t.me/TokenMentor
Подписаться