[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Preg_match_all
Mihaz
День добрый.

$content = file_get_contents ("http://market.yandex.ru/index-full.xml");
$str= "/Каталог товаров\".*src=\"[^\"].+\">([^>]*)<\/a>/";
preg_match_all($str,$content,$array);
print_r($array);

Собственно хочу втыащить только названия категорий. Находит он первую строку где АВТО,МОТО, но дальше копирует слишком большой участок текста.
Как сделать правильно чтобы отпарсить эту страницу и вытащить только названия категорий. После уже разберусь думаю как вытащить и под категории.




Спустя 4 часа, 46 минут, 18 секунд (27.02.2011 - 17:10) Mihaz написал(а):
Что и помочь некому то ? Ведь есть же умные люди на форуме.

Спустя 25 минут, 36 секунд (27.02.2011 - 17:36) DedMorozzz написал(а):
preg_match_all('#Каталог товаров.*?>(.*?)</a>#',$text,$matches);

Спустя 3 часа, 35 минут, 3 секунды (27.02.2011 - 21:11) rustamx написал(а):
Чтобы не создавать новую тему. Из-за чего может подвиснуть preg_match?

Спустя 52 минуты, 26 секунд (27.02.2011 - 22:03) DedMorozzz написал(а):
таки создавай новую тему. Ибо данный вопрос отличается от вопроса ТС.

Спустя 1 час, 21 минута, 10 секунд (27.02.2011 - 23:24) FallEn написал(а):
Навскидку только это в голову приходит.
preg_match_all('#/i/duru.gif">(.*?)</a>#ismu',$file,$a); 
preg_match_all('#<div class="supcat">(.*?)hid=(.*?)">(.*?)</a>#ismu',$file,$b);

Криво и грубо,но миссию выполняет.

Спустя 6 минут, 22 секунды (27.02.2011 - 23:31) DedMorozzz написал(а):
FallEn зачем?
Выше указал решение. Вывод:
Цитата
Array ( [0] => Авто, мото [1] => Все для дома и дачи [2] => Компьютеры [3] => Музыка и видеофильмы [4] => Спортивные товары [5] => Телефоны [6] => Электроника и Фото [7] => Бытовая техника [8] => Все для офиса [9] => Мебель [10] => Подарки, сувениры, цветы [11] => Строительство и ремонт [12] => Товары для детей )

Полное выглядит так:
<?php
$text = file_get_contents ("http://market.yandex.ru/index-full.xml");
preg_match_all('#Каталог товаров.*?>(.*?)</a>#isu',$text,$matches);
print_r($matches[1])

Спустя 7 минут, 11 секунд (27.02.2011 - 23:38) FallEn написал(а):
DedMorozzz, у вас просто не все категории. Их больше 20.

Спустя 45 минут, 17 секунд (28.02.2011 - 00:23) DedMorozzz написал(а):
да нет же. Их ровно 13. По исходному коду погляди

Спустя 11 часов, 35 минут, 54 секунды (28.02.2011 - 11:59) Mihaz написал(а):
Большое всем спасибо. Вот только возник такой вопрос:


<?php
$text = file_get_contents ("http://market.yandex.ru/index-full.xml");
preg_match_all('#Каталог товаров.*?>(.*?)</a>#isu',$text,$matches);
print_r($matches[1])

Почему не экранирован слеш в теге </a>
Что означет # и #isu ??

Спустя 29 минут, 20 секунд (28.02.2011 - 12:28) DedMorozzz написал(а):
регулярное выражение должно ограничиваться символами. И это не обязательно / . Даже более того, лучше что бы не слэш это. Ибо слэш приходится часто экранировать. Для этого я как границы использую более универсальный символ - #. Его экранировать приходится крайне редко.
isu - модификаторы.
i - не важен регистр
s - точка включает в себя перенос строки
u - грит о том, что работаем с юникодом.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.