Page 1 sur 1
Placer le texte des commentaires dans une variable
Posté : 05 août 2005, 10:41
par h2o
Je suis toujours aussi débutant
Demande inverse de celle d'hier.
Je voudrais placer le texte de tout les commentaires dans une variable, chaque commentaire séparé du premier par un retour "\n".
Par exemple :
$commentaire contiendrais :
"Texte modifie le 2005-08-04 - 11:55 par Jean-Marie Hoornaert \n
Texte modifie le 2005-08-04 - 14:52 par Anne Onyme\n"
Qui peux m'aider ?
Posté : 05 août 2005, 10:43
par ouckileou
il faudrait préciser que tes commentaires sont dans un fichier

tout le monde n'a pas forcément suivi
regarde cette fonction :
http://fr.php.net/manual/fr/function.fi ... ntents.php
Posté : 05 août 2005, 10:44
par Cyrano
On peut t'aider à corriger un code déjà commencé, pas faire le code à ta place... mais tu ne nous montres rien à corriger

Posté : 05 août 2005, 11:19
par h2o
Oui, évidemment.
J'ai été voir le site
http://www.lumadis.be/regex/test_regex.php et j'ai fait quelques tests.
Voici donc le bout de code :
if (file_exists("index.txt"))
{
$content = file_get_contents("index.txt") ;
$commentaire = preg_match('#<!--.*?-->#',$content) ;
print $commentaire[0] ;
}
Ne sort rien, alors que les premières ligne de mon texte "index.txt" sont des commentaires. Je pensais au moins obtenir le premier commentaire avec les balises. Même si je voudrais le garder que le texte.
Posté : 05 août 2005, 11:21
par ouckileou
preg_match ne renvoie qu'un entier, il faut que tu spécifies un autre paramètre pour récupérer des résultats
regarde la doc =>
http://fr.php.net/manual/fr/function.preg-match.php
il y a un exemple
Posté : 05 août 2005, 11:25
par Cyrano
C'est donc un problème d'expression régulière... je nesuis pas champion du monde de la catégorie: sur le testeur de regex, arrives-tu à obtenir un résultat ?
Posté : 05 août 2005, 11:29
par ouckileou
C'est donc un problème d'expression régulière...
pas forcément pour l'instant puisque preg_match renvoie un entier, et qu'ici h2o affiche une cellule de tableau
il faudrait essayer ceci je pense d'abord :
if (file_exists("index.txt"))
{
$content = file_get_contents("index.txt") ;
$commentaire = preg_match('#<!--.*?-->#',$content) ;
print $commentaire ;
}
Posté : 05 août 2005, 11:31
par h2o
Voici le code corrigé : cela fonctionne, mais le regex n'est pas correcte : les balises de commentaires sont maintenues.
if (file_exists("index.txt"))
{
$content = file_get_contents("index.txt") ;
preg_match_all('#<!--.*?-->#',$content,$commentaires);
foreach ($commentaires as $commentaire)
{
foreach ($commentaire as $text)
{
print $text . "\n" ;
}
}
}
Posté : 05 août 2005, 11:35
par ouckileou
question : tu veux simplement les récuper ou aussi les enlever du texte ?
Posté : 05 août 2005, 11:38
par h2o
Les enlever du texte, vous m'avez appris cela hier (
http://www.phpfrance.com/forums/voir_su ... 0-asc-.php)
Maintenant, ce que je voudrais, c'est récupérer le texte des commentaires, sans les balises. Et la (le ?) regex "#<!--.*?-->#" récupère le texte entouré des balises "<!--" et "-->"
Posté : 05 août 2005, 11:45
par ouckileou
alors il faut utiliser les parenthèses capturantes :
preg_match_all('#<!--(.*?)-->#',$content,$commentaires, PREG_PATTERN_ORDER);
echo '<pre>';
print_r($commentaires[1]);
echo '</pre>';
à tester
int preg_match_all ( string pattern, string subject, array &matches [, int flags [, int offset]] )
PREG_PATTERN_ORDER
L'ordre est tel que $matches[0] est un tableau qui contient les résultats qui satisfont le masque complet, $matches[1] est un tableau qui contient les résultats qui satisfont la première parenthèse capturante, etc.
Posté : 05 août 2005, 12:06
par h2o
Voici le code qui donne le résultat escompté.
if (file_exists("index.txt"))
{
$content = file_get_contents("index.txt");
preg_match_all('#<!--(.*?)-->#',$content,$commentaires, PREG_PATTERN_ORDER);
foreach ($commentaires[1] as $commentaire)
{
print $commentaire . "\n" ;
}
}
Merci