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 :

Imbriquer 2 conditions dans la même expression : une inclusion et une exclusion [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 29
    Points
    29
    Par défaut Imbriquer 2 conditions dans la même expression : une inclusion et une exclusion
    Bonjour à tous,

    Je suis complètement néophyte en regex, néanmoins je dois en construire une. Mais je rame.

    En fait, je me suis fait rapidos une culture en regex et ça va à peu près. Mais je bute sur un truc simple. Je dois tester 2 conditions dans la même expression et je ne trouve pas la syntaxe pour le faire.

    La première condition cherche à matcher une chaîne. Mais la deuxième veut exclure le matching d'une autre chaîne. Et je ne peux pas coder ça en 2 lignes. Je n'ai droit qu'à une seule expression.

    Exemple : soit la chaîne "This is an example"


    Les conditions que ma chaîne doit remplir sont les suivantes :

    1- la chaîne doit se terminer par le mot "example". j'utilise donc 2- Mais la chaîne ne doit pas commencer par le mot "This". J'imaginais donc utiliser Rien que là, je ne suis pas sûr de moi.

    Mais le pire, je dois imbriquer les conditions 1 et 2 dans la même expression. Et là, je suis coincé malgré mes recherches...

    Merci pour vos lumières.

    ++

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Salut


  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 29
    Points
    29
    Par défaut
    Génial, ça fonctionne nickel. Merci beaucoup.

    $ pour termine par.
    ^ pour ne contient pas.

    Mais le reste c'est du chinois (point d'interrogation, d'exclamation, point tout court, parenthèses, +, etc.).

    Une petite explication du reste de cette syntaxe m'aiderait pour l'avenir. C'est possible ?

    Merci.

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    http://fr2.php.net/manual/fr/book.pcre.php

    Dans
    Fonctionnement des expressions rationnelles
    il faut regarder:
    Accent circonflexe et Dollar
    Assertions
    Répétitions





    Les caractères dans une RE n’expriment pas des plages de caractères mais des positions dans la chaîne explorée.

    ^ signifie: la chaîne de longueur nulle qui est tout à fait en tête

    $ signifie: la chaîne de longueur nulle située tout à fait à a fin

    (?!This) signifie: les caractères qui suivent cette position ne doivent pas être la suite de caractères ’This’

    Donc ^(?!This) signifie: juste aprè le tout début, il ne doit pas y avoir ’This’. Mais si ’This' commence à la deuxième position, ^(?!This) sera vérifiée et n’empêchera pas le matching total.



    Important, car ça a du mal à rentrer :

    [] signale une seule position.

    [aku*] indique qu’à la position où se trouve ces crochets, le caractère de la chaîne explorée pourra être soit 'a' soit 'k' soit 'u' soit '*'

    De même, [^8yr] sigifie qu’à la position représentee, LE caractère de la chaîne ne pourra pas être '8', ni 'y' , ni 'r'. Ça ne veut absolument pas dire que ça interdit le mot ’8yr’.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 29
    Points
    29
    Par défaut
    Merci pour l'explication.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 29
    Points
    29
    Par défaut
    Citation Envoyé par eyquem Voir le message
    Salut

    Bonjour,


    Je reviens sur ce code après un besoin plus précis : que faire si ça ne doit commencer, ni par This, ni par That, mais toujours se terminer par example , et toujours dans la même regex unique ?

    Merci pour votre aide.

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ca reste dans le même esprit, le plus dur était fait...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reg = '/^(?!This|That).+?example$/';

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 76
    Points : 29
    Points
    29
    Par défaut
    Merci. Effectivement.
    Je ne sais pas pourquoi, suis pas inculte en langages et syntaxes, mais avec les regex, je rame un peu.

    En tous les cas, merci.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. [WD18] Metre une colonne d'une Table sur une ligne d'une autre Table
    Par Totophe2 dans le forum WinDev
    Réponses: 2
    Dernier message: 22/11/2013, 12h58
  3. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 12h59
  4. Réponses: 2
    Dernier message: 04/01/2010, 10h02
  5. [CR 7] Erreur Tous Les Champs Ne Sont Pas Dans La Même Expression D'Index ?
    Par clementratel dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 23/01/2009, 12h39

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