Expression reguliere pour les mordus
Le
Philippe
Bonjour,
Je cherche une expression régulière à utiliser dans VIM ou dans un script
PHP ou Perl :
j'ai un fichier qui contient ces données par ligne :
ligne n : .;10/12/2003;MOT1; MOT2; MOT3;E;.
ligne n+1 : .;11/08/2004;MOT1; MOT2 ;M;.
.
.
.
je souhaiterai obtenir :
ligne n : .;10/12/2003;MOT1 MOT2 MOT3;E;.
ligne n+1 : .;11/08/2004;MOT1 MOT2;M;.
.
.
.
En fait je veux juste virer les points virgules qui se trouvent dans les
champs qui se trouvent exactement circonscrit entre un champ de type
XX/XX/XXXX
et un champ avec une seule lettre E ou M .
Petite précision, il ya d'autre champ du type XX/XX/XXXX dans la ligne avant
celui qui délimite la zone de texte recherché.
En fait :
ligne n : .;10/12/2003;MOT1; MOT2; MOT3;E;.
ligne n+1 : .;11/08/2004;MOT1 MOT2;M;.
^
c'est le 11ème point virgule de la ligne
Avis aux amateurs :)
Philippe
Je cherche une expression régulière à utiliser dans VIM ou dans un script
PHP ou Perl :
j'ai un fichier qui contient ces données par ligne :
ligne n : .;10/12/2003;MOT1; MOT2; MOT3;E;.
ligne n+1 : .;11/08/2004;MOT1; MOT2 ;M;.
.
.
.
je souhaiterai obtenir :
ligne n : .;10/12/2003;MOT1 MOT2 MOT3;E;.
ligne n+1 : .;11/08/2004;MOT1 MOT2;M;.
.
.
.
En fait je veux juste virer les points virgules qui se trouvent dans les
champs qui se trouvent exactement circonscrit entre un champ de type
XX/XX/XXXX
et un champ avec une seule lettre E ou M .
Petite précision, il ya d'autre champ du type XX/XX/XXXX dans la ligne avant
celui qui délimite la zone de texte recherché.
En fait :
ligne n : .;10/12/2003;MOT1; MOT2; MOT3;E;.
ligne n+1 : .;11/08/2004;MOT1 MOT2;M;.
^
c'est le 11ème point virgule de la ligne
Avis aux amateurs :)
Philippe

Poser une question


En lisant cela, je vois:
- remplacement de "; " par " "
- remplacement de " ;" par ";"
la fonction "str_replace" ne peut pas fonctionner ?
Apres, si tu veux jouer sur la position, la fonction "substr_replace"
permet de definir la zone a controler.
a+
--
Transat :O)
je ne pense pas que ca soit faisable en une seule RE
Kevin
--
Coders don't die... they just JMP without RET
en truandant un peu:
$masque='`^(.*[0-9]{2}/[0-9]{2}/[0-9]{4};)(.+)(;E;.*)$`U';
$resultat preg_replace_callback($masque, 'virpvirg' , $chaine);
function virpvirg($res) {
return $res[1] . strtr($res[2], ';' , ' ') . $res[3];
}
a+
--
P'tit Marcel
Bonjour,
Ou encore, une autre solution :
preg_replace("/([0-9]{2}/[0-9]{2}/[0-9]{4});(.+);(E|M);/e",
"'\1;'.str_replace(';', '', '\2').';\3;'",
$txt);
A+
--
Teuf
Merci pour ta proposition, mais en fait il y a d'autres champs dans la
ligne, que je ne souhaite pas modifier,
et qui contiennent un espace avant et/ou après le point virgule :-(
Philippe