[PERL] Problème regexp \1

Problème regexp \1 [PERL] - Perl - Programmation

Marsh Posté le 10-06-2015 à 15:33:32    

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 :
  1. my $a = '^06([0-9]{8}).*$';
  2. my $b = '+336\1';
  3. my $tel = '0635678396';
  4. $tel =~ s/$a/$b/;
  5. print "$tel\n";

Reply

Marsh Posté le 10-06-2015 à 15:33:32   

Reply

Marsh Posté le 10-06-2015 à 15:37:35    

maxou3513 a écrit :

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 :
  1. my $a = '^06([0-9]{8}).*$';
  2. my $b = '+336\1';
  3. my $tel = '0635678396';
  4. $tel =~ s/$a/$b/;
  5. print "$tel\n";



 
 
:hello:
 
Tu demandes de remplacer $a par $b, mais $a est tout ton numéro !
Essaie :
 

Code :
  1. my $a = '^06';
  2. my $b = '+336';
  3. my $tel = '0635678396';
  4. $tel =~ s/$a/$b/;
  5. print "$tel\n";


Message édité par web_olivier le 10-06-2015 à 15:41:34
Reply

Marsh Posté le 10-06-2015 à 15:50:52    

Tu contourne juste le problème imaginons ce code ci-dessous :
 

Code :
  1. my $a = '^06([0-9]{8})@(.*)$';
  2. my $b = '+336\1\2';
  3. my $tel = '0635678396@gmail.fr';
  4. $tel =~ s/$a/$b/;
  5. print "$tel\n";


 
Je voudrais que $tel retourne +33635678396gmail.fr et pourtant ça ne retourne pas ceci, je voudais savoir comment fonctionne le \1, je ne comprend pas pourquoi il ne marche pas

Reply

Marsh Posté le 10-06-2015 à 16:14:41    

Tu veux aussi supprimer le @ ?


Message édité par web_olivier le 10-06-2015 à 16:14:53
Reply

Marsh Posté le 10-06-2015 à 17:06:48    

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.

Reply

Marsh Posté le 10-06-2015 à 17:49:50    

J'ai pas pigé le truc mais pour ceci

Citation :

Mais le script n'arrive pas à comprendre le \1.


tu ne chercherais pas plutôt $1?

 

exemple pour disons rajouter des apostrophes autour de certains mots (juste pour montrer l'utilisation du $1):

 

s/(mot1|mot2|mot3)/"$1"/g;

 

(edit grammaire...)


Message édité par rat de combat le 10-06-2015 à 18:11:41
Reply

Marsh Posté le 10-06-2015 à 19:45:13    

Code :
  1. my $a = '^06(\d{8})';
  2. my $b = '"+336".$1';
  3. my $tel = '0635678396';
  4. $tel =~ s/$a/$b/ee;
  5. print "$tel\n";


 
l'emploi de ee a la fin fait toute la différence:
le premier e évalue $b en "+336".$1 et le second évalue "+336".$1
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed