Substitution en perl
Résolu/Fermé
herve70
-
12 oct. 2006 à 15:17
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 16 oct. 2006 à 10:32
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 16 oct. 2006 à 10:32
A voir également:
- Perl substitution
- Denon perl pro test - Accueil - Audio
- Perl split ✓ - Forum Perl
- Active perl - Télécharger - Édition & Programmation
- Substitution dans VI ✓ - Forum Linux / Unix
- Substitution SED qui fonctionne pas. ✓ - Forum Shell
2 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
12 oct. 2006 à 19:53
12 oct. 2006 à 19:53
Salut,
lami20j
#!/usr/bin/perl use warnings;use strict; my $var='je viens / de me mettre / à la programmation / Perl'; (my $res = $var) =~ s/\/([^\/]*)$//g; # preserve le contenu de $var print "Substitution : $res\n"; print "Entre paranthèses : $1\n"; print "Le contenu de la variable \$var est préservé.\n\$var = $var\n"; __END__ l'opérateur s/// contient 2 parties : le motif et le remplacement le motif \/([^\/]*)$ \/ - reconnaît un slash [^\/] - reconnaît tout caractère qui n'est pas slash * - reconnait la classe complementé [^\/] zero fois, une fois, autant de fois qu'il peut $ - reconnaît la fin d'une chaine (le caractère de fin de chaîne n'est pas reconnu) les paranthèses capturent le contenu de la reconnaissance qu'on le trouve dans la variable $1 Dans la classe de caractères complémentée [^\/] on est obligé d'utiliser l'antislash, sinon perl va croire que s/// sera fini trop tôt et il va lever une exception (message d'erreur). Pareil pour le 1er slash. Le remplacement s'exécute une seule fois. Pour remplacer tout il faut utiliser le modificateur /g En ce cas le résultat sera : je viens Voilà une traduction de la regex Reconnaît dans la chaine contenu par la variable $var un motif qui commence avec un slash, il es suit de n'importe quel caractère qui n'est pas slash, zero fois, une fois ou n'importe combien de fois, entre temps capture dans $1 la reconnaissance mais sans le slash de début, jusqu'à la fin de la chaine et remplace avec rien. La nouvelle chaine est sauvegardée dans $res, le contenu de la variable initiale ne change pas. Il y a beaucoup, beaucoup des choses à dire que sur cette regex. Les quantificateurs et leur gurmandise, les classes de caractères et les classes de caractères complémentées le métacaractère antislash, l'ancrage, les modificateurs de s/// J'espère que j'ai pu t'aider un peu. Une petite précision : $ je l'ai mis en dehors de paranthèses. Pourquoi? Les paranthèses ont le rôle de regroupement et la capture. En ce cas n'est pas nécessaire pour $. $ c'est une assertion de largeur nulle qui indique une position dans la chaîne (la fin) mais ne consomme pas de texte. A savoir que le comportement de $ difère si on utilise les modificateurs m ou s /m - reconnaît ^ et $ à côté d'un \n interieur /s - fait correspondre . avec le saut de ligne
lami20j
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 oct. 2006 à 10:32
16 oct. 2006 à 10:32
Salut,
je peut a l avenir si j ai de nouvelles intérrogations sur perl solliciter ton aide?
Tu peux toujours demandé de l’aide à la communauté CCM.
Si c’est moi le 1er qui vois le message je vais essayer de répondre bien sûr ;)
lami20j
je peut a l avenir si j ai de nouvelles intérrogations sur perl solliciter ton aide?
Tu peux toujours demandé de l’aide à la communauté CCM.
Si c’est moi le 1er qui vois le message je vais essayer de répondre bien sûr ;)
lami20j
16 oct. 2006 à 09:47
Merci pour ton aide, c'était tout a fait clair.
encore merci
je peut a l avenir si j ai de nouvelles intérrogations sur perl solliciter ton aide?