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 05/12/2011, 17h08   #1
Invité régulier
 
Inscription : avril 2010
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 44
Points : 6
Points : 6
Par défaut Décodage d'une chaine de connexion

Bonjour,

Voilà donc mon problème;
J'essaie d'optimalement décoder des chaînes de connexions qui arrivent dans plusieurs formats, et j'ai considéré les REGEX pour m'aider a la tâche.

En gros, peut importe le format et les infos de la chaîne, j'ai besoin d'une info comprise entre "MOTFIXE=" et le premier ";" ou fin de ligne trouvé.

Mon problème réside dans le fait que le regex est un peu gourmand et ramasse tout ce qu'il peut. Et je n'arrive pas a faire quelque chose de correct pour ramassé seulement l'info dont j'ai besoin.

Exemple:
Code :
"Data Source=test;User ID=login;Persist Info=true;Password=bidon"
J'ai donc quelque chose qui ressemble à ceci:
Code :
(?<=USER ID\=).*(?=\;|$)
Qui récupère donc la chaine précédé par "User ID=" qui se termine par un ; ou une fin de ligne. On comprendra que dans l'exemple, je me ramasse avec:
Code :
"login;Persist Info=true;Password=bidon"
J'ai chercher un peu sur le web et je trouve des trucs avec des REGEX "non-greedy" avec des jeux de "?", sauf que je n'arrive pas a machiner la chose pour la faire fonctionner comme je le veux.

Donc je viens voir ici si quelqu'un peut me donner un petit coup de main pour compléter ce petit REGEX et finalisé mon bout de code


Merci d'avance,

Amuny,
Amuny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 17h25   #2
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Citation:
Envoyé par Amuny
le regex est un peu gourmand et ramasse tout ce qu'il peut [...] J'ai chercher un peu sur le web et je trouve des trucs avec des REGEX "non-greedy" avec des jeux de "?"
Ton motif est correct et fonctionne TEL QUEL si tu utilises l'option (*) U (PCRE_UNGREEDY)
Code :
preg_match('/(?<=USER ID=).*(?=;|$)/iU',$str,$match);
sinon, on ajoute le ? qui permettra au moteur de s'arrêter au premier point-virgule ou à la fin de la chaine.

Code :
preg_match('/(?<=USER ID=).*?(?=;|$)/i',$str,$match);
(*) Options disponibles pour les expressions rationnelles
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2011, 17h33   #3
Invité régulier
 
Inscription : avril 2010
Messages : 44
Détails du profil
Informations forums :
Inscription : avril 2010
Messages : 44
Points : 6
Points : 6
Ah ouais quand même, je me sens presque con, j'était en plein dessus, je mettais juste pas le "?" au bon endroit...

merci bien
Amuny est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h34.


 
 
 
 
Partenaires

Hébergement Web