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

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

1. zero_real - 09 Ноября, 2014 - 15:53:40 - перейти к сообщению
Доброго времени суток, All!

Как-то с регулярками особенно работать не приходилось, но тут возникла срочная задача.
В связис этим прошу помощи.

Есть код, вроде:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <p>текст1. внутри <strong>могут</strong> быть <i>разные</i> теги</p>
  3. <p>текст2. внутри <strong>могут</strong> быть <i>разные</i> теги</p>
  4. <p>текст3. внутри <strong>могут</strong> быть <i>разные</i> теги</p>  
  5. ...
  6.  

Задача разбить этот код в массимум по абзацам.
Т.е.:
нулевой элемент массива должен содежать "<p>текст1. внутри <strong>могут</strong> быть <i>разные</i> теги</p>", первый "<p>текст2. внутри <strong>могут</strong> быть <i>разные</i> теги</p>".

Количество абзацев может быть разным.

Как реализовать?

Спасибо!
2. dXdYdZ - 09 Ноября, 2014 - 17:37:06 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $reg='#<p>(.+?)</p>#mi';
  2. preg_match_all($reg,$page,$matches);

Здесь $page-HTML-код,
$matches-массив результатов
3. zero_real - 09 Ноября, 2014 - 17:54:57 - перейти к сообщению
dXdYdZ пишет:
PHP:
скопировать код в буфер обмена
  1. $reg='#<p>(.+?)</p>#mi';
  2. preg_match_all($reg,$page,$matches);

Здесь $page-HTML-код,
$matches-массив результатов

Спасибо! Здорово Сейчас попробую.

upd:

В целом то, что нужно, но есть ньюансы.

Код может быть немного сложнее:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <p class="class1">текст1. внутри <strong>могут</strong> быть <i>разные</i> теги</p>
  3.  
  4. <p>текст2. внутри <strong>могут</strong> быть <i>разные</i> теги</p>
  5.  
  6. <table>
  7. ....
  8. </table>
  9.  
  10. <p style="somestyle">текст3. внутри <strong>могут</strong> быть <i>разные</i> теги</p>  
  11.  

В тегов <p> могут быть любые параметры. Вместо <table>, может быть <div> или что угодно.

Идея такая: находим открытие тега <p>. Все что идет до открытия следующего тега <p> пишем в ячейку массива и т.д. Т.е. в данном примере у нас должно получится:

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. Array
  3. (
  4.     [0] => <p class="class1">текст1. внутри <strong>могут</strong> быть <i>разные</i> теги</p>
  5.     [1] => <p>текст2. внутри <strong>могут</strong> быть <i>разные</i> теги</p><table>....</table>
  6.     [2] => <p style="somestyle">текст3. внутри <strong>могут</strong> быть <i>разные</i> теги</p>  
  7. )
  8.  
  9.  


Курю мануалы по регуляркам, но пока не пойму как такое реализовать. Если кто-то в теме, поскажите, пожалуйста.
4. dXdYdZ - 10 Ноября, 2014 - 20:31:16 - перейти к сообщению
Ну так, тогда вот так получается:
PHP:
скопировать код в буфер обмена
  1. $reg='#<p(.*?)>(.+?)</p>#mi';
  2. preg_match_all($reg,$page,$matches);

Из $matches уже вытаскиваете результат, как Вам удобно
5. andatr - 06 Февраля, 2015 - 12:46:12 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $strNew = preg_match_all('#<p(?:>|[^>]+).+?</p>#iu', $str, $out);

 

Powered by ExBB FM 1.0 RC1