Регулярные выражения

помогите составить

#1 29 октября 2014 в 19:25
Нужно регуляркой вытащить парсером текст со страницы.
Сам парсер есть.
Прошу помочь составить регулярное выражение.

Вот фрагмент со страницы, откуда надо вытащить:
  1. Тут код страницы до блока
  2. <div itemprop="article">
  3. <h1>Заголовок</h1>
  4. <p>Текст сообщения</p>
  5. </div>
  6. Тут код страницы после блока
Надо вытащить "Заголовок" и "Текст сообщения"

Прошу помочь.
#2 30 октября 2014 в 09:14
Исходный документ получается примерно такой(содержится в файле /test1.php)
  1.  
  2. <html>
  3. <body>
  4. <div itemprop="article">
  5. <h1>Заголовок</h1>
  6. <p>Текст сообщения</p>
  7. </div>
  8. <div itemprop="article1">
  9. <h1>Заголовок1</h1>
  10. <p>Текст сообщения1</p>
  11. </div>
  12. </body>
  13. </html>
  14.  
Парсим примерно так:
  1.  
  2. <?php
  3. define('PATH', $_SERVER['DOCUMENT_ROOT']);
  4.  
  5. //получаем содержание файла, который надо парсить
  6. $content = file_get_contents(PATH."/test1.php");
  7.  
  8. //Первый вариант - регулярные выражения, использование неправильно
  9. //если кто-то слегка изменил форматирование исходного документа - всё полетит к чертям
  10. $pattern1 = '/<div itemprop="(.+?)">(.+?)<\/div>/ius';
  11. $pattern2 = '/<h1>(.*?)<\/h1>(\s*?)<p>(.+?)<\/p>/ius';
  12.  
  13. preg_match_all($pattern1, $content, $matches1);
  14.  
  15. foreach ($matches1[2] as $k=>$m){
  16. preg_match_all($pattern2, $m, $matches2);
  17. echo $matches2[1][0]; //- Заголовок
  18. echo $matches2[3][0]; //- Текст сообщения
  19. }
  20.  
  21.  
  22. //Второй вариант, более предпочтительный
  23. //но не работает, если исходный документ отфарматирован неправильно - не закрыты какие-то теги...
  24. $html = new SimpleXMLElement($content);
  25.  
  26. //вариант, если html документ форатирован правильно, содержит body и правильную html разметку
  27. foreach($html->body[0] as $div){
  28. echo $div->h1; //заголовок
  29. echo $div->p; //текст сообщения
  30. }
  31.  
  32.  
  33. //третий вариант - самый подходящий. Гуглим и юзаем PHP Simple HTML DOM
  34.  
  35. ?>
  36.  
  37.  
  38.  
#3 30 октября 2014 в 09:32
Я предложу свой третий вариант. Заюзать php query habrahabr.ru/post/69149/
Выборка элементов очень схожа с jquery. Есть один минус, из-за которого я перешел на регулярки — после обработки ею некоторых сайтов на выходе получаем краказябры. Причем, как показало гугление, баг встречается у многих и не пофиксен.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.