Помогите с регулярным выражением

Статус
В этой теме нельзя размещать новые ответы.

Tima111

Читатель
Заблокирован
Регистрация
5 Июл 2007
Сообщения
218
Реакции
488
  • Автор темы
  • Заблокирован
  • #1
Всем привет. Прошу помочь составить регулярное выражение, чтобы его смысл не изменился. У самого не получается, уже испробовал разные варианты. Ещё не понимаю что значит конструкция (?: )

Вот код для отладки:
PHP:
<?php
$str=file_get_contents('http://market.yandex.ru/guru.xml?hid=294661&CMD=-RR=0,0,0,0-PF=1801946%2BEQ%2Bsel%2B6715129-VIS=201E2-CAT_ID=971072-BPOS=10-EXC=1-PG=10&greed_mode=false');
$pattern = '/<h3 class="b-offers__title"><a [a-zA-Z0-9\-\=\"]{0,} class="b-offers__name" href="(.*)">(.*)<\/a>(?:<sup class="b-offers__new">новинка<\/sup>|)(?:<span class="b-rating b-rating_type_10 b-rating_type_model">.*<\/span>|)<\/h3><div class="b-offers__price">(.*)<\/div><p class="b-offers__spec">(.*)<\/p>/sU';
preg_match_all($pattern,$str,$test);
print_R($test);
?>

Раньше работало, сейчас не работает, т.к. код маркета изменился. Нужно сделать так чтобы структура вывода оставалась прежней...
 
У тебя скрипт ищет новинки
PHP:
(?:<sup class="b-offers__new">новинка<\/sup>|)
На той странице, которая загружается, таковых нет.
Уточни, что именно ты хочешь спарсить?
 
  • Автор темы
  • Заблокирован
  • #3
latteo, спасибо что отозвался :)
Скрипт не мой, не знаю где искать автора... Скрипт перестал работать и мне нужно восстановить его работоспособность.
Не работает регулярное выражение. Комментарий к этому регулярному выражению:
PHP:
 //шаблон для получения названия товара и ссылки на подробное описание и краткого описания товара

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

Может эта конструкция (?: ) значит необязательное нахождение на странице?
 
Попробуй
PHP:
$pattern = '/<h3 class="b-offers__title"><a [a-zA-Z0-9\-\=\"]{0,} class="b-offers__name" href="(.*)">(.*)<\/a>(?:<sup class="b-offers__new">новинка<\/sup>|)(?:<span class="b-rating b-rating_type_10 b-rating_type_model" title=".*">.*<\/span>|)<\/h3><div class="b-offers__price">(.*)<\/div><p class="b-offers__spec">(.*)<\/p>/sU';

Может эта конструкция (?: ) значит необязательное нахождение на странице?
Ага, это я выше не совсем разобрался.
 
  • Автор темы
  • Заблокирован
  • #5
latteo, спасибо, в коде для отладки работает. Правда не знаю какая структура вывода должна быть, т.е. как они должны по порядку идти... Нумерация массивов...
Если добавилось title=".*" нумерация массива ведь может нарушиться.
Спасибо за помощь, попробую дальше своими силами :)
 
Нумерация добаится, если написать в скобочках title="(.*)"
Так что должно все работать.
 
Может эта конструкция (?: ) значит необязательное нахождение на странице?
Нет
(?: ) - группирует в один паттерн, как и ( ), но не запоминает его.
Пример: (1)( ?:2)(3) запомнит 1-ю и 3-ю группу.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху