Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/04/2007, 15h32   #1
Invité de passage
 
Inscription : octobre 2006
Messages : 17
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 17
Points : 3
Points : 3
Par défaut Lecture structurée d'un string

Bonjour,

Je dois en fait parser un fichier PHP contenant les lignes suivantes :
Code :
1
2
3
4
5
6
/* Explication */
define("MAVARIABLE", "Sa valeur", true) ;
define("UNEAUTRE", "Une autre valeur", true) ;
 
/* Autre commentaire */
define("ENCOREUNE", "Coucou", true) ;
Mon but est de récupérer dans un tableau les deux éléments qui m'intéressent pour chaque ligne, à savoir le nom de la variable (ex : MAVARIABLE) et sa valeur (ex : Sa valeur). Il faut évidemment détecter les lignes de commentaires pour les sauter.

Je me doute qu'il faut employer la fonction ereg(), mais j'ai du mal avec cette fonction !!

J'image que c'est quelque chose du style :
Code :
ereg("define\(\"((.*))\", \"((.*))\"", $line, $result) ;
et que mes deux résultats devraient être dans $result[0] et $result[1] ! Mais ça ne fonctionne pas... Je sais que c'est la bonne fonction, mais je ne la maitrise vraiment pas !

Quelqu'un pourrait-il m'aider ?

Un grand merci,
dachu
dachu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/04/2007, 08h20   #2
Membre habitué
 
Avatar de daniel61
 
Inscription : décembre 2006
Messages : 109
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 109
Points : 120
Points : 120
Citation:
Envoyé par dachu
Je me doute qu'il faut employer la fonction ereg(), mais j'ai du mal avec cette fonction !!
malheureusement, je suis obliger de t'informer que ereg() et ses fonctions soeurs sont actuellement en mauvaise santé... d'ailleurs il semblerait qu'un certain PHP6 ait commencé à organiser leurs funérailles paix à leurs âmes.

Citation:
Envoyé par dachu
J'image que c'est quelque chose du style :
Code :
ereg("define\(\"((.*))\", \"((.*))\"", $line, $result) ;
et que mes deux résultats devraient être dans $result[0] et $result[1] !
preg_match_all() est probablement la fonction qui te paraitra la + sexy

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$line='
/* Explication */
define("MAVARIABLE", "Sa valeur", true) ;
define("UNEAUTRE", "Une autre valeur", true) ;
 
/* Autre commentaire */
define("ENCOREUNE", "Coucou", true) ;
';
 
if(preg_match_all('#define\s*\(\s*"(.*)"\s*,\s*"(.*)"#',$line,$result)) {
  echo '<pre>';
  print_r($result);
  echo '</pre>';
}
avec PCRE, il faut un caractère pour délimiter l'expression, dans ce qui précède j'ai utilisé #. PCRE a besoin d'une délimitation parcequ'il est possible d'ajouter des options lorsque nécessaire. tu dois reconnaitre le reste de l'expression, car c'est la tienne où j'ai ajouté des \s* un peu partout, parceque les programmeurs sont des petites bêtes qui aiment tapper sur spacebar.

le résultat sera un array contenant 3 array... [0] contiendra les chaines ayant satisfait l'expression au complet... [1] contiendra seulement les occurences de la première parenthèse (nom de la constante)... [2] contiendra bien entendu les occurences seulement de la seconde parenthèse.
daniel61 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h00.


 
 
 
 
Partenaires

Hébergement Web