Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: парсинг результата в переменной

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: не получается отпарсить результат парсинга
belousov
Отправлено: 18 Марта, 2010 - 13:27:39
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




через curl получаю страничку, состоит из кучи таблиц,
делаю так:
PHP:
скопировать код в буфер обмена
  1. preg_match_all ("/(?<=alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>)(.*)(?=alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>)/isU", $content, $matches, PREG_SET_ORDER);

получаю:
CODE (html):
скопировать код в буфер обмена
  1. <tr>
  2.                 <td style="width: 200px;"><nobr><small >1.</small> <a href="http://www.domen.com"><b>text</b></a></nobr></td>
  3.  
  4.                 <td>text</td>
  5.         </tr>
  6.         <tr>
  7.                 <td style="width: 200px;"><nobr><small>7.</small> <a href="http://www.domen.com"><b>text</b></a></nobr></td>
  8.                 <td>text</td>
  9.         </tr>

мне нужен только текст между тэгами <b></b>.
как указать что мне нужен текст между тэгами <b></b> но только в кусочке между alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>?
Или мне просто нужно распарсить результат первого парсинга?
Последнее не получается, получаю только первую строку.

(Отредактировано автором: 18 Марта, 2010 - 13:29:38)

 
 Top
Champion Супермодератор
Отправлено: 18 Марта, 2010 - 13:40:29
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




belousov пишет:
Последнее не получается, получаю только первую строку.
Может быть надо попробовать модификатор m для многострочного поиска?

И, кстати, если результат первого парсинга не нужен, то почему бы не поменять регулярку и уже там искать только то, что нужно? Вот вместо (.*) написать более конкретную вещь.
 
 Top
belousov
Отправлено: 18 Марта, 2010 - 13:56:32
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Подскажите и по поводу M и по поводу (.*)
Кусочек кода куда его ставить "m" и (.*) вариант (<b>.*<\/b>) не работает((
 
 Top
Champion Супермодератор
Отправлено: 18 Марта, 2010 - 13:59:05
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




belousov пишет:
куда его ставить "m"
Туда же, куда все модификаторы
belousov пишет:
(<b>.*<\/b>) не работает((
А слева и с права от <b> ничего быть не может?
 
 Top
belousov
Отправлено: 18 Марта, 2010 - 14:15:34
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Champion пишет:
А слева и с права от <b> ничего быть не может?

непонимаю, как правильно указать...
 
 Top
kochan10
Отправлено: 18 Марта, 2010 - 17:12:02
Post Id


Гость


Покинул форум
Сообщений всего: 118
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




А если разобрать один раз, а потом второй?
 
 Top
belousov
Отправлено: 18 Марта, 2010 - 17:13:57
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match_all("/(?<=<b>)(.*)(?=<\/b>)/isU", $matches, $matches28, PREG_SET_ORDER);

ничего не выводит, как-то удалось вывести первую строку и все((((.
 
 Top
kochan10
Отправлено: 18 Марта, 2010 - 17:18:04
Post Id


Гость


Покинул форум
Сообщений всего: 118
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




Предлагаю так:
PHP:
скопировать код в буфер обмена
  1. $pattern="/(?<=alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>).*(?=alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>)/ismU";
  2. preg_match_all($pattern, $text, $matches, PREG_SET_ORDER);
  3. $text=$matches[0][0];
  4. $pattern="/(?<=<b>).*(?=<\/b>)/i";
  5. preg_match_all($pattern, $text, $matches, PREG_SET_ORDER);
 
 Top
belousov
Отправлено: 18 Марта, 2010 - 17:24:27
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




Только первая строчка.
Тут по логике правильно указать что:
Начиная с этого
PHP:
скопировать код в буфер обмена
  1. alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>
момента,
найти все что находится между <b>(.*)<\/b> во всех строках до этого
PHP:
скопировать код в буфер обмена
  1. alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>
момента. А как его сформулировать в выражении - незнаю.

(Отредактировано автором: 18 Марта, 2010 - 17:30:26)

 
 Top
kochan10
Отправлено: 18 Марта, 2010 - 18:17:25
Post Id


Гость


Покинул форум
Сообщений всего: 118
Дата рег-ции: Дек. 2009  


Помог: 0 раз(а)




По моему, лучший способ это в несколько шагов сделать.
 
 Top
belousov
Отправлено: 18 Марта, 2010 - 18:36:31
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




так не хочет))), выдает только первую строчку, пробовал менять модификаторы и все что хош. Может проблема в обработке переменных? Вот Полностью код:
PHP:
скопировать код в буфер обмена
  1. preg_match_all ("/(?<=alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>)(.*)(?=alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>)/isU", $content, $matches, PREG_SET_ORDER);
  2. foreach ($matches[0] as $item) ;
  3. preg_match_all("/(?<=<b>)(.*)(?=<\/b)/ismU", $item, $matches28, PREG_SET_ORDER);
  4. foreach ($matches28[0] as $item28);
  5. echo ($item28);
 
 Top
CenapaTop
Отправлено: 18 Марта, 2010 - 18:49:38
Post Id



Частый гость


Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009  


Помог: 1 раз(а)




PHP:
скопировать код в буфер обмена
  1. preg_match_all("#><b>(.*?)</b></a>#m", $item, $matches28);
  2. echo '<PRE>';
  3. print_r($matches28);

(Отредактировано автором: 18 Марта, 2010 - 18:50:20)

 
 Top
belousov
Отправлено: 18 Марта, 2010 - 19:10:58
Post Id


Новичок


Покинул форум
Сообщений всего: 23
Дата рег-ции: Окт. 2008  


Помог: 0 раз(а)




получаю массив:
CODE (htmlphp):
скопировать код в буфер обмена
  1. (
  2.     [0] => Array
  3.         (
  4.             [0] => >текст1
  5.             [1] => >текст2
  6.             [2] => >текст3
  7.             [3] => >текст4
  8.             [4] => >текст5
  9.         )
  10.  
  11.     [1] => Array
  12.         (
  13.             [0] =>текст1
  14.             [1] =>текст2
  15.             [2] =>текст3
  16.             [3] =>текст4
  17.             [4] =>текст5
  18.         )
  19.  
  20. )
  21.  

А вот как массив в текст превратить?
 
 Top
CenapaTop
Отправлено: 18 Марта, 2010 - 19:28:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009  


Помог: 1 раз(а)




Цитата:
вот как массив в текст превратить?

В смысле?
 
 Top
movEAX
Отправлено: 18 Марта, 2010 - 19:51:05
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Цитата:
А вот как массив в текст превратить?

Возможно я не до конца понял мысль, но функция implode все еще поддерживается в текущих версиях PHP )


-----
армия.. самое убогое место
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Регулярные выражения »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB