Page 1 sur 1

ereg() et preg_replace()

Posté : 29 déc. 2005, 12:01
par renan44
Bonjour, je fais actuellement un script pour mon site, et je bloque un moment.

J'ai un texte qui contient des balises personnaliser. Voici en gros la structure :

[CAT=nom de la cat]
[TABLEAU]
ligne 1 *
ligne 2 *
[/TALBEAU]

Je veux transformer cela pour qu'il y ait le titre de la catégorie en gras, et en dessous le tableau. Indivicuellement, j'arrive modifier chaque élément, mais lorsque tout cela est ensemble, et surtout, lorsque cela se répète plusieurs fois (plusieurs catégorie les unes en dessous des autres) je bloque, et ça ne marche pas !

J'aimerais donc savoir comment faire pour changer ces données quand elles sont mise ensemble.

Vous pouvez voir le résultat de chaque partie sur cette page : http://astunet.free.fr/test.php

Voici le code que j'utilise pour chaque partie :
<?

$texte1='[TABLE]bonjour tous le monde[/TABLE]';
$texte2="[INFO=je viens manger chez toi à l'aube]";
$texte3='Renan | 19ans *
		Ptrick | 52ans *
		Roger | 68ans';

		

//TEST 1
echo 'TEST N°1: [TABLE]bonjour tous le monde[/TABLE]<br><b>Résultat >>> </b>';
if(eregi("([[])(TABLE)([]])(.*)([[])(/TABLE)([]])", $texte1, $sortie1)) 
{ 
echo '<table width="50%" border="1" bgcolor="#0099FF">
  <tr>
    <td bgcolor="#FFFFFF">'.$sortie1[4].'</td></tr></table>';
}
else { echo 'Cette balise n\'a pas été trouvée'; }

//TEST 2
echo '<p>&nbsp;</p>TEST N°2: [INFO=je viens manger chez toi à l\'aube]<br><b>Résultat >>> </b>';
if(eregi("([[])(INFO)([=])(.*)([]])", $texte2, $sortie2)) 
{ 
echo 'Information : '.$sortie2[4];
}

//TEST 3
echo '<p>&nbsp;</p>TEST N°3: grouper les infos<br><b>Résultat >>> </b>';
$liste=explode("*",$texte3);
$nb=count($liste);
for($i=1; $i<=$nb; $i++)
{
$nb_liste=$i-1;
$liste2=explode("|", $liste[$nb_liste]);
echo 'Nom : '.$liste2[0].'<br>';
echo 'Age : '.$liste2[1].'<br><br><br>';
}

?>
Merci d'avance de vos réponses !

Posté : 29 déc. 2005, 12:30
par pitt
Si tu sais le faire sur un seul texte tu dois pouvoir le faire sur plusierus

Si tu veux tu peux mettre toutes tes expressions dans un tableau et faire tes tests successivement sur tous les éléments du tableau.

Ou tu veux que ce soit une seule expression?

Posté : 29 déc. 2005, 14:16
par renan44
En fait, j'aimerais simplement que la texte entier soit traité correctement, car là, dès le premier tableau, ça bloque (le premier tableau est bien ouvert, mais pas refermé, du coup, les infos du 2ème sont mise sur le 1er ...

utiliser des tableaux, tu parles de "array()" ? c'est possible de l'utiliser dans une fonction comme eregi ??

Merci pour vos réponses :wink:

Posté : 29 déc. 2005, 14:41
par pitt
pour le array

tu peux faire comme ca

<? 

$texte1='[TABLE]bonjour tous le monde[/TABLE]'; 
$texte2="[INFO=je viens manger chez toi à l'aube]"; 
$texte3='Renan | 19ans * 
        Ptrick | 52ans * 
        Roger | 68ans'; 

$tab=array($texte1,$texte2,$texte3);

foreach ($tab as $cle => $texte){         

echo "test n°{$cle+1} {$texte}<br><b>Resultat</b>


if(eregi("([[])(TABLE)([]])(.*)([[])(/TABLE)([]])", $texte, $sortie1)) 
{ 
echo '<table width="50%" border="1" bgcolor="#0099FF"> 
  <tr> 
    <td bgcolor="#FFFFFF">'.$sortie1[4].'</td></tr></table>'; 
} 
else {
if(eregi("([[])(INFO)([=])(.*)([]])", $texte, $sortie2)) 
{ 
echo 'Information : '.$sortie2[4]; 
} 

else{
$liste=explode("*",$texte); 
$nb=count($liste); 
for($i=1; $i<=$nb; $i++) 
{ 
$nb_liste=$i-1; 
$liste2=explode("|", $liste[$nb_liste]); 
echo 'Nom : '.$liste2[0].'<br>'; 
echo 'Age : '.$liste2[1].'<br><br><br>'; 
} }}
}

?> 

J'ai pas testé mais ca doit marcher a peu pres

Posté : 30 déc. 2005, 09:26
par renan44
C'est bon, j'ai trouvé une solution qui fonctionne bien, avec preg_replace.

Voici ce que j'utilise :
$cherche[0]='/(\[TABLEAU\])/';
$cherche[1]='/(\[\/TABLEAU\])/';
$remplace[0]='<table width="50%" border="1" bgcolor="#0099FF"><tr><td>Nom</td><td>Club</td></tr>';
$remplace[1]='</table><br><br>';

echo preg_replace($cherche,$remplace,$texte);
Merci pour ton aide pitt, elle m'a bien guidée tout de même :wink:.