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 :

[langage] Remplacement d'1 mot


Sujet :

Langage Perl

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Points : 9
    Points
    9
    Par défaut [langage] Remplacement d'1 mot
    Bonjour,

    Je voudrais remplacer mot mais seulement celui ci. Je m'explique par un exemple. Je voudrais remplacer la chaine toto par tata mais seulement ou j'ai le mot toto et pas tototo par exemple.

    Voici un exemple :
    toto tototo --> tata tototo
    toto;tototo --> tata;tototo

    Je ne sais si j'ai bien reussis a vous expliquer.

    Merci par avance,
    Cirdec

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    En utilisant le délimiteur de mot (\b) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $string =~ s/\btoto\b/tata/;
    Rajouter le drapeau g pour remplacer toutes les occurences.


    Julp.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour ta reponse. Cool

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Je viens de trouver un cas ou cela ne fonctionne pas comme "_toto". Il y a donc des cas (avec certains caracteres) ou cela ne fonctionnera pas. Il va falloir ruse (genre \btoto\b | _toto\b). Est ce que tu vois une autre facon de faire ca sinon?

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Comme ceci pour "factoriser" \btoto\b|_toto\b :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $string =~ s/(\b|_)toto\b/tata/g;

    Julp.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Le probleme de faire comme ca c'est que _toto va etre remplacer pas tata alors kil fodrait kil soit remplacer par _tata. Est kil y aurait un moyen de faire ca en une seule fois? Ou faut il que j'appelle la fonction deux fois (la premiere pour remplacer toto et la seconde pour remplacer _toto)? Il y a aussi la meme chose si le _ est apres ma chaine de caractere (toto_).

    Merci.

  7. #7
    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
    Le mieux, c'est alors de factoriser \w et _, et de profiter qu'ils sont mémorisés pour les replacer dans la chaîne de substitution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string =~ s/(\b|_)toto(\b|_)/$1tata$2/g;
    Non ?
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 26
    Points : 9
    Points
    9
    Par défaut
    Je vois. Je pense que je vais faire comme ca. Par contre, je ne sais pas si le "_" est le seul caractere special qui est reconnu comme un mot. Je ne sais pas si c'est le meme cas par exemple pour le caractere "^". Je vais essayer de voir si je trouve quelque chose.

    Merci.

  9. #9
    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 cirdec
    Je vois. Je pense que je vais faire comme ca. Par contre, je ne sais pas si le "_" est le seul caractere special qui est reconnu comme un mot. Je ne sais pas si c'est le meme cas par exemple pour le caractere "^". Je vais essayer de voir si je trouve quelque chose.
    Selon la lecture de perldoc perlre :
    Citation Envoyé par perlre
    \w Reconnait un caractere de "mot" (alphanumerique plus "_")
    ...
    \b Reconnait la limite d'un mot
    Il n'y a donc pas d'inquiétude à avoir. Un caractère de mot, c'est [A..Z] ou [a..z] ou [0..9] ou [_].

    Il me semble même me souvenir que les caractères accentués ne sont pris en compte comme caractère de mot que si la locale le permet (à vérifier).
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

Discussions similaires

  1. [langage] Remplacer du texte dans un fichier
    Par Michaël dans le forum Langage
    Réponses: 9
    Dernier message: 11/03/2005, 15h19
  2. [langage] exp reg: recherche mot ou ensemble de mot
    Par eautret dans le forum Langage
    Réponses: 5
    Dernier message: 14/12/2004, 17h25
  3. [langage] remplacer les %3A, %2F...
    Par ma2th dans le forum Langage
    Réponses: 2
    Dernier message: 13/08/2004, 11h04
  4. [langage] remplacer les caractères d'une chaine
    Par perlaud dans le forum Langage
    Réponses: 14
    Dernier message: 12/05/2004, 11h05
  5. [langage] recuperer le dernier mot dune ligne
    Par kacedda dans le forum Langage
    Réponses: 6
    Dernier message: 29/04/2003, 14h38

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