[PERL] Ajouter 0 devant un caractere manqant
Résolu/Fermé
A voir également:
- [PERL] Ajouter 0 devant un caractere manqant
- Caractère ascii - Guide
- Caractere speciaux - Guide
- Caractère spéciaux - Guide
- Ajouter un 0 devant un nombre excel - Guide
- Ajouter un compte gmail - Guide
4 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
26 mars 2007 à 15:41
26 mars 2007 à 15:41
Salut,
essaie
lami20j
essaie
/\s(\w)\s/0$1/g--
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
26 mars 2007 à 15:47
26 mars 2007 à 15:47
$1 etant normalement le resultat de la derniere operation !
Pas tout à fait :-)
$1 - contient la capture de la 1ère paranthèse ouvrante en commençant de la gauche - chez toi il n'y a pas des paranthèses
Pas tout à fait :-)
$1 - contient la capture de la 1ère paranthèse ouvrante en commençant de la gauche - chez toi il n'y a pas des paranthèses
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
26 mars 2007 à 18:28
26 mars 2007 à 18:28
La regex que je t'ai donné ne marche pas très bien
D'ailleurs c'était plutôt ça que je voulais dire
mais le F n'est pas traité
Voilà comme tu peux faire
D'ailleurs c'était plutôt ça que je voulais dire
lami20j@debian:~$ echo -e "F B5 0 3A B 56 9\n" F B5 0 3A B 56 9 lami20j@debian:~$ echo -e "F B5 0 3A B 56 9\n" | perl -ne 's/\s(\w)\s/ 0$1 /g;print' F B5 00 3A 0B 56 09
mais le F n'est pas traité
Voilà comme tu peux faire
lami20j@debian:~$ echo -e "F B5 0 3A B 56 9\n" F B5 0 3A B 56 9 lami20j@debian:~$ echo -e "F B5 0 3A B 56 9\n" | perl -ne 's/\b(\w)\b/0$1/g;print' 0F B5 00 3A 0B 56 09
Salut lami20j,
Deja merci pour ton exemple, il marche parfaitement pour moi.
Mais peut tu juste expliquer le fonctionnement. J'ai bien compris le s du debut le(\w) qui attrape le mot (chez moi le mot est 8), le g de la fin (même s'il m'est inutile), et le $1, mais pas le reste.
Chez moi ce code :
---------------------
$chiffre=8;
$chiffre =~ s/\b(\w)\b/0$1/g;
print "chiffre vaut maintenant: $chiffre\n"
----------------------
m'affiche bien 08, mais pourquoi?
Je pense que la subtilité se trouve dans l'explication du \b ....
Deja merci pour ton exemple, il marche parfaitement pour moi.
Mais peut tu juste expliquer le fonctionnement. J'ai bien compris le s du debut le(\w) qui attrape le mot (chez moi le mot est 8), le g de la fin (même s'il m'est inutile), et le $1, mais pas le reste.
Chez moi ce code :
---------------------
$chiffre=8;
$chiffre =~ s/\b(\w)\b/0$1/g;
print "chiffre vaut maintenant: $chiffre\n"
----------------------
m'affiche bien 08, mais pourquoi?
Je pense que la subtilité se trouve dans l'explication du \b ....
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
28 mai 2009 à 15:18
28 mai 2009 à 15:18
Salut,
Prenon l'exemle F B5 0 3A B 56 9
et la regex \b(\w)\b
\b c'est un ancrage ou assertion de valeur nulle ou un métacaractère qui ne consomme pas du texte, qui permet de trouver une position et pas un motif.
Autrement dit \b veut dire métacaractère limitation de mot (qui peut être début et/ou fin de mot).
\w c'est une classe de caractères qui comprends un caractère mot qui peut être une lettre de a à z ou de A à Z, un chiffre de 0 à 9 ou le caractère souligné (underscore) _
Donc \w est équivalent à [a-zA-Z0-9_]
/g c'est un modificateur de regex qui fait que le remplacement soit global. S'il n'est pas utiliser seulement le 1er motif sera modifé.
Tu peux tester sur l'exemple avec et sans /g et tu verras.
Si jamais il n'y a qu'une seule modification à faire alors /g n'est pas nécessaire, a savoir toute fois que s'il y a plusieurs groupes c'est seulement le 1er motif sera modifé. Si jamais tu veux modifier le 2 ou 3ème, etc. motif alors il faut utiliser une autre regex qui permet de se positionner à l'emplacement voulu.
Voilà.
Prenon l'exemle F B5 0 3A B 56 9
et la regex \b(\w)\b
\b c'est un ancrage ou assertion de valeur nulle ou un métacaractère qui ne consomme pas du texte, qui permet de trouver une position et pas un motif.
Autrement dit \b veut dire métacaractère limitation de mot (qui peut être début et/ou fin de mot).
\w c'est une classe de caractères qui comprends un caractère mot qui peut être une lettre de a à z ou de A à Z, un chiffre de 0 à 9 ou le caractère souligné (underscore) _
Donc \w est équivalent à [a-zA-Z0-9_]
/g c'est un modificateur de regex qui fait que le remplacement soit global. S'il n'est pas utiliser seulement le 1er motif sera modifé.
Tu peux tester sur l'exemple avec et sans /g et tu verras.
Si jamais il n'y a qu'une seule modification à faire alors /g n'est pas nécessaire, a savoir toute fois que s'il y a plusieurs groupes c'est seulement le 1er motif sera modifé. Si jamais tu veux modifier le 2 ou 3ème, etc. motif alors il faut utiliser une autre regex qui permet de se positionner à l'emplacement voulu.
Voilà.