Page 1 sur 1

Récupérer du texte entre deux balises.

Posté : 19 déc. 2008, 16:21
par hub73
Bonjour à tous, j'écris mon propre code pour transformer un tableau comme ceci :

(écrit dans un textarea :)

[tableau]
Jacques | 5/10/1970 | Paris
Claire | 12/2/1975 | Belfort
Martin | 1/31/1957 | Nice
Marie | 23/12/1948 | Perpignan
[/tableau]

en html.

pour commencer, j'utilise : preg_match_all ("/(\[tableau\])(.*)(\[\/tableau\])/", $Texte, $Tableau_resultats);
souhaitant récupérer tout le texte entre [tableau] et [/tableau]

et ca ne marche pas. Par contre si j'écris sur la même ligne [tableau]Coucou[/tableau], pas de probleme je récupère 'Coucou'. Ou est mon erreur ?

Extrait de mon code pour info :
Function Analyser_tableaux ($Texte)
{
	print ("<P> A analyser <br>$Texte</p> \n");
	
	preg_match_all ("/(\[tableau\])(.*)(\[\/tableau\])/", $Texte, $Tableau_resultats);	  
	
	$Nbre_elements = count($Tableau_resultats[0]);
	
	for( $i = 0 ; $i != $Nbre_elements ; $i++)
	{
		$A_remplacer = $Tableau_resultats[0][$i];
		
		print ("<P>Chaine detectée : <br>$A_remplacer</p>");
		$Retour =  Convertir_Tableau($A_remplacer); 
		$Texte = str_replace ($A_remplacer, $Retour , $Texte);
	}
	return $Texte;
}


function Convertir_tableau ($Chaine)
{	 

/*
Exemple d'envoi :
$Chaine = "
Jacques | 5/10/1970 | Paris 
Claire | 12/2/1975 | Belfort 
Martin | 1/31/1957 | Nice 
Marie | 23/12/1948 | Perpignan 
";

*/

	$Resultat = str_replace ("<br />","</td><tr><td class='tableau'>", $Chaine);  
//	$Resultat = str_replace ("[tableau]", "", $Resultat);
//	$Resultat = str_replace ("[/tableau]", "", $Resultat);
		
	$bBaliseDebut = false;
	$bBaliseFin = false;
	
	$SousChaine = "";
	for ($i = 0 ; $i <= strlen ($Resultat) ; $i++)
	{
		if ($Resultat[$i] == "|")
		{
			$SousChaine = $SousChaine . "</td><td class='tableau'>";
		}
		else
		{
			$SousChaine = $SousChaine . $Resultat[$i];
		}
	}
	
	if ($bBaliseDebut == true and $bBaliseFin == false)
	{
		return "<P>Erreur de lecture tableau !</p>";
	}
	else
	{
		$Resultat = "<table align='center'>";									 
		$Resultat .= "<tr><td class='tableau'>";
		$Resultat .= $SousChaine;  
		$Resultat .= "</td></tr>";
		$Resultat .= "</table>";
		return $Resultat;
	}
}
Merci beaucoup à vous !

Posté : 19 déc. 2008, 16:32
par jojolapine
Bonjour, pour ton problème, il faut mettre l'option s à ta regex, en effet, le point ne reconnait pas par défaut les sauts de ligne...
(un bon tuto: http://www.lumadis.be/regex/tuto_pcre.php#oM )

Posté : 19 déc. 2008, 16:36
par Invité
peux-to corriger mon regex, car je ne sais pas ce qu'est l'option s ! Mais dejà , merci beaucoup je cherche dans le lien que tu m'a donné pour voir si je trouve la solution !

Posté : 19 déc. 2008, 16:39
par Invité
Ok trouvé grand merci, ce tuto est compréhensible pour une fois avec les regex !

Posté : 19 déc. 2008, 16:42
par Invité
et zut ce n'est pas ca, si quelqu'un peut corriger mon regex avec l'option s ce serait sympa !

Posté : 19 déc. 2008, 17:00
par Invité
J'ai remplacé par çà mais ce ne marche toujours pas :
preg_match_all ("#(\[tableau\])(.*)(\[\/tableau\])#s", $Texte, $Tableau_resultats);	  

Posté : 19 déc. 2008, 17:01
par Invité
Ok, c'est bon maintenant :
preg_match_all ("#(\[tableau\])(.*?)(\[\/tableau\])#s", $Texte, $Tableau_resultats);	
Merci à tous !