[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Preg_match_all() expects parameter 2 to be string,
maia666
Добрый день!

ошибка в коде

$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = preg_replace("/\s/", " ", $content); //убираем пробелы
$content = str_replace(array("\r","\n"), '', $content); //убираем перенос строки
$result = preg_match_all('/(?<=<div\sclass=\'ad-thumbs\'>)(.)*(?=<div\sclass="product_tab\svisible">)/s', $content, $matches);
//находим нужный блок и возвращаем его значение
echo $matches;


требует: preg_match_all() expects parameter 2 to be string, array given
в чем дело не пойму - по синтаксису функция верно описана..
Oyeme
Переведите текст ошибки.Вам дословно написали что не так.
SlavaFr
замени file на file_get_contents

_____________
↓↓↓↓↓↓↓↓↓↓
ответ может быть здесь
или в mysql_error();
maia666
переделала вот так:

$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = implode("\n\r", $content);
$result = htmlspecialchars ($content);
$result = preg_match_all('/(?<=<div\sclass=\'ad-thumbs\'>)(.)*(?=<div\sclass="product_tab\svisible">)/s', $result, $str);
echo $str;


тип переменной до рег.выражения string, выводит данные с html тегами... а вот результат возвращает после регул.выражения, цитирую: "Array"

не пойму работает ли рег. выражение, или я просто не верно вывожу данные...
maia666
переделала вывод так:
echo "<pre>";
print_r($str);
echo "</pre>";


выводит все равно пустой массив:
Array
(
[
0] => Array
(
)

[
1] => Array
(
)

)
rooor
Цитата
$content = file

у тебя в $content массив лежит
выше уже сказали - замени на file_get_contents
maia666
Цитата (rooor @ 3.07.2014 - 14:22)
Цитата
$content = file

у тебя в $content массив лежит
выше уже сказали - замени на file_get_contents

если вы внимательно посмотрите скрипт, вы увидите, что регулярное выражение должно вытаскивать содержимое от одного div блока до другого с определенными классами для дальнейшей работы с этим кодом.
При использовании функции file_get_contents получаемый файл скрывает html теги, тоже самое происходит и с функцией file при преобразовании массива в строку (функцией implode), поэтому я использую строку
$result = htmlspecialchars ($content);
выводим страницу с тегами и ее содержимое записываем в $result
далее при помощи регулярного выражения нужно обрезать страницу до нужного блока с кодом, по шаблону регулярного выражения. Ошибок в синтаксисе нет, значит оно просто не срабатывает, насколько я понимаю, попробую переписать его..

принципиальной разницы от замены file на file_get_contents я не увидела никакой..
rooor
всё равно не пойму зачем столько лишних телодвижений)
конечная цель какая? вытащить картинку?
maia666
да, только там 2 картинки.. одна маленького размера, вторая большого и класса и ид у тега img нет, есть только у див блоков. по тому же сценарию хочу таблицу вытаскивать, заключенную в див блок.. по-моему, есть 2 варианта - либо содержимое страницы слишком большое для проверки, либо не правильно написала регулярку...
вот выдержка из страницы с искомым блоком:

 ...<div style='padding:0 25px;border-bottom: 1px solid #D8D8D8;border-top: 1px solid
#D8D8D8; margin: 30px 0 0;'
> <div class='ad-nav'> <div class='ad-thumbs'> <ul class='ad-
thumb-list'
style='margin: 0'> <li> <a href="http://img.merlion.ru/items
/929443_v01_m.jpg"
><div> <img src="http://img.merlion.ru/items/929443_v01_s.jpg" alt='' />
</div></a> </li> </ul> </div> </div> </div> </div> <div
style='padding:0px 35px 8px 0px;
text-align:right; color:#909090'
> Крупные <a href="/catalog/product/929443/photolist
/"
>фотографии</a> на сайте MERLION </div> <div style="padding: 10px 35px 35px 35px;">
<div
class="product_tab visible">
Характеристики</div>...


регулярное выражение: '/(?<=<div\sclass=\'ad-thumbs\'>)(.)*(?=<div\sclass="product_tab\svisible">)/s'



я извиняюсь, просто уже столько раз пробовала менять с file на file_get_contents, что уже по фигу на лишнюю строку по переводу массива в строку.. )) особенно если результат не меняется..
rooor
я в регулярках не силён =)
$content = file_get_contents('http://www.merlion.com/catalog/product/929443/');
preg_match('#ad-thumbs.>(.+)<div>(.+)</div>#Us', $content, $str);
echo $str[2];
maia666
так тоже пустой массив) пойду мучить код..))
maia666
УРА!))

вот такой код:
$content = file('http://www.merlion.com/catalog/product/929443/'); //получаем стр
$content = implode("\n\r", $content);
$result = htmlspecialchars ($content);
$result = preg_match_all('/http:\/\/img.merlion.ru\/items(\/\d{6}_\w+\d*)_s.jpg/', $result, $str);
echo "<pre>";
print_r($str);
echo "</pre>";


возвращает
Array
(
[0] => Array
(
[0] => http://img.merlion.ru/items/929443_v01_s.jpg
)

[1] => Array
(
[0] => /929443_v01
)

)
rooor
$content = file_get_contents('http://www.merlion.com/catalog/product/929443/');
preg_match('/http:\/\/img.merlion.ru\/items(.+).jpg/Us', $content, $str);

вернёт то же самое =)
maia666
сдаюсь.. пример за гранью моего понимая... прошу помощи сильных умов этого форума =)

вот html

...<div style='padding:0 25px;border-bottom: 1px solid #D8D8D8;border-top: 1px solid
#D8D8D8; margin: 30px 0 0;'
> <div class='ad-nav'> <div class='ad-thumbs'> <ul class='ad-
thumb-list'
style='margin: 0'> <li> <a href="http://img.merlion.ru/items
/929443_v01_m.jpg"
><div> <img src="http://img.merlion.ru/items/929443_v01_s.jpg" alt='' />
</div></a> </li> </ul> </div> </div> </div> </div> <div
style='padding:0px 35px 8px 0px;
text-align:right; color:#909090'
> Крупные <a href="/catalog/product/929443/photolist
/"
>фотографии</a> на сайте MERLION </div> <div style="padding: 10px 35px 35px 35px;">
<div
class="product_tab visible">Характеристики</div>...


вот регулярное выражение:

'/<div\sclass=\'ad-nav\'>(.*)<div\sclass="product_tab\svisible">/siU'


ни фига не вытаскивает.. возвращает пустой результат.. в качестве модификаторов пробовала еще 'x' и 'u'.. безуспешно..

'/(?<=<div\sclass=\'ad-nav\'>)(.*)(?=<div\sclass="product_tab\svisible">)/siU'


мне кажется.. php почти безгранично всесилен.. слабо верится, что такой блок нельзя вытащить подобным выражением.. покажите, пожалуйста, что не так (или хоть намекните)
bestxp
ох года так4 наза я парсил и каталог, на заре своего программизма xD жаль у них нет Api и норм выгрузок
Быстрый ответ:

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