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 :

Backslash dans une regex


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Par défaut Backslash dans une regex
    Bonjour !
    Je suis en train de faire les exercices que vous proposez sur votre site et franchement ils sont tops ! J'étais en train de faire l'exercice sur la calculatrice. En m'inspirant des solutions proposées, j'ai voulu créer une regex mais quelque chose n'allait pas. J'arrive à un problème assez surprenant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if [[ $1 =~ ^[\*\+\-\/]$ ]]
    then
    	echo "Condition vrai"
    else 
    	echo "Condition fausse"
    fi
     
    if [[ $1 =~ ^[\-\/\+\*]$ ]]
    then
    	echo "Condition vrai"
    else 
    	echo "Condition fausse"
    fi
    Quand je teste ces deux fonctions en donnant en paramètre à chaque fois un des opérateurs +, -, * et /, j'ai systématiquement "Condition fausse" pour la première partie de code et "Condition vraie" pour la deuxième partie (quand je donne en paramètre autre chose que ces opérateurs, j'ai bien "Condition fausse").
    Je ne comprends pas vraiment alors que les deux regex me semblent équivalentes. Une idée ? Merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    le / n'est pas un caractère spécial dans une regex; il doit pas être protégé.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Par défaut
    Merci pour ta réponse. J'ai bien enlevé le backslash avant le / mais j'ai toujours le même problème... (d'ailleurs - n'est pas un caractère spécial non plus ?).
    Encore plus étonnant, j'obtiens des différents résultats avec ces deux regex (en mettant des backslash ou pas), je n'arrive pas à comprendre pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [\+\*/-]
    [\+\*-/]

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    si, dans une regex, -, entre [], indique un intervalle.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 9
    Par défaut
    Ha oui effectivement ! Donc j'ai rajouté le backslash pour le - mais toujours le même problème. Une idée ?

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    rgx='^[\*\+/\-]$'; for v in \* + - / bb; do [[ $v =~ $rgx ]] && printf '%s\n' "${BASH_REMATCH[@]}" || echo "$v ne matche pas"; done
    *
    +
    -
    /
    bb ne matche pas
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

Discussions similaires

  1. Mettre une parenthèse dans une regex
    Par Michaël dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 08/11/2006, 19h50
  2. [RegEx] Tout sauf un mot dans une REGEX?
    Par Death83 dans le forum Langage
    Réponses: 4
    Dernier message: 02/08/2006, 11h12
  3. incidence du backslashe dans une chaine
    Par rogerio dans le forum C++
    Réponses: 7
    Dernier message: 01/06/2006, 09h57
  4. Insérer une variable dans une regex?
    Par Death83 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 21/05/2006, 11h28
  5. [RegEx] php et javascript dans une regex
    Par grochenel dans le forum Langage
    Réponses: 7
    Dernier message: 06/12/2005, 22h21

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