rekam
Messages postés122Date d'inscriptionmardi 19 novembre 2002StatutMembreDernière intervention10 mars 2011
-
24 févr. 2010 à 12:30
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 2012
-
24 févr. 2010 à 19:55
Bonjour!
Je cherche depuis un moment un moyen de faire une expression régulière pour résoudre ce genre de cas:
du texte divers {une_string un_param= "une valeur" un_autre="12"} et le texte qui continue, avec éventuellement un autre {autre} sans paramètres.
L'idée étant d'extraire chaque {xxx accompagnés de leur xxx =xxx autant de fois qu'il y en a.
Et... ben c'est pas évident
Voilà ce que j'ai pu faire jusqu'à présent:
$content = "Voir l'exemple ci-dessus";
$reg = "/(\{|%7B)(\w*)( (\w*)=(\w*))*(\}|\%7D)/i";
preg_match_all($reg, $content, $matches, PREG_SET_ORDER);
if ($matches) {
foreach ($matches as $match) {
// récupération du nom de la variable
$index_name = $match[2];
// récupération de la paire clé=valeur
$index_params array($match[4]> $match[5]);
// on fait ensuite du code métier divers
...
}
}
ça fonctionne bien, sauf que je n'arrive pas à récupérer toutes les pairs clé/valeur. Est-ce possible en une seule expression?
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 24 févr. 2010 à 13:04
Et un explode sur ta chaine avec l'espace en séparateur ? suivi d'une boucle sur chacun des éléments qui refait un explode avec le signe = en séparateur ?
Ce ne peut pas te convenir ?
S.
kohntark
Messages postés3705Date d'inscriptionlundi 5 juillet 2004StatutMembreDernière intervention27 avril 201230 24 févr. 2010 à 19:55
Salut Rekam,
Je pense comprendre ce que tu souhaites, cela étant pour tenter de faire une bonne regex il faut être le plus précis possible et étudier toutes les possibilités.
du texte divers {une_string un_param="une valeur" un_autre="12"} et le texte qui continue, avec éventuellement un autre {autre} sans paramètres.
Par exemple :
le biniou en jaune est il toujours un int ? ... ou peut il être une string, un float, ... ?
le bastringue en bleu peut il avoir des espaces, des car spéciaux ?
...
Ce ne sont là que des exemples, mais il est indispensable de le savoir pour mettre en place une regex efficace et la moins consommatrice possible.
Ca serait peut être une bonne idée que tu fournisses un fichier type qui contient toutes les situations possibles.
Indique également la taille de la chaîne à traiter (5 lignes ? 300 ?). Si elle est très faible il n'y a peut être pas lieu de s'embarrasser avec une regex et la piste proposée par Syndrael me semble être une bonne idée.