2012-04-30 7 views
0

мне нужно, чтобы извлечь слова FIESTA Erasmus анс/событие/83318 в следующем HTML-кодPHP - извлечение данных из веб-страницы HTML

<div id="tab-soiree" class=""><div class="soireeagenda cat_1"> 
      <a href="/event/83318/" class="lienFly"><img src="http://www.parisbouge.com/img/fly/resize/100/83318.jpg" alt="fiesta erasmus" class="fly"></a> 
       <ul> 
        <li class="nom"><h2><a href="/event/83318/">FIESTA ERASMUS</a> </h2></li> 
        <li class="genre" style="margin-bottom:4px;"> 
        <a href="/soirees-etudiantes/paris/1/" style="color:inherit;" title="soirée étudiante">soirée étudiante</a>    </li> 
        <li class="lieu"><a href="/club/paris/10/duplex">Duplex</a></li>    <li class="musique">house, electro, r&b chic, latino, disco</li> 
        <li class="pass-label">pass</li>    </ul> 
         <a href="/club/paris/10/duplex" title="duplex"><img src="/img/salles/resize/50/10.jpg" alt="duplex" class="flysalle"></a> 
       <hr class="clearleft"> 
     </div> 

я испытал что-то вроде этого

$PATTERN = "/\<div id="tab-soiree".*<a href="/event/(.*)/">(.*)</a>/" 
preg_match($PATTERN, $html, $matches); 

но он не работает.

+1

[Вы не можете использовать регулярные выражения для анализа HTML] (http://stackoverflow.com/a/1732454/1185355), поэтому вместо этого используйте парсер DOM :) – Daan

ответ

1

я предлагаю следующую картину:

$PATTERN = '%<h2><a href="(.*?)">(.*?)</a>[\s]+</h2>%i'; 
preg_match($PATTERN, $html, $matches); 

Часть (.*?) является не жадным шаблоном, что означает, что синтаксический анализатор не пройдет весь путь до конца строки, но будет остановлен до " в этом случае.

Вы также можете предварительно запрограммировать html перед REGEX'ом, т. Е. Удалить все разрывы строк, чтобы избавиться от части [\s]+.

Вы можете попробовать это в сети here.

+0

Что вы мне посоветуете: DOM или Regex? – geekInside

+0

Спасибо. Я преуспеваю – geekInside

2

Вы не разбираете HTML с регулярными выражениями. Вместо этого следует использовать встроенный в DOM разборе инструментов внутри самого PHP: http://php.net/manual/en/book.dom.php

Если предположить, что HTML доступен из переменной с именем $html:

$doc = new DOMDocument(); 
$doc->loadHTML($html); 

$item = $doc->getElementsByTagName("li")->item(0); 
$link = $item->getElementsByTagName("a")->item(0); 

echo $link->attributes->getNamedItem('href')->nodeValue; 
echo $link->textContent; 
+0

Спасибо. Я попробую с DOMDocument – geekInside

Смежные вопросы