2010-06-23 7 views
0

J'ai la chaîne suivante et j'ai besoin d'extraire le texte à l'intérieur du div (PRÉFACE DE L'ÉDITEUR, PLUS DE CONTENU, etc) et les mettre dans un tableau avec php. Comment pourrais-je faire ça?Extrait du texte et mis en tableau avec PHP

Merci d'avance.

<div class='classit'><a href='site.php?site=1&filename=aname4'>EDITOR'S PREFACE</a></div> 
<div class='classit'><a href='site.php?site=4&filename=aname3'>MORE CONTENT</a></div> 
<div class='classit'><a href='site.php?site=3&filename=aname4'>LAST LINE</a></div> 
+0

pas avec regex - http: // stackoverflow .com/questions/1732348/regex-match-open-tags-sauf-xhtml-self-contained-tags/1732454 # 1732454 – Pete

Répondre

0

Vous pouvez utiliser preg_match_all:

<?php 
$html = <<<HTML 
<div class='classit'><a href='site.php?site=1&filename=aname4'>EDITOR'S PREFACE</a></div> 
<div class='classit'><a href='site.php?site=4&filename=aname3'>MORE CONTENT</a></div> 
<div class='classit'><a href='site.php?site=3&filename=aname4'>LAST LINE</a></div> 
HTML; 

$result = array(); 

if (preg_match_all('/>([^><]+)(?=<\/a>)/', $html, $matches)) 
{ 
    $result = $matches[1]; 
} 

print_r($result); 
0

vous pouvez le faire en utilisant strip_tags:

$s = "<div class='classit'><a href='site.php?site=1&fn=aname4'>EDITOR'S PREFACE</a></div> 
<div class='classit'><a href='site.php?site=4&filename=aname3'>MORE CONTENT</a></div> 
<div class='classit'><a href='site.php?site=3&filename=aname4'>LAST LINE</a></div> "; 

foreach (explode("\n", $s) as $val){ 
    $new[] = strip_tags($val); 
} 
var_dump($new); 
+0

Ce serait la solution la plus efficace pour l'exemple donné ... –

3

Utilisez Simple HTML DOM

$html = <<<HTML 
<div class='classit'><a href='site.php?site=1&filename=aname4'>EDITOR'S PREFACE</a></div> 
<div class='classit'><a href='site.php?site=4&filename=aname3'>MORE CONTENT</a></div> 
<div class='classit'><a href='site.php?site=3&filename=aname4'>LAST LINE</a></div> 
HTML; 

$src = str_get_html($html); 
$elem = $src->find("div.classit a"); 

foreach ($elem as $link) { 
    $links[] = $link->plaintext; 
} 

print_r($links); 
1

Vous pouvez utiliser votre propre extension DOM

$string = '<div><a>Elem 1</a></div><div><a>Elem 2</a></div>...etc'; 

$dom = new DOMDocument(); 
$dom->loadHTML($string); 

$elements = $dom->getElementsByTagName('a'); 

$textElements = array(); 
foreach($elements as $node) { 
    textElements[] = $node->nodeValue; 
} 

PHP Si vous voulez charger une lar ger HTML extrait, vous pouvez utiliser DOMXPath pour interroger le DOMDocument afin de simplement obtenir les éléments que vous voulez.

$xPathObj = new DOMXPath($dom); 
$elements = $xPathObj->query('//div[@class='classit']/a'); 

Modifier

DOMNodeList soutient foreach, donc j'ai changé for($i = 0; $i < $elements->length; $i++) {$elements->item($i)->nodeValue;}-foreach($elements as $node) {$node->nodeValue}