supression des espaces de début et de fin dans une chaine [PERL] - Perl - Programmation
Marsh Posté le 17-04-2002 à 15:42:10
Par exemple :
Code :
|
Edit : comme on me le fait remarquer plus bas y'avait une ch'tite coquille... J'ai corrigé le "~=" en "=~"
[jfdsdjhfuetppo]--Message édité par Matafan--[/jfdsdjhfuetppo]
Marsh Posté le 17-04-2002 à 15:50:01
Ou en deux fois (peut etre plus rapide a l'execution ? pas de back-reference...)
$string =~ s/^\s+//;
$string =~ s/\s+$//;
Marsh Posté le 17-04-2002 à 15:54:39
suaf que je comprend pas bien le ~ c'est de la négation sa me pose une erreur.
c'était pour la 1ere réponse . la deuxième solution marche très bien merci.
[jfdsdjhfuetppo]--Message édité par fabriceMerc--[/jfdsdjhfuetppo]
Marsh Posté le 17-04-2002 à 16:04:35
non en fait c'est juste une erreur de syntaxe de la part de matafan c'est !~ qui revoie la valeur négative de =~ ( et pas ~=)
[jfdsdjhfuetppo]--Message édité par fabriceMerc--[/jfdsdjhfuetppo]
Marsh Posté le 17-04-2002 à 16:05:26
non matafan c'est trompe
le tilde signal a Perl qu'il doit utiliser la valeur receptrice comme parametre (est-ce comprehensible ?) C'est à dire qu'il va effectuer une operation sur le contenu de $string et stocker le resultat dans $string. C'est l'equivalent (plus ou moins) de $val += 1 qui effectue le meme type d'operation avec des numerique (incrementation dans ce cas).
Marsh Posté le 17-04-2002 à 16:12:42
Voilà... Ici ça permet de préciser que la substitution (s///) doit se faire sur la varibale $myString. Sinon ce genre d'opérations porte par défaut sur la varibale "spéciale" $_.
Donc si vous avez suivi "s/sucks/rulez/" équivaut en fait à "$_ =~ s/sucks/rulez/".
Marsh Posté le 18-04-2002 à 13:33:56
ah l'embrouille...
le gars il fait du perl depuis une semaine et vous l'embrouillez grave des le debut....
bon prenons la variable $string, tu veux enlever les espaces devant et derriere....
$string =~ s/^\s+//;
$string =~ s/\s+$//;
=~ cela veut dire si tu trouve un truc qui ressemble a cela tu remplace par....
s///; c'est ce qui sers a la substitution
s/ici le modele/ici ce que l'on mettra/;
le ^ cela veut dire au debut de la variable
le $ (dans le second exemple) veut dire a la fin de la variable
le \s+ cela veut dire un ou plusieurs espaces
sinon tu a le \s* qui veut dire au cas ou...
\s+ c'est minimum 1 et pas de max
\s* c'est de 0 a pas de maximum, la difference est subtile, mais sers surtout dans les conditions....
Maintenant tu veux faire la meme chose mais pour un mot...
genre tu veux remplacer lapin par poule....
$string =~ s/lapin/poule/;
ceci fonctionnera mais remplacera une seule fois lapin, pas les autres... sans compter qu'il peut y avoir des trucs du style Lapin ou LAPIN et dans ce cas cela ne marchera pas....
Pour se sortir de cela tu peux mettre des precisions a la fin....
$string =~ /lapin/poule/gis;
le gis precise qu'il faut qu'il regarde partout meme si la variable possede plusieurs lignes, qu'il ne fasse pas de difference entre majuscules et minuscules, et surtout qu'il remplace autant de fois qu'il le trouve....
perso j'ai mis longtemps avant de bien tout comprendre, le tout c'est de ne pas se decourager et de sans cesse apprendre....
Consulte les tutoriaux et achete des bouquins...
@+
cadou
Marsh Posté le 18-04-2002 à 13:43:59
les Regular Expressions (RegExp) en Perl, ça semble vachement compliqué au début, surtout quand on est pas habitué à Unix ou à certains utilitaires comme Vi ou Grep
il suffit juste de démarrer doucement, de voir ce que telle expression fait exactement, et développer ensuite. avec l'habitude, ça ira tout seul
Marsh Posté le 17-04-2002 à 15:32:22
hum cela fait 1 journée que je me mets au perl et j'aimerais savoir si comme php ( avec ltrim trim ou chop ) il y a des fontions qui permettent de ne supprimer uniquement les espaces de debut et de fin de chaines ?
(parce chop c'est pas du tout pareil en perl)