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
Форумы портала PHP.SU :: Версия для печати :: парсинг результата в переменной
Форумы портала PHP.SU » PHP » Регулярные выражения » парсинг результата в переменной

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

1. belousov - 18 Марта, 2010 - 13:27:39 - перейти к сообщению
через 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>?
Или мне просто нужно распарсить результат первого парсинга?
Последнее не получается, получаю только первую строку.
2. Champion - 18 Марта, 2010 - 13:40:29 - перейти к сообщению
belousov пишет:
Последнее не получается, получаю только первую строку.
Может быть надо попробовать модификатор m для многострочного поиска?

И, кстати, если результат первого парсинга не нужен, то почему бы не поменять регулярку и уже там искать только то, что нужно? Вот вместо (.*) написать более конкретную вещь.
3. belousov - 18 Марта, 2010 - 13:56:32 - перейти к сообщению
Подскажите и по поводу M и по поводу (.*)
Кусочек кода куда его ставить "m" и (.*) вариант (<b>.*<\/b>) не работает((
4. Champion - 18 Марта, 2010 - 13:59:05 - перейти к сообщению
belousov пишет:
куда его ставить "m"
Туда же, куда все модификаторы
belousov пишет:
(<b>.*<\/b>) не работает((
А слева и с права от <b> ничего быть не может?
5. belousov - 18 Марта, 2010 - 14:15:34 - перейти к сообщению
Champion пишет:
А слева и с права от <b> ничего быть не может?

непонимаю, как правильно указать...
6. kochan10 - 18 Марта, 2010 - 17:12:02 - перейти к сообщению
А если разобрать один раз, а потом второй?
7. belousov - 18 Марта, 2010 - 17:13:57 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match_all("/(?<=<b>)(.*)(?=<\/b>)/isU", $matches, $matches28, PREG_SET_ORDER);

ничего не выводит, как-то удалось вывести первую строку и все((((.
8. kochan10 - 18 Марта, 2010 - 17:18:04 - перейти к сообщению
Предлагаю так:
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);
9. belousov - 18 Марта, 2010 - 17:24:27 - перейти к сообщению
Только первая строчка.
Тут по логике правильно указать что:
Начиная с этого
PHP:
скопировать код в буфер обмена
  1. alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>
момента,
найти все что находится между <b>(.*)<\/b> во всех строках до этого
PHP:
скопировать код в буфер обмена
  1. alt=\"\" width=\"1\" height=\"5\"><\/td><\/tr>
момента. А как его сформулировать в выражении - незнаю.
10. kochan10 - 18 Марта, 2010 - 18:17:25 - перейти к сообщению
По моему, лучший способ это в несколько шагов сделать.
11. belousov - 18 Марта, 2010 - 18:36:31 - перейти к сообщению
так не хочет))), выдает только первую строчку, пробовал менять модификаторы и все что хош. Может проблема в обработке переменных? Вот Полностью код:
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);
12. CenapaTop - 18 Марта, 2010 - 18:49:38 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. preg_match_all("#><b>(.*?)</b></a>#m", $item, $matches28);
  2. echo '<PRE>';
  3. print_r($matches28);
13. belousov - 18 Марта, 2010 - 19:10:58 - перейти к сообщению
получаю массив:
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.  

А вот как массив в текст превратить?
14. CenapaTop - 18 Марта, 2010 - 19:28:27 - перейти к сообщению
Цитата:
вот как массив в текст превратить?

В смысле?
15. movEAX - 18 Марта, 2010 - 19:51:05 - перейти к сообщению
Цитата:
А вот как массив в текст превратить?

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

 

Powered by ExBB FM 1.0 RC1