IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Je n'arrive pas à faire ma regex [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 65
    Points
    65
    Par défaut Je n'arrive pas à faire ma regex
    Bonjour j'ai une regex comme ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    64
    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 : 64
    Points : 96
    Points
    96
    Par défaut
    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 !

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 93
    Points : 65
    Points
    65
    Par défaut
    C'est une super piste, je vais me pencher dessus.
    Merci de ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [RegEx] Je n'arrive pas à faire fonctionner une regex
    Par flyerjet dans le forum Langage
    Réponses: 2
    Dernier message: 24/07/2009, 20h11
  2. [SQL-Server] Je n'arrive pas à faire tourner php avec Sql server (2005)
    Par bluecurve dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/03/2006, 18h50
  3. Une requête que je n'arrive pas à faire
    Par Denti-fritz dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/12/2005, 13h53
  4. Très débutant : je n'arrive pas à faire fonctionner le JDK
    Par miltonis dans le forum Général Java
    Réponses: 20
    Dernier message: 19/10/2005, 21h20
  5. [RegEx] je n'arrive pas à faire deux regex(s?)
    Par sloshy dans le forum Langage
    Réponses: 5
    Dernier message: 17/10/2005, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo