Supprimer les caractères en double

Petit nouveau ! | 4 Messages

11 oct. 2009, 20:24

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 ?

ViPHP
ViPHP | 3607 Messages

11 oct. 2009, 22:48

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

Petit nouveau ! | 4 Messages

12 oct. 2009, 22:11

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 ?

ViPHP
ViPHP | 3607 Messages

12 oct. 2009, 22:19

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"

Petit nouveau ! | 4 Messages

12 oct. 2009, 22:51

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)

ViPHP
ViPHP | 3607 Messages

12 oct. 2009, 23:17

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

Petit nouveau ! | 4 Messages

13 oct. 2009, 19:24

en tout cas chapeau, et merci !