[Perl] Suppr d'espaces en début de ligne [Résolu/Fermé]

Signaler
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
-
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
-
Salut à tous,

J'ai un petit souci avec une expression régulière Perl.
Je fais un test avec le petit programme suivant :
#!/usr/bin/perl -w
use strict;

my $text = " hey bonjour\n         \t          pof pif";

print "$text\n";
$text =~ s/^[ \t]+//g;
print "$text\n";


Normalement, le deuxième print devrait m'afficher
hey bonjour
pof pif


Au lieu de ça, le remplacement semble ne fonctionner que sur la première ligne ?! Ça me donne donc :
hey bonjour
                          pof pif


J'ai testé ce bout de code sous windows avec cygwin et sur une debian, le résultat est le même.

Je ne comprends pas du tout ce comportement : je dis bien supprime moi (s) tout espace ou tabulation ([ \t]+) et ce pour toutes les occurrences (/g).

Quelqu'un voit pourquoi ça fonctionne pas et surtout quelle serait la solution à ce souci ?

Merci
@++

2 réponses

Messages postés
481
Date d'inscription
mardi 21 janvier 2003
Statut
Membre
Dernière intervention
20 avril 2006
107
L'accent circonflexe indique que les espaces doivent être en début de chaîne uniquement.

Si tu veux tout enlever, enlève le ^
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Oui, je sais. Désolé, je ne l'ai pas redit dans ma phrase récapitulative. Mais, l'exemple où je montre la différence d'affichage entre ce que j'attends et ce que j'obtiens montre que je ne veux supprimer que les espaces en début de ligne avant le texte.

Merci qd même.
@++
Messages postés
1871
Date d'inscription
jeudi 1 novembre 2001
Statut
Membre
Dernière intervention
9 janvier 2008
112
Bon, j'ai trouvé la réponse :

Il suffit de mettre /mg au lieu de simplement /g. Ça fait considérer la chaîne de caractères comme une chaîne multi-ligne.

Sinon, le ^est compris comme le début d'une chaîne et non tout caractère suivant \n.

@++