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

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

  1. Min-Z-Drav

    Min-Z-Drav New Member Пользователи

    Регистрация:
    14 янв 2015
    Сообщения:
    32
    Шикарно, работает! Большое спасибо!
     
  2. Dreadnought

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

    Регистрация:
    7 май 2013
    Сообщения:
    31
    Добрый день.
    Нужно спарсить ссылки на товары в одном иностранном интернет магазине.
    Ссылка на товары имеет абсолютный вид (ЧПУ), то есть:
    somesite.com/категория1/категория2/и.т.д(любое количество вложенности категорий)/числовой id товара в дб(строго 5 цифр)/название самого товара
    Подскажите пожалуйста регулярку для сбора всех ссылок, что имеют такой вид.
    Проблема в том, что если задавать границы парсинга, получается очень много мусора, но ссылки на товары имеют в своем URL от / до / всегда именно 5 цифр.
    Как понимаю я, регулярка должна вылавливать все ссылки, в которых есть 5 цифр подряд между двумя слешами /
    Заранее спасибо за помощь.
     
  3. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    В личку пришлите пару ссылок товара если так постеснялись указать. )
    п.с. желательно "живой" пример, а не описание словами.
    ---
    В фильтре ссылок поддерживаются регулярные выражения, воспользуемся и укажем следующее:
    Код:
    http://www.sayt.com/
    re:/[\d]+/[^/]+
    и отметить галочку сверху "и/или"
     
    Последнее редактирование: 26 фев 2015
  4. Dreadnought

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

    Регистрация:
    7 май 2013
    Сообщения:
    31
    Регулярка работает превосходно, за исключением одного но, написал о нем Вам в личку.
     
  5. golf4man

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

    Регистрация:
    9 мар 2013
    Сообщения:
    13
    Друзья, а не подскажете, при помощи какого регулярного выражения можно очистить атрибуты тега <a>?

    Т.е. сейчас в коде находится такая строка:

    <a href="http://termo.ru/profile/genesis33/" id="class" class="user_login">

    мне нужно получить:

    <a href="http://termo.ru/profile/genesis33/">

    Поиск работает по такой регулярке: <a\s[^>]*href=["'][^"'](.*?)[^"']*["'][^>]*>, а вот с заменой что-то никак не соображу. Подскажите пожалуйста.

    Спасибо.
     
  6. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Зачем так сложно?
    Код:
    <a href="{skip}">|<a href="http://termo.ru/profile/genesis33/">
     
  7. golf4man

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

    Регистрация:
    9 мар 2013
    Сообщения:
    13
    Видимо не слишком удачный пример, урлы могут быть разные:

    - <a href="http://termo.ru/profile/genesis33/" id="class" class="user_login">
    - <a href="http://pnevmo.ru/profile/genesis33/" id="hh" class="t">
    - и т.д.
     
  8. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    Здраствуйте
    Для вашей задачи "очистить атрибуты тега a" подойдет такое регулярное выражение:
    HTML:
    re:<a([^<>]+)href="([^"]+)"([^<>]*)>|<a href="$2">
    re:<a([^<>]+)href='([^']+)'([^<>]*)>|<a href="$2">
     
  9. golf4man

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

    Регистрация:
    9 мар 2013
    Сообщения:
    13
    Огромное спасибо Вам!
     
  10. golf4man

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

    Регистрация:
    9 мар 2013
    Сообщения:
    13
    Друзья, возник следующий вопрос по регулярке. Нужно из строки (которая находится в <CD_GRAN_1!>) вычленить только первый символ.

    Использую такую регулярку: re:^(.)(.*)$|$1

    В notepad++ все работает, в программе не хочет. Возможно я неверно указываю макрос замены:
    [FIRST_REPLACE(re:^(.)(.*)$|$1)][/FIRST_REPLACE]<CD_GRAN_1!>

    Подскажите пожалуйста. Заранее спасибо!
     
  11. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    Макрос [REGUPFIRST]
    Если особая задача, тогда пример выводимого контента в границе предоставьте
     
    Последнее редактирование: 8 апр 2015
  12. golf4man

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

    Регистрация:
    9 мар 2013
    Сообщения:
    13
    А там могут быть такие значения:

    123
    Hello, world!
    Привет!
    и др.

    Соответственно нужно получать:
    1
    H
    П
     
  13. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    Код:
    re:^([\d\w]{1})|$1@@@
    @@@{skip}|
     
    Последнее редактирование: 8 апр 2015
  14. nikolas1612

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

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    не могу победить такую задачу:
    предположим в тексте встречаются несколько десятков аббревиатур каждая из которых состоит из 3-х заглавных букв. надо в тексте найти и отметить (как угодно - добавлением текста, тегов - без разницы) ПЕРВОЕ ВХОЖДЕНИЕ каждой аббревиатуры.

    Устраивает любой вариант - включая последовательный конвейер из замен.
    Заранее благодарен за любую помощь.
     
    Последнее редактирование: 11 май 2015
  15. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    Приведите пример пожалуйста участок кода или ссылкой на страницу.
    Предпологаю что можно так подхватить, в глобальной замене (сочетание клавишь shift+ctrl+r)
    Код:
    re:([A-ZА-Я]{3})|<nado>$1</nado>
     
    Последнее редактирование: 11 май 2015
  16. nikolas1612

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

    Регистрация:
    27 ноя 2011
    Сообщения:
    439
    нет страницы, нет кода. более того, прямой связи с CD тоже нет. связь только с регулярками. если найти формулу или их последовательнсоть - то дальше без разницы, какой софт использовать.

    нужно, чтобы в произвольном тексте выделялись ПЕРВЫЕ ВХОЖДЕНИЯ текста, соответствующего определенному шаблону.
    приведенный вариант выделяет все сразу. это не то.
    поясню. предположим в тексте есть несколько аббревиатур "ГНК", а еще есть несколько "ПВС", а еще есть "ТЛМ" и еще пару десятков. Надо, чтобы регулярка нашла первый (!! и только его) "ГНК", первый "ПВС", первый "ТЛМ" и т.д.

    P.S. Уважаемый Кагорец, я знаю регулярки. Задача намного мудренее чем кажется на первый взгляд. ;) как проверить, что искомый кусок текста, найденный регуляркой, ранее не встречался?
     
  17. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    Не сомневался что знаете, давненько вас не видел на форуме.)
    Код:
    ^(.*?)([A-ZА-Я]{3})(.*)$|$1<nado>$2</nado>$3
    Вместо ([A-ZА-Я]{3}) можно указывать отдельные (ГНК), (ПВС), (ТДМ) и т.д.
    
    п.с. Должно подойти для не страницы, не текста, не программы)))
     
  18. micol

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

    Регистрация:
    25 фев 2015
    Сообщения:
    7
    Есть у кого мысли как из этого

    Код:
    <h3>Серия модели</h3><tr>	<td>Серия</td>	<td>Фабрика печати</td>	</tr>	<h3>Тип принтера</h3><tr>	<td>Тип принтера</td>	<td>струйный цветной</td>	</tr><tr>	<td>Тип цветной печати</td>	<td>4-х цветная</td>	</tr>	<h3>Разрешение</h3><tr>	<td>Макс. разреш. фотопечати</td>	<td>5760х1440 т/д</td>	</tr>	<h3>Область печати</h3><tr>	<td>Макс. размер бумаги</td>	<td>А4</td>	</tr>	<h3>Скорость печати</h3><tr>	<td>Скорость печати текста до</td>	<td>27 стр/мин</td>	</tr><tr>	<td>Полностраничная цв. печать до</td>	<td>15 стр/мин</td>	</tr><tr>	<td>Скорость печати фото 10x15 до</td>	<td>69 сек</td>	</tr>	<h3>Встроенный копир</h3><tr>	<td>Копирование без компьютера</td>	<td>Да</td>	</tr>	<h3>Встроенный сканер</h3><tr>	<td>Область сканирования</td>	<td>А4</td>	</tr><tr>	<td>Оптическое разреш. сканера</td>	<td>600x1200 т/д</td>	</tr>	<h3>Лоток для подачи бумаги</h3><tr>	<td>Лоток для подачи бумаги</td>	<td>до 100 листов</td>	</tr>	<h3>Совместимость</h3><tr>	<td>Работа под Windows</td>	<td>XP, Vista, Windows 7</td>	</tr>	<h3>Интерфейсы</h3><tr>	<td>Интерфейс связи с ПК</td>	<td>USB 2.0</td>	</tr>	<h3>Комплектация</h3><tr>	<td>Картриджей в комплекте</td>	<td>4</td>	</tr><tr>	<td>Кабель USB</td>	<td>доп.опция</td>	</tr><tr>	<td>Программное обеспечение</td>	<td>в комплекте</td>	</tr>	<h3>Электропитание</h3><tr>	<td>Потребляемая мощность</td>	<td>13 Вт</td>	</tr>	<h3>Цвет, размеры и вес</h3><tr>	<td>Цвет</td>	<td>черный</td>	</tr><tr>	<td>Габаритные размеры (В*Ш*Г)</td>	<td>15*48*30 см</td>	</tr><tr>	<td>Вес</td>	<td>4.4 кг</td>	</tr>	<h3>Основные характеристики</h3><tr>	<td>Краткое описание</td>	<td>струйный цветной-5760х1440 т/д-USB 2.0-4.4кг</td>	</tr><tr>	<td>Страна</td>	<td>Филиппины</td>	</tr><tr>	<td>Гарантия</td>	<td>12 мес. или 15 000 отпечатков</td>	</tr><tr>	<td>Вид гарантии</td>	<td>гарантийный талон</td>	</tr><tr>	<td>Контейнеры с чернилами серии T664* (C13T664*4A)</td>	<td></td>	</tr><tr>	<td>Высота</td>	<td>15 см</td>	</tr><tr>	<td>Ширина</td>	<td>48 см</td>	</tr><tr>	<td>Глубина</td>	<td>30 см</td>	</tr>	<h3>Служебная информация</h3><tr>	<td>Базовый цвет</td>	<td>черный</td>	</tr>
    сделать такое:
    Код:
    (Серия модели) Серия: E[Фабрика печати];(Тип принтера) Тип принтера: E[струйный цветной];(Тип принтера) Тип цветной печати: E[4-х цветная];(Разрешение) Макс. разреш. фотопечати: E[5760х1440 т/д];(Область печати) Макс. размер бумаги: E[А4];(Скорость печати) Скорость печати текста до: E[27 стр/мин];(Скорость печати) Полностраничная цв. печать до: E[15 стр/мин];(Скорость печати) Скорость печати фото 10x15 до: E[69 сек];(Встроенный копир) Копирование без компьютера: E[Да];(Встроенный сканер) Область сканирования: E[А4];(Встроенный сканер) Оптическое разреш. сканера: E[600x1200 т/д];(Лоток для подачи бумаги) Лоток для подачи бумаги: E[до 100 листов];(Совместимость) Работа под Windows: E[XP, Vista, Windows 7];(Интерфейсы) Интерфейс связи с ПК: E[USB 2.0];(Комплектация) Картриджей в комплекте: E[4];(Комплектация) Кабель USB: E[доп.опция];(Комплектация) Программное обеспечение: E[в комплекте];(Электропитание) Потребляемая мощность: E[13 Вт];(Цвет, размеры и вес) Цвет: E[черный];(Цвет, размеры и вес) Габаритные размеры (В*Ш*Г): E[15*48*30 см];(Цвет, размеры и вес) Вес: E[4.4 кг];(Основные характеристики) Краткое описание: E[струйный цветной-5760х1440 т/д-USB 2.0-4.4кг];(Основные характеристики) Страна: E[Филиппины];(Основные характеристики) Гарантия: E[12 мес. или 15 000 отпечатков];(Основные характеристики) Вид гарантии: E[гарантийный талон];(Основные характеристики);(Основные характеристики) Высота: E[15 см];(Основные характеристики) Ширина: E[48 см];(Основные характеристики) Глубина: E[30 см];(Служебная информация) Базовый цвет: E[черный];

    REPLACE-ом таким
    Код:
    	|
    <h3>|(
    </h3>|)
    <tr><td>| 
    </td><td>|: E[
    </td></tr>|];
    
    получаю

    Код:
    (Серия модели) Серия: E[Фабрика печати];(Тип принтера) Тип принтера: E[струйный цветной]; Тип цветной печати: E[4-х цветная];(Разрешение) Макс. разреш. фотопечати: E[5760х1440 т/д];(Область печати) Макс. размер бумаги: E[А4];(Скорость печати) Скорость печати текста до: E[27 стр/мин]; Полностраничная цв. печать до: E[15 стр/мин]; Скорость печати фото 10x15 до: E[69 сек];(Встроенный копир) Копирование без компьютера: E[Да];(Встроенный сканер) Область сканирования: E[А4]; Оптическое разреш. сканера: E[600x1200 т/д];(Лоток для подачи бумаги) Лоток для подачи бумаги: E[до 100 листов];(Совместимость) Работа под Windows: E[XP, Vista, Windows 7];(Интерфейсы) Интерфейс связи с ПК: E[USB 2.0];(Комплектация) Картриджей в комплекте: E[4]; Кабель USB: E[доп.опция]; Программное обеспечение: E[в комплекте];(Электропитание) Потребляемая мощность: E[13 Вт];(Цвет, размеры и вес) Цвет: E[черный]; Габаритные размеры (В*Ш*Г): E[15*48*30 см]; Вес: E[4.4 кг];(Основные характеристики) Краткое описание: E[струйный цветной-5760х1440 т/д-USB 2.0-4.4кг]; Страна: E[Филиппины]; Гарантия: E[12 мес. или 15 000 отпечатков]; Вид гарантии: E[гарантийный талон]; Контейнеры с чернилами серии T664* (C13T664*4A): E[]; Высота: E[15 см]; Ширина: E[48 см]; Глубина: E[30 см];(Служебная информация) Базовый цвет: E[черный];
    Но не совсем по феншую... надо:
    Код:
    (Group name) Feature name: Feature type[Feature value];(Group name) Feature name: Feature type[Feature value]....(Group name) Feature name: Feature type[Feature value]
    Пы.сы: чую пошлют на три буквы... php
     
    Последнее редактирование: 15 май 2015
  19. kagorec

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

    Регистрация:
    3 янв 2011
    Сообщения:
    4.431
    Адрес:
    Latvia
    Обратите внмание на специальнй макрос DYNAMICVALUE , с GROUPNAME Ссылки недоступны для гостей
     
  20. micol

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

    Регистрация:
    25 фев 2015
    Сообщения:
    7
    это первое на что я обращал внимание.
    К сожалению надо вывод в одну ячейку...
     

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