GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 10 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Transat :O)
Le #655289
Philippe news:4124996e$0$29652$:

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 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)

Kevin
Le #655290
Salut,

je ne pense pas que ca soit faisable en une seule RE

Kevin


--
Coders don't die... they just JMP without RET
P'tit Marcel
Le #655287

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 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

Teufel
Le #655056
Bonjour,


Bonjour,

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;....
.
.
.



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

Philippe
Le #655052
- remplacement de "; " par " "
- remplacement de " ;" par ";"



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

Publicité
Suivre les réponses
Poster une réponse
Anonyme