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 :

Aide pour une REGEX [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut Aide pour une REGEX
    Salut a tous,

    j'ai besoin d'aide pour une regex.

    En faites j'ai une chaine de caractère dans laquelle je veut tester la présences de plusieurs motclé (le nombre est variable, je les stock dans un tableaux).

    Je veut donc faire un preg_match sur cette ligne en testant si CHACUN des motclès est bien présents. Jusque la c'est facile, le seul problème c'est comment faire pour dire que l'ordre d'apparition du mot n'a pas d'importance?

    En gros je veut faire comme les LIKE %motcle% de SQL.

    Vous avez des idées?
    manganimes (en construction) -
    zemanga

  2. #2
    En attente de confirmation mail Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 129
    Points
    129
    Par défaut
    preg_match('/mot01|mot02|mot03|mot04/g', $text);

  3. #3
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    a oki merci, mais ca ne fera pas exactement ce que je veut. Car je veut que chaque mot soit présent.

    Par exemple j'ai une chaine de caractère dans laquelle je veut savoir si il ya mot1, mot2 et mot 3.

    Il doit donc me renvoyer true pour les motif suivant:

    mot1 blabla mot2 bla bla mot3
    mot2 blabla mot1 bla bla mot3
    mot3 blabla mot2 bla bla mot1
    ...

    Avec cette methode il me renvera true si j'ai ce motif:

    mot1 blabla mot1 bla bla mot1

    alors que je ne le souhaite pas.
    manganimes (en construction) -
    zemanga

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Citation Envoyé par gd_dev
    preg_match('/mot01|mot02|mot03|mot04/g', $text);
    Je ne connais pas l'option "g", a quoi ca correspond ?

    php.net ne connait pas non plus d'ailleurs.

    Pour ton probleme Death83, a part la methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (preg_match('/mot1/', $texte) && preg_match('/mot2/', $texte) && preg_match('/mot3/', $texte)...) {
    ...
    }
    Je vois pas comment tu peux faire ca avec une seule regexp...

    Tu peux faire un OU avec :

    faire un ET avec :

    mais difficilement mixer les 2... ou alors tu construit toutes les permutations avant en php et tu balance un truc horrible du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '/(mot2.*mot1|mot1.*mot2)/'
    (j'ai réduit l'exemple a 2 mots, parce que ca devient lourd meme avec 3 ;o)

  5. #5
    En attente de confirmation mail Avatar de gd_dev
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2003
    Messages : 79
    Points : 129
    Points
    129
    Par défaut Vous avez vu juste Fladnag
    En effet, l'option /g n'est pas valide en PHP. Les vielles abitude de Perl.

    Pour info, cette option permet de ne pas arrêter la recherche quand l'expression trouve une réponse. On peu ainsi compté combien de foix le mot existe.

    Plus d'info : http://www.anaesthetist.com/mnm/perl/regex.htm

    Si non, pour le problème de Death83 je pense que Fladnag a donné toutes les réponses possibles.

    Salutation

  6. #6
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    ok, je comprends mieux ;o)

    en fait, j'en ai peut etre oublié une qui me vient maintenant que tu parles de la signification de l'option g en perl

    Tu pourrais faire un "ou" (mot1|mot2|mot3) avec un preg_match_all

    puis recuperer la liste des resultats, dédoublonner le tableau avec array_unique et faire un array_diff pour verifier que tout les mots sont bien présents par rapport a un tableau des mots recherchés (array('mot1', 'mot2', 'mot3'))

  7. #7
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Merci j'ai opter pour la méthode avec plusieurs regex apres je regarde si une d'entre elle est false pour savoir si la chaine est correcte ou pas.

    Merci
    manganimes (en construction) -
    zemanga

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

Discussions similaires

  1. [RegEx] Aide pour une regex
    Par tnarol dans le forum Langage
    Réponses: 3
    Dernier message: 25/03/2011, 16h47
  2. aide pour une regex
    Par casp13 dans le forum Langage
    Réponses: 3
    Dernier message: 21/02/2008, 09h41
  3. [RegEx] Besoin d'aide pour une regex
    Par vallica dans le forum Langage
    Réponses: 3
    Dernier message: 20/09/2006, 08h50
  4. [RegEx] Aide pour une regex
    Par pj69100 dans le forum Langage
    Réponses: 6
    Dernier message: 29/08/2006, 19h19
  5. [RegEx] Aide pour une REGEX svp
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 12/07/2006, 17h41

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