PHP.SU

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

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

> Найдено сообщений: 8
Koqw Отправлено: 24 Августа, 2014 - 21:58:29 • Тема: preg_match_all пропускает второе вхождение • Форум: Хранение данных, их вывод и обработка

Ответов: 12
Просмотров: 3603
Мелкий пишет:
Koqw пишет:
в гугле ничего не нашел

"php html parser"?
Серьёзно? Ничего?
DomDocument, Simple HTML DOM, htmlSQL, phpQuery, Zend_Dom_Query
В моей выдаче третей же строкой список разных парсеров на хабре: http://habrahabr.ru/post/176635/


Искал изначально по "полновесный парсер html" как вы и написали вначале.
Спс всем за помощь.
Koqw Отправлено: 24 Августа, 2014 - 21:02:47 • Тема: preg_match_all пропускает второе вхождение • Форум: Хранение данных, их вывод и обработка

Ответов: 12
Просмотров: 3603
OrmaJever пишет:
хммм... а вот такой вариант?
PHP:
скопировать код в буфер обмена
  1. $match = explode('<div class="feed-i">', $string);

и с каждой строки удалить закрывающий div Растерялся


а как тут быть если идет так:
CODE (html):
скопировать код в буфер обмена
  1. <div class="feed-iXXX">...<div class="feed-iYYY">...<div class="feed-iZZZ">..


где XXX YYY и ZZZ это рандомные числа?
(Добавление)
Мелкий пишет:
Используйте полновесный парсер HTML.
Регуляркой это делать неправильно.

что значит полновесный парсер html? впервые слышу, в гугле ничего не нашел
Koqw Отправлено: 24 Августа, 2014 - 20:23:56 • Тема: preg_match_all пропускает второе вхождение • Форум: Хранение данных, их вывод и обработка

Ответов: 12
Просмотров: 3603
OrmaJever пишет:
а вы U из флагов уберите и попробуйте
CODE (htmlphp):
скопировать код в буфер обмена
  1. <div class="feed-i">(.+?)</div>


Нет, вы не так поняли, мне нужно все содержимое <div class="feed-i">...</div> включая вложенные в него div
Перед вновь повторяющимися <div class="feed-i"> может быть огромое и рандмное количество заканчивающихся тегов </div>, а так же других тегов, и между ними не всегда цифры.

Так как вы написали он будет искать самый первый встречающийся </div> и возьмет все что до него.

если у меня строка наример <div class="feed-i"><div><div>111</div></div></div>
то он возьмет <div class="feed-i"><div><div>111</div>
А это не то.
Koqw Отправлено: 24 Августа, 2014 - 20:00:24 • Тема: preg_match_all пропускает второе вхождение • Форум: Хранение данных, их вывод и обработка

Ответов: 12
Просмотров: 3603
Нет, не нужно через один.
Нужно только первое и второе вхождение.
А берется первое и третье.
Беру по такой регулярке <div class="feed-i">(.*)<div class="feed-i">, потому что иначе никак, поскольку в реальном примере перед повторяющимися блоками <div class="feed-i">
могут быть сколько угодно </div> и другие теги.

Примерно что то типа этого:
Цитата:
<div class="feed-i"><div><div>111</div></div></div>
<div class="feed-i"><ul><div>222</div></ul></div>
<div class="feed-i">....333</div>/div></div>/div></div>
<div class="feed-i">....444</div>/div></li><ul></div>/div></div>
<div class="feed-i">....555</div></li></div>/div>


дополнение: и само собой концовки после 111 и 222 могуть быть рандомные с разными тегами, не обязательно всегда так как я выше указал.
Koqw Отправлено: 24 Августа, 2014 - 19:41:24 • Тема: preg_match_all пропускает второе вхождение • Форум: Хранение данных, их вывод и обработка

Ответов: 12
Просмотров: 3603
OrmaJever пишет:
мне кажется проблема в том что вы выводите $matches после цикла и туда попадают только последние значения


В самом цикле ставил, все равно не то.
Функция работает так как и должна работать, второй блок <div class="feed-i">222</div> в нее не попадает, потому что часть его уже попала в первое вхождение - так вроде если правильно выразился.
Но может как то можно через дополнительные параметры вывести <div class="feed-i">222</div> ?
Koqw Отправлено: 24 Августа, 2014 - 18:45:41 • Тема: preg_match_all пропускает второе вхождение • Форум: Хранение данных, их вывод и обработка

Ответов: 12
Просмотров: 3603
Вот этот код:
Содержимое строки $string написано упрощенно, просто для лучшего понимания.

PHP:
скопировать код в буфер обмена
  1. $string = '<div class="feed-i">111</div><div class="feed-i">222</div><div class="feed-i">333</div><div class="feed-i">444</div><div class="feed-i">555</div>';
  2.      preg_match_all( '/<div class="feed-i">(.*)<div class="feed-i">/isU' , $string , $m_matches );
  3.      foreach ($m_matches as $val) {
  4.      $matches0 = '<div class="feed-i">'.$val[0];
  5.      $matches1 = '<div class="feed-i">'.$val[1];
  6.           }
  7. print_r($matches0."\n".$matches1."\n");


Результат выведет:
Цитата:
<div class="feed-i">111</div>
<div class="feed-i">333</div>


а надо вывести вот что:
Цитата:
<div class="feed-i">111</div>
<div class="feed-i">222</div>


Само выражение для парсинга <div class="feed-i">(.*)<div class="feed-i"> менять НЕЛЬЗЯ.
(В примере я упрощенно написал, но в реальном случае никак иначе спарсить кроме как я указал невозможно, то есть парсить по <div class="feed-i">(.*)<\/div> не вариант)
Как сделать что бы выводилось так?:

Цитата:
<div class="feed-i">111</div>
<div class="feed-i">222</div>
Koqw Отправлено: 15 Августа, 2014 - 19:02:58 • Тема: Проблема с preg_replace • Форум: Вопросы новичков

Ответов: 2
Просмотров: 122
Мелкий пишет:
Может, вы имели в виду str_replace?
Ну и у file_put_contents параметры напутали.


Спс, да file_put_contents напутал. Теперь работает.
Koqw Отправлено: 15 Августа, 2014 - 18:46:31 • Тема: Проблема с preg_replace • Форум: Вопросы новичков

Ответов: 2
Просмотров: 122
Требуется найти и заменить в page.html все повторяющиеся блоки
Цитата:
</span></div><div class="activity">

на это:
Цитата:
</span><a href="link.ru"></a></div><div class="activity">


и записать полученный результат в new.html

Делаю так, не выходит:

PHP:
скопировать код в буфер обмена
  1. $file = 'new.html';
  2. $current = file_get_contents('page.html');
  3. $text = preg_replace('(</span></div><div class="activity">)', '</span><a href="link.ru"></a></div><div class="activity">', $current);
  4. file_put_contents($file, $current, $text);

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB