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 23/04/2007, 16h10   #1
Membre du Club
 
Inscription : février 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 271
Points : 50
Points : 50
Par défaut Concaténation couleur ?

Salut

A la suite de ce topic :
http://www.developpez.net/forums/sho...=319973&page=3

Je me suis permis d'ouvrir un autre traitant d'une éventuelle suite.

Tout d'abord , j'ai fait un moteur de recherche et j'aimerais mettre en surbrillance la partie du mot recherché.

exemple : pour le mot "Charte" , si l'utilisateur saisit "Ch" , il aura affiché comme résultat Charte. mais j'aimerais mettre en avant dans le résultat :
Pour la recherche : Ch , vous avez comme résultats :
(la c'est facile)

Charte (pas aussi évident la)

$CHAMP=explode("",$SAISIE_DU_USER); garde touts les mots saisies , il y a t'il un moyen de le concaténer avec une balise <font color> ?

ou encore faut t'il le faire dans le FOR ?

Cordialement,
Kenshin86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 17h19   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
C'est plus simple avec les expression régulières :
Code :
echo '<td>'. preg_replace('.(' . preg_quote($SAISIE) . ').', '<span style="color: red">\1</span>', $data["description"]) .'</td>';
A la place de :
Code :
echo '<td>'.$data["description"].'</td>';
Si j'ai bien compris

Note : votre première requête (avec le COUNT) n'est pas utile puisque la fonction mysql_num_rows sur la deuxième vous aurait directement donné cette information (une requête au lieu de deux).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 20h33   #3
Membre du Club
 
Inscription : février 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 271
Points : 50
Points : 50
1) A propos du num_rows pour le count. Merci ça fonctionnes.

2) Pour la couleur ça marches aussi ,

PS : Pour la couleur , il prend en compte les majuscules ou minuscules de la saisie , contrairement a la recherche qui ne tient pas compte de ça. il y a une solution ?
Kenshin86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 20h57   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
J'aurais dû vous le préciser : il suffit d'ajouter l'option i à l'expression régulière après le délimiteur de fin, ce qui nous donne donc :
Code :
echo '<td>'. preg_replace('.(' . preg_quote($SAISIE) . ').i', '<span style="color: red">\1</span>', $data["description"]) .'</td>';
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 21h02   #5
Membre du Club
 
Inscription : février 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 271
Points : 50
Points : 50
Merci beaucoup , ça fonctionnes très bien.


Sinon julp , tu peux donner quelques informations à propos du code ?
Kenshin86 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 23h30   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Partie '.(' . preg_quote($SAISIE) . ').i' :

Le point de début et de fin de l'expression régulière sert ici de délimiteurs (il n'est pas imposé et nous sommes libres de le choisir). J'ai volontairement choisi ce caractère car il sera protégé par la fonction preg_quote (elles protégent tous les caractères possédant une signification particulière : ., +, *, parenthèses, ...). En effet, si le délimiteur vient à figurer dans l'expression elle-même il nécessite alors un échappement.

Les parenthèses servent ici à indiquer que la partie qui correspond à son contenu sera capturée pour réutilisation par le second paramètre de la fonction preg_replace dans notre cas.

Enfin, l'option (après le délimiteur de fin de l'expression) i indique que l'expression ne sera pas sensible à la casse.


Partie '<span style="color: red">\1</span>' :

Rien de nouveau si ce n'est la partie \1 qui fait référence à la partie capturée par la première parenthèse de l'expression régulière. Il s'agit d'une sorte de variable qui sera systématiquement remplacée par la chaîne satisfaisant la parenthèse capturante correspondant au nombre indiqué.

Je ne peux dévoiler ici tous les aspects concernant les expressions régulières et je ne suis pas certain d'être assez clair dans mes explications c'est pourquoi je vous renvoie pour approfondir vos connaissances vers le tutoriel suivant : Initiation aux expressions régulières en PHP.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 14h43   #7
Membre du Club
 
Inscription : février 2007
Messages : 271
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 271
Points : 50
Points : 50
Ok, merci beaucoup !
Kenshin86 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 10h32.


 
 
 
 
Partenaires

Hébergement Web