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 Perl Discussion :

Comment supprimer des métacaractères dans une chaine de caractères ? (Expressions régulières)


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 14
    Points : 17
    Points
    17
    Par défaut Comment supprimer des métacaractères dans une chaine de caractères ? (Expressions régulières)
    Bonjour à tous et à toutes !!

    Alors voilà j'ai ce message d'erreur qui s'affiche dans mon terminal :

    Invalid [] range "l-c" in regex; marked by <-- HERE in m/3-oxoacyl-[acyl-c <-- HERE arrier-protein] synthase 2/ at ./enriched_hash.pl line 128, <FICHIER> line 5586.

    C'est tout à fait normal puisque dans une chaîne de caractère il y a la présence de crochets. Voici cette chaîne de caractères :
    3-oxoacyl-[acyl-carrier-protein] synthase 2

    Et voici la comparaison que je fais :
    unless ( $$ref_hash{$line[0]}{'function'} =~ m/$line[12]/) {
    ... instructions ...
    }

    $line[12] correspond à ma chaîne de caractères. Je vérifie si ma table de hashage contient cette chaîne de caractère. Mais le soucis c'est que cette chaîne contient
    un métacaractère.


    Comment je peux le supprimer ? Et sinon l'alternative est comment je peux passer outre ce problème ?
    J'imagine qu'il faut bien que j'utilise un backslash mais comment ?

    si vous avez besoin de plus d'infos pour que je puisse résoudre mon problème, dites le moi

    Merci par avance de vos réponses

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 469
    Points
    12 469
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    si tu as des crochets dans ta regex, ils sont considérés comme contenant une classe de caractères et, dans une classe de caractères, un tiret ("-") indique un intervalle de chiffres ou de lettres. Et "l-c" n'est pas un intervalle valide.

    Il faut préfixer les crochets (ou, du moins, le crochet ouvrant) par un backslash:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /3-oxoacyl-\[acyl-carrier-protein\] synthase 2/
    Il existe une fonction Perl qui ajoute les backshlashes partout où c'est nécessaire dans une chaîne de caractère: quotemeta (http://perldoc.perl.org/functions/quotemeta.html), si bien que tu n'as pas besoin de le faire toi-même.

    Tu peux également essayer les balises \Q et \E:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /\Q3-oxoacyl-[acyl-carrier-protein] synthase 2\E/
    Cela dit, comme tu as l'air de faire une recherche littérale de sous-chaîne, l'utilisation de la fonction index est sans doute préférable.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Encore merci pour ta réponse rapide

    J'ai regardé ce que tu m'as conseillé, et c'est pas mal du tout !

    Merci encore !

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

Discussions similaires

  1. Supprimer des mots dans une chaine de caractères
    Par Sanceray3 dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2009, 11h04
  2. [AC-2000] Comment filtrer des mots dans une chaine de caractères
    Par bionet dans le forum Requêtes et SQL.
    Réponses: 11
    Dernier message: 21/07/2009, 18h16
  3. Réponses: 1
    Dernier message: 07/04/2009, 11h21
  4. Comment suprimer des caractere dans une chaine.
    Par daduck dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/08/2008, 10h35
  5. Comment supprimer des "0" dans une liste
    Par solorac dans le forum Excel
    Réponses: 4
    Dernier message: 04/09/2007, 12h22

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