2012-07-31 2 views
0

Несмотря на то, что я пытаюсь получить только содержаниеpreg_match получает мне содержание всей страницы, а не конкретный DIV

<div class="description">...</div> 

он возвращает мне все, что ниже этого конкретных дел. Как я могу получить только контент между ним?

$file_string = file_get_contents(''); 

preg_match('/<div class="description">(.*)<\/div>/si', $file_string, $description); 
$description_out = $description[1]; 

echo $description_out; 
+1

Я бы рекомендовал вместо # regex использовать что-то вроде [phpQuery] (http://code.google.com/p/phpquery/) - это проще в использовании и большей эффективности памяти. – Alfo

+0

Или, вместо того, чтобы добавить дополнительный слой абстракции, просто проанализируйте html с помощью «DOMDocument» или подобных –

ответ

2

Вы должны использовать non-greedy. Измените (.*) на (.*?).

Также старайтесь избегать использования регулярных выражений для синтаксического анализа HTML, если это возможно.

+0

@JohnBilly, чтобы расширить ответ на ответ Марка, вы должны использовать DOM http://php.net/manual/en/book .dom.php для анализа вашего HTML. – Matt

0

Вот еще один способ, который указывается, когда вы хотите получить/прочитать HTML-элементы в PHP, используя класс PHP DOMDocument.

<?php 
// string with HTML content 
$strhtml = '<!doctype html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<title>Document Title</title> 
</head> 
<body> 
<div id="dv1">www.MarPlo.net</div> 
<div class="description">http://www.coursesweb.net</div> 
</body></html>'; 

// create the DOMDocument object, and load HTML from a string 
$dochtml = new DOMDocument(); 
$dochtml->loadHTML($strhtml); 

// gets all DIVs 
$divs = $dochtml->getElementsByTagName('div'); 

// traverse the object with all DIVs 
foreach($divs as $div) { 
    // if the current $div has class="description", gets and outputs content 
    if($div->hasAttribute('class') && $div->getAttribute('class') == 'description') { 
    $cnt = $div->nodeValue; 
    echo $cnt. '<br/>'; 
    } 
} 
?> 

Вы можете найти документацию о DOMDocument на php.net.

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