Page 1 sur 1

Supprimer les caractères en double

Posté : 11 oct. 2009, 20:24
par darkcha
Bonjour à tous,

je cherche à supprimer dans une chaine de caractères, tous les caractères en double,

c'est à dire par exemple, dans "Gérronnimo" le "rr" pour qu'il devienne "r" et le "nn" pour qu'il devienne "n".

Jusque là rien de plus simple avec un preg_replace :

Code : Tout sélectionner

$string=preg_replace( '/(.)\1/', '$1',"Gérronnimo" );
mais en compliquant la chose,

comment faire si je veux toujours enlever les caractères en double, sauf certain d'entre eux ?

Par exemple, je veux enlever les "rr" pour des "r", mais par contre je veux conserver les "nn".

j'ai bien essayer des trucs comme

Code : Tout sélectionner

$string=preg_replace( '/(.)([$|^r])\1/', '$1',"Gérronnimo" );
mais on est loin du compte, quelqu'un aurait-il une idée ?

Re: Supprimer les caractères en double

Posté : 11 oct. 2009, 22:48
par jojolapine
Attention... pour remplacer tout sauf le double "n"... roulement de tambours.... tadam!

Code : Tout sélectionner

/([^n])\1/
En fait j'ai simplement remplacer le "." (point) par "[^n]" qui signifie "tout sauf n"...
Tu peux étendre celà en disant "tout sauf n et s":

Code : Tout sélectionner

/([^ns])\1/
Voilou ;)

Voilà pour la preuve et pour tes futurs tests: http://lumadis.be/regex/test_regex.php?id=277

Re: Supprimer les caractères en double

Posté : 12 oct. 2009, 22:11
par darkcha
Par la fiante du saint-bouquetin !

J'avais essayé par mal de combinaisons mais pas celle-ci hélas... merci donc !

Par contre, pour pousser le bouchon un peu plus loin,

si je veux par la même occasion supprimer les caractères en triple, quadruple, etc

vois-tu une solution autre que de répéter le preg_replace 2 voir 3 fois de suite ?

Re: Supprimer les caractères en double

Posté : 12 oct. 2009, 22:19
par jojolapine
Hop: http://lumadis.be/regex/test_regex.php?id=278 !
Suffit d'indiquer que l'on veut plus de caractères via le "+" qui signifie "1 ou plus"

Re: Supprimer les caractères en double

Posté : 12 oct. 2009, 22:51
par darkcha
comme tout parait simple avec toi :|

une petite dernière pour finir ?

comment enlever tout les caractères en triple ou plus, et les ramener à des doubles, mais sans toucher au reste ?

gerrronnimo -> gerronnimo
abbbbricccocottier -> abbriccocottier

(non le but n'est pas de faire des mots qui n'existent pas)

Re: Supprimer les caractères en double

Posté : 12 oct. 2009, 23:17
par jojolapine
Alors là, ça devient plus sportif.... : http://lumadis.be/regex/test_regex.php?id=279
Tu remarqueras dans ma deuxième regexp, que le "?:" indique à la parenthèse de ne rien capturer... d'où la référence arrière qui vaut "\1" et non pas "\2"...
Je te laisse analyser tout ça...
Tu devrais pouvoir t'en sortir tout suel maintenant, même si tu veux changer quelques petites choses, lis le tutoriel présent sur le site linké!!

Re: Supprimer les caractères en double

Posté : 13 oct. 2009, 19:24
par darkcha
en tout cas chapeau, et merci !