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

Shell et commandes GNU Discussion :

[bash] Opérateur de comparaison regex =~


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Par défaut [bash] Opérateur de comparaison regex =~
    Bonjour à tous,

    Je souhaite vérifier qu'une chaine de caractère correspond à une regex.
    Apparemment, la facon la plus simple est bash

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [tisnoopy@serveur ~]$ [[ "Abcde" =~ [a-z]* ]] ; echo $?
    0
     
    [tisnoopy@serveur ~]$ [[ "abcde" =~ [a-z]* ]] ; echo $?
    0
     
    [tisnoopy@serveur ~]$ bash --version
    GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
    (...)
    Je ne comprends pas car la 1ère tentative est censée renvoyer 1, non ?

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 338
    Par défaut
    Bonjour,

    Pourquoi est-ce que la première devrait retourner 1, ta chaîne a bien au moins 0 caractères entre "a" et "z" ?

  3. #3
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    et possiblement que ce que tu cherches à vérifier c'est que "l’intégralité des caractères contenus dans la string est dans l'intervalle [a-z]", auquel cas il faut le préciser avec les délimiteurs de chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [[ "Abcde" =~ ^[a-z]*$ ]]; echo $?
    1
    l'option --color de grep permet de visualiser facilement l'impact d'une regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ echo "Abcde" | grep -P --color=always "^[a-z]*$; echo $?"
    (pas de correspondance, donc rien à afficher)
    1
    $ echo "Abcde" | grep -P --color=always "[a-z]+"; echo $?
    Abcde
    0

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 338
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 338
    Par défaut
    Peut-on considérer que la chaîne vide entre dans l'intervalle ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [[ "" =~ ^[a-z]*$ ]]; echo $?
    0

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    c'était la subtilité laissée en exercice

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 25
    Par défaut
    J'ai compris les 2 erreurs que j'ai fais

    - La mauvaise utilisation du quantifier, il me fallait exclure zéro donc + au lieu de *
    - La non délimitation de ma chaine par ^ et $

    Merci à vous 2 pour l'aide.

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

Discussions similaires

  1. PB d'opérateur de comparaison
    Par fxleo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 23/11/2006, 16h19
  2. LIKE et opérateurs de comparaison
    Par celeamas dans le forum Requêtes
    Réponses: 2
    Dernier message: 23/10/2006, 14h01
  3. Pb avec l'opérateur de comparaison IN
    Par petitnuage dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/06/2006, 16h13
  4. implémentation des opérateurs de comparaison
    Par niko8181 dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 28/04/2005, 11h58
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

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