Placer le texte des commentaires dans une variable

h2o
Eléphant du PHP | 81 Messages

05 août 2005, 10:41

Je suis toujours aussi débutant :oops:

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 ?
Jean-Marie Hoornaert - h2o
Aide au développement et formation FileMaker, xml et AppleScript

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2005, 10:43

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

Mammouth du PHP | 19672 Messages

05 août 2005, 10:44

On peut t'aider à corriger un code déjà commencé, pas faire le code à ta place... mais tu ne nous montres rien à corriger :-k
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

h2o
Eléphant du PHP | 81 Messages

05 août 2005, 11:19

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.
Jean-Marie Hoornaert - h2o
Aide au développement et formation FileMaker, xml et AppleScript

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2005, 11:21

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

Mammouth du PHP | 19672 Messages

05 août 2005, 11:25

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 ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2005, 11:29

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 ;
}

h2o
Eléphant du PHP | 81 Messages

05 août 2005, 11:31

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" ;
          }
     }
}
Jean-Marie Hoornaert - h2o
Aide au développement et formation FileMaker, xml et AppleScript

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2005, 11:35

question : tu veux simplement les récuper ou aussi les enlever du texte ?

h2o
Eléphant du PHP | 81 Messages

05 août 2005, 11:38

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 "-->"
Jean-Marie Hoornaert - h2o
Aide au développement et formation FileMaker, xml et AppleScript

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 août 2005, 11:45

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.

h2o
Eléphant du PHP | 81 Messages

05 août 2005, 12:06

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
Jean-Marie Hoornaert - h2o
Aide au développement et formation FileMaker, xml et AppleScript