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

C# Discussion :

Expression réguliere simple qui ne passe pas, hallucinant !


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut Expression réguliere simple qui ne passe pas, hallucinant !
    Bonjour,

    Serait ce le syndrome du vendredi après midi?
    J'hallucine complètement sur les résultats que j'obtiens avec mon expression réguliere, pourtant simple :

    Expression :
    quelques valeurs à tester
    Je m'attend à "75", j'obtiens "" !

    Je m'attend à "757" et j'ai bien "757" (dingue non?)

    Voici comment je lirai mon expression réguliere dans le cadre d'une recherche:
    Recherche moi au moins un caractere numérique (de 0 à 9) qui suit le caractere ':' et qui précéde le caractere '}'
    Du coup j'ai l'impression de ne rien avoir compris aux expressions régulieres, quelqu'un aurait il une explication?

    Merci

  2. #2
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    Ton expression :

    • "[^:]" => tous les caractères sauf un ':'
    • "[0-9]+" => un chiffre (une fois ou plus)
    • "[^}]" => tous les caractères sauf un '}'

    Bah effectivement tu t'es mélangé les pinceaux Je n'ai pas une grande maîtrise des Regex, mais je dirais qu'il est nécessaire d'être très précis dans la définition de ces dernières afin de ne pas s'embrouiller

    Essaye celle là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @"^\[{KEYDEF:(?<myKeyDef>\d+)}\]$"
    PS : si tu préfères éviter les groupes nommés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @"^\[{KEYDEF:(\d+)}\]$"

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    En effet je n'ai pas été tres clair concernant ma requette sur ce forum

    Je cherche à extraire la valeur numérique de ma chaine en m'assurant au passage que cette valeur numérique soit bien précédée d'un ':' puis suivie d'un '}'

    Je comprend mieux maintenant mon erreure, avec ma regex "[^:][0-9]+[^}]"

    si je lui rentre une chaine invalide :
    "[{KeyDef:a123b}]"

    elle me retournerai : a123b (vu que a n'est pas un ':' et b n'est pas un '}')

    Arg décidement, j'ai encore beaucoup à apprendre de Regex :s
    Je vais tenter de comprendre ce que tu as ecrit, autrement, je ne vois pas comment faire autrement que passer par une succession de Regex éliminant petit à petit les valeurs non désirées. (probleme que je rencontre souvant d'ailleur)

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Merci eusebe19; grace à tes indices, j'ai trouvé l'expression qu'il me fallait :
    Je regarderai ce week-end le role de (\d+) dans le cadre d'une recherche, c'est la notion qu'il me manquait jusqu'à aujourd'hui.

  5. #5
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Re.

    Deux excellents tutoriels à ce sujet :


    Bon courage

  6. #6
    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
    Je regarderai ce week-end le role de (\d+) dans le cadre d'une recherche, c'est la notion qu'il me manquait jusqu'à aujourd'hui.
    Non, ce n’est pas à ce niveau qu’il y avait un problème. Écrire \d ou [0-9] c’est kif kif pareil.

    Ce qui est bizarre, c’est d’utiliser un symbole exprimant exactement le contraire de ce qu’on veut spécifier:

    [^:] quand on veut dire “là il doit y avoir :

    et [^}] quand on veut dire “là ce doit êre }



    Ce qu’il faut comprendre, c’est qu’un moteur de regex fait des essais pour trouver un matching tant qu’il peut faire des essais. Quand l’algorithme (que je ne connais pas) qui régit le moteur d’une regex particulière ( regex ayant été compilée à partir d’une RE (regular expression) ) a épuisé toutes les possibilités d’essais , le résultat est “Rien trouvé“.

    Sinon, au cours des essais, il peut trouver une solution à laquelle on ne s’attend pas.

    Dans ton cas:

    - "[{KEYDEF:755}]" matche avec "[^:][0-9]+[^}]"
    car [^:] matche avec ’7’ , [^}] matche avec le deuxième ’5’ et [0-9]+ matche avec le premier ’5’

    - "[{KEYDEF:75}]" ne peut pas matcher car il n’y a pas assez de chiffres pour assurer les matchings de [^:] et [^}] ET la portion [0-9]+ dont le ’+’ impose qu’il doit obligatoirement y avoir matching de cette portion

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

Discussions similaires

  1. [Regex] Expression régulière qui ne passe pas avec \.
    Par jsd03 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 10/03/2009, 17h49
  2. Jointure simple qui ne passe pas par les index ?!
    Par souch dans le forum Oracle
    Réponses: 13
    Dernier message: 24/07/2007, 18h03
  3. [method post] argument qui ne passe pas
    Par crevettes59000 dans le forum Langage
    Réponses: 3
    Dernier message: 30/12/2005, 16h11
  4. un truc qui ne passe pas sous firefox ...
    Par SpaceFrog dans le forum Général JavaScript
    Réponses: 39
    Dernier message: 08/11/2005, 16h59
  5. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 11h12

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