Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
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/2011, 12h17   #1
Membre du Club
 
Avatar de Freedolphin
 
Inscription : février 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 145
Points : 47
Points : 47
Par défaut Supprimer les articles d'une chaine

Bonjour,

Je cherche à enlever les articles (le, la, les) d'une chaine récupérée par une requête mysql.
J'ai bien pensé à la fonction str_replace :
Code :
$chaine= str_replace(array("LE ", "LA ", "LES "), "", $chaine);
mais ça interfère sur des mots comme TABLE (qui devient TAB).

Quelqu'un a une astuce ?
Peut-être qu'il existe une méthode pour intervenir directement sur le résultat de la requête en transformant "La Solution" en "Solution (la)" (là, ce serait la classe )

Merci d'avance de vos idées !
__________________
Le mieux n'est pas forcément l'ennemi du bien.
Freedolphin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 13h50   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Utilise des expressions régulières.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h09   #3
Membre du Club
 
Avatar de Freedolphin
 
Inscription : février 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 145
Points : 47
Points : 47
Oui, en effet, avec :
Code :
$chaine = eregi_replace("^LE |^LA|^lES ", "", $chaine);
ça marche bien... Merci !

D'après toi, pour mettre l'article en fin de chaine, il faut passer par une condition ?
__________________
Le mieux n'est pas forcément l'ennemi du bien.
Freedolphin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h35   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
eregi est obsolète.
utilise preg_replace.
tu peux effectivement capturer ton article et le replacer.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h45   #5
Membre du Club
 
Avatar de Freedolphin
 
Inscription : février 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 145
Points : 47
Points : 47
Citation:
Envoyé par sabotage Voir le message
eregi est obsolète. utilise preg_replace.
C'est corrigé, merci.

Citation:
Envoyé par sabotage Voir le message
tu peux effectivement capturer ton article et le replacer.
Tu veux dire avec un if ? ou avec une regex ?
__________________
Le mieux n'est pas forcément l'ennemi du bien.
Freedolphin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 14h52   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Tu peux te servir des élements capturées dans ton expression dans ton remplacement :
Code :
1
2
3
4
<?php
$chaine = "le chien aime le chat";
echo preg_replace("#(.+) aime (.+)#", "\\2 aime \\1", $chaine); 
// le chat aime le chien
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 15h48   #7
Membre du Club
 
Avatar de Freedolphin
 
Inscription : février 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 145
Points : 47
Points : 47
Merci encore !
Ça marche nickel pour un article (LE) :
Code :
$chaine = preg_replace("#(^LE) (.+)#", "\\2 (\\1)", $chaine);
mais je n'arrive pas à rajouter une condition pour une deuxième article (LES), aurais-je fait une erreur quelque part ?
Code :
$chaine = preg_replace("#(^LE) (.+)|(^LES) (.+)#", "\\2 (\\1)", $chaine);
__________________
Le mieux n'est pas forcément l'ennemi du bien.
Freedolphin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 16h11   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
je ferai plutôt

Code :
preg_replace('/^(l(?:es?|a|\'))\s?+(.*)$/i', '\2 (\1)', $chaine);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 16h27   #9
Membre du Club
 
Avatar de Freedolphin
 
Inscription : février 2006
Messages : 145
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 145
Points : 47
Points : 47
Merci stealth35, ça marche parfaitement bien.
En revanche, la lecture est plus difficile pour moi.
Je vais relire le manuel pour décoder ça
Merci encore.
__________________
Le mieux n'est pas forcément l'ennemi du bien.
Freedolphin 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 10h55.


 
 
 
 
Partenaires

Hébergement Web