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 28/06/2011, 14h26   #1
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 94
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 94
Points : 31
Points : 31
Par défaut Je n'arrive pas à faire ma regex

Bonjour j'ai une regex comme ci dessous:
Code :
1
2
 
^recherche\/recherche(?:-type-(.+)|-tirelire)?(?:-marque-(.+))?(?:-couleur-(.+))?(?:-taille-(.+))?
qui est censé me recuperer un "type" et/ou une "marque" et/ou une "couleur" et/ou une "taille".

le problème c'est que j'arrive pas à capturer ces 4 valeurs.
un exemple avec cette chaine:

recherche/recherche-type-chausettes-couleur-orange-taille-3

il fait une seul capture:

chausettes-couleur-orange-taille-3

alors qu'il devrait capture uniquement chausettes pour le type et 3 pour la taille.

Quelqu'un à une solution ?

merci de votre aide
Myfred est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 13h40   #2
Membre régulier
 
Homme
Étudiant
Inscription : juin 2011
Messages : 55
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Val d'Oise (Île de France)

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : juin 2011
Messages : 55
Points : 77
Points : 77
Le coté complexe d'une regex c'est ca !

Alors premièrement je t'explique d'ou viens le probleme.

(.+) va chercher à prendre le maximum de caractères pour lesquels c'est vrai ! (donc dans ton cas et c'est le risque d'un (.*) ou (.+), il va renvoyer toute la fin et considérer que la suite n'est pas présente - à cause des '?')
(lorsque la position est identique, l'algorithme renvoie la plus longue chaine répondant au critère.)

Pour contrer ce fait, (je ne sais pas trop comment ca marche), il faut rajouter un '?' comme ca (.+?), ce qui va être le plus court avant le prochain caractères désigné.
Ainsi, pour 'je code en php et en html';
'#je(.+)en#' va renvoyer ' code en php et '
'#je(.+?)en#' va renvoyer ' code '

Cependant je ne suis pas certain que dans ton cas cela fonctionne car tous les termes suivants sont en ( )?
Donc si tu as à peu près compris, sert toi de (.+?) et des tirets qui reviennent entre chaque mot de ta chaine de caractères

Bonne chance !
Avalion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2011, 08h43   #3
Nouveau Membre du Club
 
Inscription : avril 2005
Messages : 94
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 94
Points : 31
Points : 31
C'est une super piste, je vais me pencher dessus.
Merci de ton aide.
Myfred 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 02h17.


 
 
 
 
Partenaires

Hébergement Web