Token Mentor
Регулярные выражения
Привет!
Предыдущая статья по регуляркам была скромной, и, как мне показалось из вопросов чата - толку в ней не было.
Поэтому мною было принято решение написать бОльший курс по регулярным выражениям, который бы не подтянул, а научил с нуля.
Для начала отвечу на основные обобщенные вопросы:
Что такое - регулярные выражения?
Регулярные выражения (англ. 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" - глобальный поиск (оператор ищет совпадение, после чего ищет еще совпадения)
Разберём примеры
! Расписывать что и как я сделал не буду, это очень долго и сложно. Для понятия чего и как внимательно смотрите на саму регулярку и указанные выше метасимволы !
- Из даного массива извлечь все числа.
Для приготовления обеда повару понадобилось 24 кг картошки, свеклы в 3 раза меньше, а лука в 2 раза меньше чем свеклы. Сколько килограмм лука потратил повар?
Решение: (\d+)
2. Вытащить из массива ответ.
1) 24 : 3 = 8
2) 8 : 2 = 4
Выражение: 24 : 8 : 2 = 4
Ответ: 4 кг.
Решение: Ответ:(.+)
Как вы могли заметить, нужный нам результат всегда вписывается в круглые скобки(!)
3. У нас есть массив ссылок вида domain.com, находящийся среди кучи лишнего текста. Задача - извлечь только ссылки.
fgfng domain.com dsckms3322 f sd facebook.com df4@@#%$% chatib.us df9)))/
telegram.com @#@%$%$/// http://suka.com fdfваывауа33№;№;%№%;
Решение: (\w+\.\w+)
4. Задача: извлечь с каждой строки только один из двух повторяющихся элементов
Решение: ([a-zA-Z0-9]+.+?)\s+\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
Объяснение: часть [http:\/\/|www.|https:\/\/| ]+ показывает, что результат начинается с одного из элементов (будь то www. или http://), часть [a-zA-Z0-9]+\.com показывает что продолжение результата - это набор букв и/или чисел, заканчивающимся .com, \s показывает что экранизатором результата будет любой пробельный символ.
6. Представим неидеальную ситуацию - имеем кусочек html документа (который по какой то причине нам необходимо пропарсить именно регуляркой). Извлечь надо содержимое.
<span class="site">facebook</span>
Решение: class=.+?>(.+?)<
7. Перед нами - кусочек письма с высланной ссылкой активации. Наша задача - извлечь ее динамическую часть.
Thanks for registration! Your activation link - http://facebook.com/hash=ghtbri4hfy5odfmjfk4yrhfnvchgjti5h4n/ . Valid only 24 hours.
Решение: условно представим что хеш имеет статическую длинну (проверить это можно отправив несколько ссылок активации и просто подсчитав длинну). итак, мы имеем динамический хеш со статической длинной в 35 символов.
hash=(.{35}?)\/
ПАРА ПОЛЕЗНЫХ РЕГУЛЯРОК КОТОРЫЕ СЭКОНОМЯТ ВРЕМЯ
([\s0-9\-\+\(\)]{10,23})
Эта решулярка вытащит вам любой номер телефона в любой записанной вариации
*
*
([\s\S]+)\s+\1
удалит любые дубли вида "дубль дубль"
На этом всё товарищи. Подобный материал очень затратный по времени написания, поэтому по возможности буду дополнять его.
Желаю вам удачи в добыче трафика!!!
ZennoPoster вы можете приобрести по этой ссылке - ТУТС
Всего доброго
Ваш Token Mentor
🙂
П.С. Не забывайте подписываться на наш Телеграмм канал. Если у вас остаются какие-либо вопросы, то задавайте их в комментариях к этой статье. Я постараюсь оперативно ответить на каждый вопрос.
💎Token Mentor: Telegram | Twitter | Обучающие статьи и Схемы | Чат (скоро)