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 :

supression de * dans une chaine (exp. regulière)


Sujet :

Langage Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut supression de * dans une chaine (exp. regulière)
    Bonjour
    j'ai lu la FAQ sur les expressions régulières et pourtant au moment de m'en servir, j'ai un problème

    J'ai une saisie du type
    233*880234*
    Je veux obtenir
    2388023
    (en fait suppression de chaque * avec caractères précedent)
    de même si j'avais 234** => je ne veux plus que 2

    J'ai essayé (au moins pour la suppression d'une étoile et du caractère le précedent)

    for ($chaine) {
    s/^[0..9]\*//g;
    }
    ou $input =~ s/[0..9]\*//g;

    cela ne donne rien.
    est-il possible que cela viennent du fait que ma chaîne ne serait en réalité pas une chaine de caractères mais une suite de chiffres?.
    comment le savoir?
    merci d'avance pour toute réponse

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    427
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 427
    Points : 459
    Points
    459
    Par défaut
    le ^ match le debut de ton string, donc ca n'est pas ce que tu veux.
    de plus c'est [0-9] qu'il faut ecrire et non [0..9] (tu pourrait aussi utiliser \d d'ailleurs)

    pour le cas simple (un seul *), s/[0-9]\*//g; doit marcher
    ensuite pour gerer plusieurs * à la suite tu a la solution de faire un while tant qu'il arrive à remplacer quelquechose:

    1 while s/[0-9]\*//g;

    ainsi si ta chaine est "266**46*"
    le premier passage dans le while donnera ca:
    "26*4"
    et le second donnera ca:
    "24"
    le troisieme passage dans le while laissera la chaine inchangée et sera donc le dernier

    c'est surement plus simple est plus clair de gerer ce genre de cas comme ca plutot qu'avec une regexp complexe
    Recherche staigiaire(s) motivé(s) sur projet perl/reseau a grande echelle. Me contacter par mp.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Merci ça marche comme je veux avec la boucle while

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

Discussions similaires

  1. expression regulières supprimer les doublons de caratéres dans une chaine
    Par karimphp dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/12/2007, 14h26
  2. Réponses: 23
    Dernier message: 16/11/2002, 19h41
  3. [TP]lire une ligne de l'ecran et la stocker dans une chaine
    Par Bleuarff dans le forum Turbo Pascal
    Réponses: 26
    Dernier message: 02/07/2002, 10h08
  4. Réponses: 3
    Dernier message: 12/06/2002, 21h15

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