Page 1 sur 1

aide pour une regex

Posté : 30 mai 2011, 22:09
par elsa092
Bonjour,

je vous écris car j'ai un gros problème avec une regex. Aussi merci d'avance pour votre aide precieuse !!
mon but est de récupérer les infos suivantes : titre et contenu

cf le code html ci-dessous tel qu'on me le présente (avec pleins d'espaces)

Code : Tout sélectionner

<li> <p class="class1"> titre </p> <p class="class2"> contenu </p> </li>

pour récupérer ces deux infos j'ai effectuer la regex suivante mais je ne sais pas du tout comment gérer les sauts de ligne =( du coup elle est foireuse et ne fonctionne pas=(
mon but est de recuperer les mots : titre et contenu sans les espace =(

Code : Tout sélectionner

preg_match_all('#<li>\s<p class="class1">\s(.*?)<\/p>\s<p class="class2">(.*?)<\/p>\s<\/li>#is',$content,$infos, PREG_PATTERN_ORDER);

Re: aide pour une regex

Posté : 30 mai 2011, 22:30
par AB
Pour parser du html utilises plutôt DomDocument

Re: aide pour une regex

Posté : 30 mai 2011, 22:36
par elsa092
bonsoir,

le probleme c'est que j'ai un faible niveau et le dom, je connais encore moins =(

Re: aide pour une regex

Posté : 31 mai 2011, 04:19
par AB
<?php
$page_cible = 'http://www.fichier_cible.php';


$tab = array();

$dom = new DOMDocument;// Crée un nouvel objet DOMDocument

if(@$dom->loadHTMLFile($page_cible))// Charge le document html
	{
		if ($domli = $dom->getElementsByTagName('li'))//recherche les balises li
	
		foreach($domli as $li) //liste les balises li
		{
		    if ($li->hasChildNodes())//Cherche si il y a des noeuds enfants
			
			foreach ($li->childNodes as $node) //liste les noeuds enfant
			{
				if($node->nodeType == 1 && $node->nodeName == 'p') // Si les noeuds sont de type 1 il s'agit d'éléments (et non pas de texte) et l'on regarde s'il est égal à p
					{
						  $attribut = $node->hasAttributes() ? $node->getAttribute('class') : null;//cherche les attributs class
						  if ($attribut == 'class1' || $attribut == 'class2')//cible les noms de classe recherchés
						  $tab[$attribut] = trim($node->nodeValue);// Enregistre les valeurs, trim supprime les espaces en début et en fin de chaine
					}
				
			}
			
		}
	}
	else
	{
		echo 'le document '.$page_cible. ' n\'a pas pu être chargé';
	}

echo '<pre>';
print_r($tab);
echo '</pre>';
?>