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

Langages de programmation Discussion :

Regex: obligation de présence d'un/de caractère(s)


Sujet :

Langages de programmation

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut Regex: obligation de présence d'un/de caractère(s)
    Bonjour,

    Je réalise une regex pour un petit framework db.
    Pour écrire la condition where j'ai écrit ceci en regex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?<table_name>\w+:)?(?<column_name>\w+)(?<operator><?>?=?%?)
    Le groupe operator laisse donc un choix parmi
    Le hic, c'est que j'aimerais bien indiqué une obligation de présence de cet opérateur.

    J'ai fait une liste de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a<>
    a%
    a<
    a>
    a<=
    a>=
    a=
    a==
    a%=
    a=<
    a
    Le dernier ne comporte pas d'opérateur et match quant même.

    Donc, comment faire pour rendre la présence d'au moins un élément du groupe operator obligatoire et aussi interdire des choses comme <>= qui sont aussi valides.

  2. #2
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 426
    Par défaut
    Citation Envoyé par xarkam Voir le message
    Bonjour,

    Je réalise une regex pour un petit framework db.
    Pour écrire la condition where j'ai écrit ceci en regex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?<table_name>\w+:)?(?<column_name>\w+)(?<operator><?>?=?%?)
    C'est en quel langage (il y a parfois quelques différences)
    Normalement, ? signifie 0 ou 1 occurrence du motif précédent.
    Si il doit y en avoir un et un seul, il n'y a pas besoin de ?
    Si il doit y en avoir un ou plus, c'est le "+" qui doit être utilisé.

  3. #3
    Membre très actif
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    C'est destiné au C#, mais je réalise la regex avec expresso.
    Je met des ? car je peut avoir des <= ou >= mais je ne peut pas avoir du =% ou du %< ou %>

    En fait je ne peut pas définir une condition WHERE sans opérateur.
    WHERE column_name ORDER ne donne pas une sql correcte.

    En C# si je lui dit de matcher les groupes, il prendra en compte un groupe sans opérateur et créera une mauvaise requête.

    A la base j'avais fait (<?>?)?=|% mais je ne matchais pas sur le %

  4. #4
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 426
    Par défaut
    J'aurais tendance à faire un truc du genre
    [><=]?=|<>|%

  5. #5
    Membre très actif
    Profil pro
    Développeur .NET
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    Je vais tester ca dans expresso.

    Edit: j'ai testé et ton code laisse juste passer ==
    Mais c'est pas mal déjà.

  6. #6
    Membre éclairé

    Inscrit en
    Novembre 2008
    Messages
    426
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 426
    Par défaut
    Citation Envoyé par xarkam Voir le message
    Je vais tester ca dans expresso.

    Edit: j'ai testé et ton code laisse juste passer ==
    Mais c'est pas mal déjà.
    Ben oui, il laisse passer == parce qu'il m'a semblé être dans ta liste...
    [><]?=|<>|%
    ne le laissera pas passer :-)

Discussions similaires

  1. [PowerShell] Regex - Probleme saut de ligne remplacement de caractère
    Par lucas057 dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 04/12/2014, 15h25
  2. Réponses: 4
    Dernier message: 31/08/2010, 18h45
  3. Réponses: 0
    Dernier message: 06/02/2010, 09h13
  4. [Regex] Récupérer une chaîne qui suit un caractère spécial
    Par dev197 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 30/09/2009, 13h01
  5. [VS.net] Vérifier le présence d'un caractère dans une chaine
    Par arnolem dans le forum Windows Forms
    Réponses: 15
    Dernier message: 10/09/2005, 16h19

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