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 :

[ERREUR][EXPRESSIONS REGULIERES] replacer une chaine par une autre


Sujet :

Langage Perl

  1. #1
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut [ERREUR][EXPRESSIONS REGULIERES] replacer une chaine par une autre
    Bonjour,

    je fais un scripte pour modifier automatiquement des requetes SQL dans des centaine de fichier .pc.
    Je localise ma requete avec une expression régulière, je la transforme avec une autre... Tout ce passe bien, et ensuite je remplave la requete d'origine par la requete modifié avec l'expression régulière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resCODE =~ s/$tmpREQUETE/$resTMP/gm ;
    Ca marche sur quelques fichiers et ensuite ça plante (toujours au même endroit), pendant l'exécution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Quantifier follows nothing in regex; marked by <-- HERE in m/EXEC SQL
            SELECT  count(* <-- HERE )
            INTO
            :Db_Current:ind_Current
            FROM all_all_tables WHERE table_name = 'INFO_ELMT';/ at gestionDesIndicateurs.pl line 242, <IN> line 80483.
    voici le requête matchée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    EXEC SQL
            SELECT  count(*)
            INTO
            :Db_Current:ind_Current
            FROM all_all_tables WHERE table_name = 'INFO_ELMT';
    Il semble donc que c'est l'étoile contenue dans la chaine qui fait tout foiré mais je ne sais pas comment éviter ça...
    En fait il faudrai juste remplacer une chaine par une autre...

    merci de votre aide...

    ++floanne.

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Bon je vois d'où peut venir le problème. L'etoile est un caractère spéciale, il faut donc la protéger par un backslah.
    Tu peux protéger $tmpREQUETE avec quotemeta qui protégera tous les caracteres spéciaux
    Donc tu fais $tmpREQUETE = quotemeta($tmpREQUETE);
    Ensuite, tu ne peux pas faire la même chose avec $resTMP car perl te mettra des "\" dans tes nouvelles requetes.
    Donc à toi de t'assurer de ne pas en avoir dans $resTMP (caractères spéciaux)
    puis tu peux faire ensuite
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $resCODE =~ s/$tmpREQUETE/$resTMP/gm;
    sans souci.

  3. #3
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut
    ok merci ça marche très bien !

    ++floanne.

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 31/07/2007, 01h13
  2. Réponses: 3
    Dernier message: 13/01/2007, 14h05
  3. Réponses: 3
    Dernier message: 05/01/2007, 15h50
  4. Réponses: 3
    Dernier message: 26/07/2006, 14h58
  5. remplacement d'une chaine par une autre
    Par zalalus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/07/2006, 10h09

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