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 :

Expression régulière qui est dansune chaine de caractère


Sujet :

Langage Perl

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 11
    Points
    11
    Par défaut Expression régulière qui est dansune chaine de caractère
    Bonjour,

    J'ai un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $expr = "s/\s/_/g";
    $chaine =~ $expr;
    car $expr est en fait passé au script en paramètre, or ça ne fonctionne pas...

    si quelqu'un a une idée merci d'avance

  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 Re: Expression régulière qui est dansune chaine de caractère
    Citation Envoyé par arkem
    Bonjour,

    J'ai un truc du genre :

    $expr = "s/\s/_/g";
    $chaine =~ $expr;

    car $expr est en fait passé au script en paramètre, or ça ne fonctionne pas...

    si quelqu'un a une idée merci d'avance
    d'abord, salut,
    puis le code sous balise code, c'est mieux pour la lisibilité.
    de plus, on sait pas ce que tu veux faire, soit explicite et ça ne veut rien dire.

  3. #3
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Regarde ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/bin/perl -w
    $ligne = "acacacaaaccabaaa";
    $e = "/ab+/";
    $total = "if ($ligne"." =~ "."$e) {
        print 'Le motif est trouve.';
    } else {
        print \"Le motif n'est pas trouve.\";
    }";
    eval($total);
    Je crois que tu dois utiliser la fonction eval(). Regarde la doc.
    J'espere que cela va t'aider.

    A+

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    Oui excusez moi pour le manque d'informations.

    But : écrire un script pour renommer des fichiers vie des expressions régulières, avec l'expression régulière passée comme paramètre au script.

    Donc à un moment j'applique mon expression régulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $parametre = "s/\s/_/g"; 
    $chaine =~ $parametre;
    (pour faire en fait : $chaine =~ s/\s/_/g"; )

    Or mon expression n'est pas appliquée.

    J'ai aussi essayé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    eval { $chaine =~ $parametre; }
    mais rien n'y change...
    une idée ?

  5. #5
    Rédactrice

    Avatar de stoyak
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 408
    Points : 1 491
    Points
    1 491
    Par défaut
    il ne me semble pas judicieux de mettre ton expression régulière dans une variable pour ensuite faire
    .
    je me trompe peut-être, mais je ne pense pas que Perl puisse comprendre ton expression
    je ferai plutôt quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $titi = "\s";
    $tata = "_";
    $chaine =~ s/$titi/$tata/g;
    je n'ai pas testé, mais ça me semble plus judicieux ..

  6. #6
    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
    je suis du même avis que stoyak. Et je rajoute qu'il est obligatoire de mettre ton code entre balise code pour une meilleur lisibilité. La prochaine fois, ton thread sera verouillé.
    Reedite ton message et met ton code entre balise.
    Consulte les régles du forum (dans ma signature),
    Merci!!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    merci pour vos réponses.

    oui effectivement c'est mieux de mettre l'expression régulière dans une variable

    par contre le code ci-dessous ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $titi = "\s"; 
    $tata = "_"; 
    $chaine =~ "s/$titi/$tata/g";
    je suppose qu'il y a des problèmes avec les / et les \

  8. #8
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par arkem
    par contre le code ci-dessous ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $titi = "\s"; 
    $tata = "_"; 
    $chaine =~ "s/$titi/$tata/g";
    je suppose qu'il y a des problèmes avec les / et les \
    Et les "

    Le mieux, c'est de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $titi = '\s'; 
    $tata = '_'; 
    $chaine =~ s/$titi/$tata/g;
    Les ' ne permettent pas à Perl d'interpréter le \s à l'intérieur de $titi. Cette chaine n'étant pas interprétée, elle peut servir telle quelle pour l'expression rationnelle.

    Sinon, il ne faut pas mettre de " autour de l'expression rationnelle utilisée avec l'opérateur =~.

    Bon Perl

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    merci pour ta réponse

    mais si je passe $titi et $tata en paramètre au script il seront considérés comme des chaines et donc le pb se repose non ?

  10. #10
    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
    fais un script test et essaye

  11. #11
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Citation Envoyé par arkem
    mais si je passe $titi et $tata en paramètre au script il seront considérés comme des chaines et donc le pb se repose non ?
    Oui et non ...

    Oui il seront considérés comme des chaines.
    Non le problème ne devrait pas se poser.

    Lorsqu'une chaine est lue (paramètres, E/S fichiers, etc), les caractères "escapés" par un \ ne sont pas interprétés. Les chaines lues contiennent bien le \ et le caractère qui suit.

    Il en est de même lorsque la chaine est constante, dans le script, et placée entre ' (simples quotes).

    Par contre, lorsque la chaine est constante, dans le script, et placée entre " (doubles quotes), alors l'interpréteur Perl fait un peu de boulot et remplace la paire (\, caractère qui suit) par un caractère unique, le plus souvent un caractère de contrôle, comme le \n qui introduit un saut de ligne.

    Bon Perl.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 21
    Points : 11
    Points
    11
    Par défaut
    merci pour toutes ces infos, je teste entre midi et 2

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/11/2009, 16h19
  2. [RegEx] Expression régulière qui ne fonctionne pas ?
    Par MaTHieU_ dans le forum Langage
    Réponses: 5
    Dernier message: 23/07/2007, 15h43
  3. Réponses: 23
    Dernier message: 13/11/2006, 04h33
  4. Expression régulière, laquelle est la bonne ?
    Par JackBeauregard dans le forum Langage
    Réponses: 2
    Dernier message: 06/07/2006, 19h20
  5. [RegEx] Expression régulière et longueur de chaine
    Par cbroissa dans le forum Langage
    Réponses: 30
    Dernier message: 23/05/2006, 20h33

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