Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/05/2006, 01h28   #1
Invité de passage
 
Inscription : octobre 2002
Messages : 42
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 42
Points : 4
Points : 4
Par défaut Expression régulière pour supprimer des doublons

Salut,

j'ai un peu de mal avec les expressions régulières,
voici ma demande et je ne sais pas si c'est possible,

j'aimerai que dans un texte, n'importe quel caractère ecrit x fois à la suite soit remplacé par qu'un seul item,

par ex, youpiiiiiiiiiiiiiiii, devienne youpi,
ou bien j'ai une question ???????? devienne j'ai une question ?

il faudrait aussi pouvoir ne pas supprimer les lettres qui sont doublées en français, les ss, tt, nn, mm...
par contre sss doit devenir s.

Merci à vous.
cbroissa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 01h55   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Salut !

alors pour la première, c'est facile
Code :
$apres = preg_replace('<(.)\\1+(?!\\1)>', '$1', $avant);
pour le second cas, ça va être un peu plus difficile
le plus simple est d'en faire deux :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$patterns = array();
$replaces = array();
 
//pour les lettres doublées :
$patterns[] = '<([nmst])\\1{2,}(?!\\1)>i'
$replaces[] = '$1';
 
//pour les autres :
$patterns[] = '<([^nmst])\\1+(?!\\1)>i'
$replaces[] = '$1';
 
$apres = preg_replace($patterns, $replaces, $avant);

je t'explique :
<(.)\\1+(?!\\1)>
(.) : on récupère un caractère (n'importe le quel) '.' et on le mémorise '(' ... ')'
\\1+ : ensuite on veut le même caractère '\\1' au moins une fois de plus '+'
(?!\\1) il faut que la suite '(?' ... ')' ne soit pas '!' le caractère récupéré '\\1'

pour les autres :
<([nmst])\\1{2,}(?!\\1)>i
i (à la fin) : insensible à la casse
([nmst]) : on récupère soit '[' ... ']' un n, un m, un s ou un t 'nmst' et on mémorise '(' ... ')'
\\1{2,} : ensuite on veut le même caractère '\\1' au moins deux fois de plus '{2,}'
(?!\\1) il faut que la suite '(?' ... ')' ne soit pas '!' le caractère récupéré '\\1'


et
<([^nmst])\\1{2,}(?!\\1)>i
i (à la fin) : insensible à la casse
([^nmst]) : on récupère un caractère qui n'est pas '[^' ... ']' un n, un m, un s ou un t 'nmst' et on mémorise '(' ... ')'
\\1{2,} : ensuite on veut le même caractère '\\1' au moins deux fois de plus '{2,}'
(?!\\1) il faut que la suite '(?' ... ')' ne soit pas '!' le caractère récupéré '\\1'
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 13h46   #3
Invité de passage
 
Inscription : octobre 2002
Messages : 42
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 42
Points : 4
Points : 4
merci beaucoup pour ton aide et d'avoir pris le temps de m'expliquer,
j'ai essayé ça marche super bien,

par contre une petite amélioration, comment faire pour que les chiffres ne soient pas prit en compte par ces règles ?

merci
cbroissa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 13h56   #4
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
alors

pour la règle avec le . il suffit de remplacer le . par [^0-9] (tout sauf chiffre de 0 à 9)

de même pour la règle avec [^nmst] il te suffit de rajouter 0-9 dedans : [^nmst0-9]
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 14h14   #5
Invité de passage
 
Inscription : octobre 2002
Messages : 42
Détails du profil
Informations forums :
Inscription : octobre 2002
Messages : 42
Points : 4
Points : 4
c'est parfait,

merci beaucoup,
en plus d'avoir eu la réponse, j'ai tout compris.

bonne journée.
cbroissa est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h35.


 
 
 
 
Partenaires

Hébergement Web