Regexp - шпаргалка по регулярным выражениям

Тема в разделе "Решение различных задач по парсингу", создана пользователем kagorec, 19 мар 2012.

  1. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Здраствуйте уважаемые пользователи многофункциональной программы (парсер) Content Downloader
    Прежде всего большое спасибо автору программы (Сергею) за дополнения функции регулярный выражений в программе.

    В данной теме будет приведено несколько готовых вариантов которые будут полезны при настройке проекта под любой сайт.

    В Content Downloader поддерживаются регулярные выражения где только можно (фильтр ссылок, сканер ссылок, в полях "поиск-замена", в макросах "поиск-замена", в фильтре и т.д.)
    Чтобы использовать в заменах, надо указывать начало с оператора "re:" и потом само рег.выражение.

    Вот несколько простых примеров применения рег. выражений:

    Код:
    re:([0-9]+)|<cifri>$1</cifri>
    таким способом мы отлавливаем цифры и в итоге выделяем их метками <cifri>

    Код:
    re:([а-яА-Я]+)|<rusbukvi>$1</rusbukvi> 
    таким способом мы отлавливаем только русские буквы и в итоге выделяем их метками <rusbukvi>

    Как видите использованы простые обозначения, давайте разберем:
    re: - это оператор, без него никак
    () - скобками мы выделили рег. выражение чтоб его значение вывести в переменную которая указывается доларром и цифрой (выше это было $1)
    [] - в квадратных скобках указывается значение (чуть ниже в скриншоте смотрите подробности) цифры 0-9 или англиские буквы a-z
    + - плюсик после закрывающеся квадратной скобку указывает что совпадение должно быть от одного и более

    Набор часто-используемых замен регулярными выражениями в Content Downloader:

    1.Сделать один пробел вместо - переносов строк и множественных табов/пробелов:
    Код:
    re:[\s\t\r\n]+| ''''
    '''|
    2. Убрать всякие кавычки и ненужные символы в предложении:
    Код:
    re:[^A-Za-z0-9 а-яА-Я\.\,\?\!\'\"]+|
    3. Множественные пробелы сделать как один пробел:
    Код:
    re:[ ]+| '''
    '''|
    4. В редакторе CSV файлов надо както отметить пустые ячейки, например добавим там DELETE123
    Код:
    re:^[.]{0}$|DELETE123
    5. Удалить отступы/пробелы/табы до и после
    Код:
    re:^[\s\t\r\n]*(.*?)[\s\t\r\n]*$|$1
    6. Картинкам очистить все параметры и оставить ссылку только на большую картинку (в статьях Wordpress)
    Код:
    re:<img[^<>]+srcset="[^<>"']+, http([^<>\s"]+) [^<>\s"]+"[^<>]+>|<img src="http$1" class="img-responsive" />
    Список пополняется ...

    Вот шпаргалка интересная - Ссылки недоступны для гостей

    [​IMG]
     
    Последнее редактирование: 16 ноя 2017
    dervish и AleXL нравится это.
  2. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Сбор всех e-mail со страницы

    re:[a-zA-Z0-9._-]+@[a-zA-Z0-9]+.[a-zA-Z]+(.[a-zA-Z]+)?|#1##$&#2## - ставим регулярку в "поиск замена для основного кода" и потом повторяющиеся границей собираем все майлы со страницы указав первую часть границы #1## а для второй части #2##
     
    Последнее редактирование: 16 окт 2012
  3. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Удалять все из текста кроме букв, цифр, пробела и черточки

    Удалять все из текста кроме букв, цифр, пробела и черточки
    в поле поиск-замена
    re:([^a-zа-яA-ZА-Я0-9\s-])|---$&***
    ---{skip}***|
     
    Последнее редактирование: 5 янв 2013
    Felix_b нравится это.
  4. nikolas1612

    nikolas1612 Member Пользователи

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    я извиняюсь, но в формуле могут быть ошибки? буква s означает пробельный символ только с обратным слэшем (\s).
    поэтому правильнее будет так -
    Код:
    re:([^a-zа-яA-ZА-Я0-9 -])|---$&***
    ---{skip}***| 
    или так
    Код:
    re:([^a-zа-яA-ZА-Я0-9\s-])|---$&***
    ---{skip}***| 
    а еще я не понял, зачем в этой задаче используется промежуточный "буфер". "вживую" не проверял, но, по логике, того же результата мы достигнем в один заход, так -
    Код:
    re:[^a-zа-яA-ZА-Я0-9 -]|
     
    Последнее редактирование: 5 янв 2013
    evgenij нравится это.
  5. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Уделение линков из текста

    Уделение линков из текста
    В "дополнтельные настройки границ" добавьте в нужной границе в поле "поиск-замена"
    PHP:
    re:((http://){sep}(https://))?([a-zA-Z_0-9-.]+\.[a-zA-Z]{2,5})(:\d+)?(/[~_.\-a-zA-Z0-9=&%@:]+)*\??[~_.\-a-zA-Z0-9=&%@:]*|#del1#$&#del2#
    #del1#{skip}#del2#|
    На всякий сучай если форумный движек порежет символы, тут делано и проверялось _http://regexr.com?33crl
     
  6. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Регуляркой выбираем название категории из мета description

    Попался интернет магазин со всякими шмотками женскими/мужскими/детскими/унисекс и это нигде в коде не фигурировало кроме мета description
    PHP:
    <meta name="keywords" content="Ambrosia Teardrop Dangle Chandelier Earrings, Nina, General Earring, Womens, Womens Jewelry" />
    Хорошо, выдрать можно значит отсюда))
    Границей выбираем содержимое и потом в "дополнительные настройки границ" этой гриницы в поле "поиск-замена" применим регулярки на совпадение/выборку пола
    PHP:
    re:(Unisex)|===$1---
    re:(Womens)|===$1---
    re:(Mens)|===$1---
    re:(Kids)|===$1---
    ==={
    get}---|{get}
    п.с. может выглядит чудно но главное работу свою делает правильно.
     
    Последнее редактирование: 13 фев 2013
    pomansur нравится это.
  7. nikolas1612

    nikolas1612 Member Пользователи

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    хех. хорошая тема. окажу-ка и я посильную помощь местному народонаселению ;)

    Код:
    [REPLACE(
    <!!222>|нунифигасебе
    re:<!!\d*>|
    )][FIRST_REPLACE(.|.<!![COUNT]>)][DOCSOURCE][/FIRST_REPLACE][/REPLACE]
    конструкция позволяет сделать нечто с N-ой повторяющейся частью текста. в данном конкретном случае текст "нунифигасебе" прописывается в исходном коде после 222-ой точки.

    решает вот эти, и похожие задачи -
    http://forum.sbfactory.ru/showthread.php?t=836
    http://forum.sbfactory.ru/showpost.php?p=3109&postcount=23

    P.S. решение не является единственным. по логике, такого же эффекта можно добиться повторяющейся (а то и обычной) границей. да и в самой формуле, при желании, можно обойтись без регулярок. это был формальный повод примазаться к славной теме Kagorec. ;)
     
    Последнее редактирование: 13 фев 2013
    Tigr нравится это.
  8. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Удаление излишних пробелов и табов

    Удаление излишних пробелов и табов (кавычки удалите если использовать будете)
    PHP:
    "re:([\t\s]{2,300})| "
     
  9. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    nikolas1612 в соседней теме предложил интересное и универсальное решение, когда внутри тегов есть повторные теги но зацепиться можно точно использовав регулярку. Редко но бывает, что стандарт решениями нельзя.
     
  10. duksa

    duksa New Member Пользователи

    Регистрация:
    27 июн 2012
    Сообщения:
    15
    Ребят кто подскажет, как взять только первую букву из спарсенного текста?
     
  11. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Сначало удалим из начала возможные пробелы или символ табуляции
    Теперь строкой ниже в поиск-замена подставим следующую регулярку, которая берет первую букву
    Третьей строкой из своих меток выбираем первую букву/цифру
     
  12. biohan

    biohan New Member Пользователи

    Регистрация:
    21 мар 2013
    Сообщения:
    6
    подскажите выражение, чтобы поднять регистр всех букв
     
  13. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Как удалить окончание строки от определенного символа или тега

    Удалить оконцовку строки от ковычки >
    Удалить оконцовку строки от ковычки > с указанием интервала символов 5-9
    Удалить оконцовку от тега <br>
    Удалить оконцовку от тега <br> с указанием интервала символов 7-15
    -------------
    в шаблоне вывода есть специальный макрос [REGUPALL]парсинг КоНтеНТА в cd[/REGUPALL]
    и получится: "ПАРСИНГ КОНТЕНТА В CD"
     
    Последнее редактирование: 24 апр 2013
  14. Love-world

    Love-world Member Пользователи

    Регистрация:
    19 июл 2013
    Сообщения:
    102
    Почему в программе не работают регулярки с поиском по условию, например:
    (?(?=Вася)Вася|Петя)
    В частности есть сложные конструкции, которые работают в Ссылки недоступны для гостей, а в программе нет.
     
  15. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    разделитель | если есть в самой регулярке то смените на {sep}
    (?(?=Вася)Вася{sep}Петя)|..
     
  16. Love-world

    Love-world Member Пользователи

    Регистрация:
    19 июл 2013
    Сообщения:
    102
    Именно это я и делал, вот пример ошибки которую выдает программа

    А вот пример регулярок, что я использую Ссылки недоступны для гостей или более масштабный вариант Ссылки недоступны для гостей


    Все "|"заменены на "{sep}"


    Использую приведенные регулярки в csv редакторе
     
    Последнее редактирование: 11 сен 2013
  17. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.429
    Адрес:
    Latvia
    Еще как вариант подключить php скрипт которому отдавать на обработку часть кода и там творить шедевры из регулярок чтоб была независимость от cd
    Примеры использования и описание:
    Ссылки недоступны для гостей
    Ссылки недоступны для гостей перевод на русский
     
    Последнее редактирование: 12 сен 2013
  18. Love-world

    Love-world Member Пользователи

    Регистрация:
    19 июл 2013
    Сообщения:
    102
    Может тогда поможете?! Напишите пример сюда.
     
  19. nikolas1612

    nikolas1612 Member Пользователи

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    эти варианты в CD нерабочие.
    то, что регулярка работает на указанном вами ресурсе - не означает, что она будет работать на СД, в нем поуже арсенал. конкретно в вашем случае - нерабочая та часть регулярки, которая отвечает за обратный просмотр. RegExp модуль CD такую конструкцию не поддерживает.
     
  20. Love-world

    Love-world Member Пользователи

    Регистрация:
    19 июл 2013
    Сообщения:
    102
    Спасибо за толковое разъяснение, я примерно так и думал. Ну теперь все понятно. И что же тогда делать?! Можно ли как-нибудь подружить CD с более "продвинутой" версией RegExp? Если php, то может скинете сюда пример, думаю многим будет полезно.
     

Поделиться этой страницей