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 :

Problème regexp \1


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Problème regexp \1
    Bonjour,

    J'ai un problème avec mon code ci-dessous, je voudrais que $tel me renvoie +33635678396 mais ce programme me renvoie +336\1, je ne comprend pas.
    Merci de m'aider, ça fait un moment que je bloque, je ne trouve pas la solution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $a = '^06([0-9]{8}).*$';
    my $b = '+336\1';
    my $tel = '0635678396';
     
    $tel =~ s/$a/$b/;
     
    print "$tel\n";

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ici, tu essayes de modifier "le numéro complet" par le "préfixe internationale", alors que tu voudrais modifier le "préfixe court" par le "préfixe internationale".

    Pour obtenir ce que tu souhaites, écris plutôt :
    (attention cependant, tout ce qui se trouve entre la fin du numéro et la fin de la ligne sera supprimé).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Ce que je voulais savoir, c'est comprendre pourquoi le \1 ne fait pas son role de remplacer ce qu'il y a dans la parenthèse, car j'ai des centaines de regexps à manipuler et on imagine que la deuxième soit de la forme comme le code ci-dessous, ça ne me renvoie pas encore ce que je veux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        my $a = '^06([0-9]{8})@(.*)$';
        my $b = '+336\1\2';
        my $tel = '0635678396@gmail.fr';
        $tel =~ s/$a/$b/;
        print "$tel\n";

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Ooops... pardonc, je n'avais pas bien lu.

    C'est parce que la partie de substitution est une variable qui contient \1 et que cette variable n'est pas interpolée comme une expression de substitution.

    Si tu écris ceci ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my $a = '^06([0-9]{8}).*$';
    my $b = '+336';
    my $tel = '0635678396';
     
    $tel =~ s/$a/$b\1/;
     
    print "$tel\n";
    ça devrait marcher.

    D'ailleurs, un conseil pour $a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $a = qr/^06([0-9]{8}).*$/;
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui je sais qu'en enlevant le \1 et en le replaçant dans le s///, cela va fonctionner mais mon problème est plus large.
    En gros j'avais un fichier avec des centaines d'expressions régulière de ce type : /^06([0-9]{8}).*$/+336\1/, j'ai donc coupé en deux parties a et b l'expression comme le première exemple que j'ai donné. Il faut que quand je rentre un numéro il le transforme avec la bonne regexp parmi la centaine. Mais le script n'arrive pas à comprendre le \1. Je voulais savoir comment faire pour traiter tous les cas si jamais la regexp suivante était du format de mon deuxième exemple.

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Une idée qui vaut ce qu'elle vaut pour évaluer "à la volée" le contenu de la chaine de substitution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        my $a = '^06([0-9]{8})@(.*)$';
        my $b = '+336%s%s';
        my $tel = '0635678396@gmail.fr';
        $tel =~ s/$a/sprintf($b,$1,$2)/e;
        print "$tel\n";
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

Discussions similaires

  1. problème regexp et accents
    Par umbre42 dans le forum Général Python
    Réponses: 2
    Dernier message: 30/06/2011, 14h14
  2. [RegEx] Problème RegExp, encore un
    Par Ronin dans le forum Langage
    Réponses: 12
    Dernier message: 30/04/2010, 17h26
  3. Problème regexp
    Par L0rent dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 27/04/2006, 11h59
  4. Problème regexp
    Par Yux dans le forum Langage
    Réponses: 8
    Dernier message: 18/02/2006, 19h41
  5. [regexp] petit problème d'expression régulière
    Par LE NEINDRE dans le forum Langage
    Réponses: 14
    Dernier message: 16/12/2005, 10h33

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