Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1923 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] regexp avec caractres spéciaux

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PERL] regexp avec caractres spéciaux

n°1449311
xc0r
Posté le 29-09-2006 à 08:55:37  profilanswer
 

Bonjour à tous!
 
j'ai un petit problème stupide:
j'ai une substitution qui ne veut pas fonctionner lorsque j'ai des "caracteres spéciaux" dans la chaine.
 

Code :
  1. $file = "rep/subdir/00 - [LESS] Various Artists";
  2. $filename = "00_-_[LESS]_Various_Artists"
  3. s/$file/$newfile/;


 
visiblement, à cause du "[", il ne trouve pas la chaine dans $file ...
et n'étant pas un pro de la regexp je ne sias pas trop comment "protéger" les caractères spéciaux...
 
Si qqn à une idée,...

mood
Publicité
Posté le 29-09-2006 à 08:55:37  profilanswer
 

n°1449521
Aricoh
gentil mais fo po pousser
Posté le 29-09-2006 à 11:46:06  profilanswer
 

Bonjour,
 
soit il manque une info intéressante non montrée ici de ton code, soit je vois 2 erreurs :
 
s/$file/$newfile/;
 
1) Où est la variable $newfile ?
 
2) Telle quelle, ta syntaxe applique le remplacement sur la variable $_


---------------
Samsung Galaxy S1 -> Samsung Galaxy S2 -> Samsung Note 2 -> Huawei Ascend Mate 7 -> ZTE Axon 7 -> OnePlus 6T -> Oppo Find X2 PRO
n°1449536
xc0r
Posté le 29-09-2006 à 11:54:23  profilanswer
 

Merci pour ta réponse :)
 
Oui en effet j'ai pas mis tout le code juste la chaine a remplacer et la chaine sensément remplacée.
 
Le script en entier:
 

Code :
  1. find ./ -print | tac | /usr/bin/myrename.pl '($file) = (m|.+/(.+)|); $file = $_ if (!defined($file));($newfile = $file) =~ s/ /_/g; s/$file/$newfile/;'


 
et le script myrename:

Code :
  1. #!/usr/local/bin/perl
  2. #
  3. # Usage: rename perlexpr [files]
  4. ($regexp = shift @ARGV) || die "Usage:  rename perlexpr [filenames]\n";
  5. if (!@ARGV) {
  6.    @ARGV = <STDIN>;
  7.    chomp(@ARGV);
  8. }
  9. foreach $_ (@ARGV) {
  10.    $old_name = $_;
  11.    eval $regexp;
  12.    die $@ if $@;
  13.    rename($old_name, $_) unless $old_name eq $_;
  14. }
  15. exit(0);


 
(tout ça pour renommer récursivement snif)
 
avec  

Code :
  1. find ./ -print | tac | /usr/bin/myrename.pl '($file) = (m|.+/(.+)|); $file = $_ if (!defined($file));($newfile = $file) =~ s/ /_/g; s/(.+)/$newfile/;'


 
$newfile replace bien toute la chaine précédente mais du coup je perd le répertoire et il me renome tout dans le répertoire courant
(par exemple  
toto/tata/titi espace.txt
devient  
titi_expace.txt  
au lieu de  
toto/tata/titi_espace.txt
)
 
ca m'énerve de pas comprend les regexp ! :)
 
Merci!

n°1450006
xc0r
Posté le 29-09-2006 à 21:09:01  profilanswer
 

Bof?

n°1450051
xc0r
Posté le 30-09-2006 à 01:57:35  profilanswer
 

Bon je reformule ma question :)
comment fait on pour "protéger" une string ?
c'est à dire je veux que  
$toto="blablabla[pouet]_(slupr)";
devienne
$toto="blablabla\[pouet\]_\(slupr\)";
pour pas que mes caracters soient interpretés par mes regexp :)
Merci!

n°1450053
xc0r
Posté le 30-09-2006 à 02:11:35  profilanswer
 

Bon, voilà!
suffisait que j'expose clairement mon problème, n'y pense plus pendant une journée, et j'ai trouvé la solution ! (c'est tout couillon en fait comme je le pensais)
Il suffit faire un "quotemeta" sur la chaine !
 
Au final ca me donne ça :
 

Code :
  1. find ./ -print | tac | /usr/bin/myrename.pl '($file) = (m|.+/(.+)|); $file = $_ if (!defined($file));($newfile = $file) =~ s/ /_/g;$file2=quotemeta($file); s/$file2/$1$newfile/;'


 
Merci à vous :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  [PERL] regexp avec caractres spéciaux

 

Sujets relatifs
caractères spéciaux en javascriptOutil pour convertir les caractères spéciaux
Net::SSH::Perl problème d'authentificationCréer des script Perl
Perl et XSDDemande perl chez hébergeur
Probleme de boucle en perl[résolu] [Javascript] Alert et caractères spéciaux
[Perl] rrdtool sortie standard[PERL] PDF::API2 edition de fichier pdf
Plus de sujets relatifs à : [PERL] regexp avec caractres spéciaux


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR