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 04/05/2006, 17h56   #1
Invité régulier
 
Inscription : janvier 2006
Messages : 23
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 23
Points : 6
Points : 6
Par défaut Expression régulière (ou relationnelle)

Bonjour,

Je souhaite effectuer un traitement sur une chaine pour y éliminer les caractère spéciaux.
Pour cela j'utilise une expression régulière qui va remplacer tous les caractères autres que ceux définis dans l'expression régulière par le caractère "_".

Voici le code :
Code :
1
2
 
return eregi_replace("[^a-z0-9._-àéèêù[:space:]]+", "_", $chaine);
Logiquement on retrouvera une chaine avec :

- Les caractères alphanumériques sont admis (a-z0-9)
- Le point
- l'underscore
- le tiret
- les caractères accentués : àéèêù
- l'espace

Et bien non, exemple :

La chaine : ponctuation.point.[crochet](parenthèse)-tiret-;pvirg;'cote'&commercial&²carre²#diese#{acolade}`coteinc`_undersc_^chap^@arob@=egal=+plus+r7àá
donnera :
Ponctuation.point._crochet_parenthèse_tiret_pvirg_cote_commercial_²carre²_diese_{acolade}`coteinc`_undersc__chap_arob_egal_plus_r7àa

Ma question : pourquoi reste-t-il des caractères spéciaux ??

Un spécialiste des expression régulière peut-il se pencher sur mon prob ??

Merci d'avance de vos réponses...
nguthans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2006, 18h10   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 052
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 052
Points : 7 142
Points : 7 142
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
tu as mis un tiret au milieu de ta classe ^^
Code :
return eregi_replace("[^a-z0-9._àéèêù -]+", "_", $chaine);
__________________
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 05/05/2006, 11h45   #3
Invité régulier
 
Inscription : janvier 2006
Messages : 23
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 23
Points : 6
Points : 6
Cool ça fonctionne...

Je vais devoir me pencher un peu plus sur sur les expressions régulières pour bien les maitriser. Car je n'ai pas compris le comment du pourquoi de la réponse (emplacement spécifique du tiret dans la classe... espace non représenté par [:space:]...)

Enfin, ça fonctionne !

Merci Swoög !

@++
nguthans est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/05/2006, 12h13   #4
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 052
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 052
Points : 7 142
Points : 7 142
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
De rien

pour le [:space:] je l'ai modifié par ce que j'évite d'utilser les meta-classes au maximum c'est tout

pour le tiret, c'est parce que un tiret au mileu d'une classe de caractère signifie un interval, comme tu l'as mis pour a-z et 0-9 donc là, tu spécifias l'intervale : _-à d'où le bug ^^ si tu veux avoir le vrai tiret littéral, il faut le placer là où il ne peut faire partit d'un interval : à la fin de la classe
__________________
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
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 21h19.


 
 
 
 
Partenaires

Hébergement Web