OVH Cloud OVH Cloud

REGEX probleme

4 réponses
Avatar
Hugh Jass
Salut,

J'ai une chaîne qui représente les résultats de recherche, par exemple,
on recherche "PHP" et la châine donne un extrait de la page:

'Le PHP est un langage génial. Parmis les solutions disponibles, le
PHP... blah'

Je veux surligner le mot cherché (exemple:)

'Le <span class="highlight">PHP</span> est un langage génial. Parmis les
solutions disponibles, le <span class="highlight">PHP</span>... blah'

egregi_replace marche très bien. Le seul hic, c'est dans un cas comme
ceci:

je cherche "actuel". Il trouve

"blah, blah. Actuellement, blah"

Je vais avoir

"blah, blah. actuellement, blah" - le problème étant le fait que le
remplacement ne commence pas en Majuscule. Aujourd'hui, je contourne en
mettant tout en MAJUSCULE.

JE CHERCHE donc, un moyen de faire quelque chose comme ceci:

$resultat = mafonct("string","<span>$arg</span>","StRinG");

En d'autre terms, je voudrais remplacer 'string' avec '<span
class="truc">StRinG</span>' en respectant la casse.

Y aurait-il une fonction ou un moyen simple?

Je ne pense pas qu'il soit intéressant d'écrire une fonction qui examine
la chaîne lettre par lettre, car il y a de multiples remplacements dans
chaque buffer et les résultats de recherche peuvent boucler plusieurs
fois.

Idées?

Merci d'avance!

4 réponses

Avatar
CrazyCat
Hugh Jass wrote:
JE CHERCHE donc, un moyen de faire quelque chose comme ceci:
$resultat = mafonct("string","<span>$arg</span>","StRinG");
En d'autre terms, je voudrais remplacer 'string' avec '<span
class="truc">StRinG</span>' en respectant la casse.


tu devrais t'orienter vers preg_match() qui te permet de récupérer la
chaine qui correspond à la recherche...

--
Tchattez en liberté: http://www.c-p-f.net
Tout sur les eggdrops: http://www.c-p-f.org
ML @ http://groups-beta.google.com/group/eggdrops

Avatar
Philippe Chaissac
Salut,

JE CHERCHE donc, un moyen de faire quelque chose comme ceci:

$resultat = mafonct("string","<span>$arg</span>","StRinG");

En d'autre terms, je voudrais remplacer 'string' avec '<span
class="truc">StRinG</span>' en respectant la casse.


eregi_replace fait l'affaire, il suffit de bien écrire ses expressions
et d'utiliser des parenthèses capturantes.
Ici ça donnerait par exemple :

function highlight($mot,$texte) {
return eregi_replace("($mot)","<span class='fluo'>1</span>",$texte);
}

Avatar
Hugh Jass
function highlight($mot,$texte) {
return eregi_replace("($mot)","<span class='fluo'>1</span>",$texte);
}


Excéllent, merci!

Avatar
Nyro Xeo
function highlight($mot,$texte) {
return eregi_replace("($mot)","<span class='fluo'>1</span>",$texte);
}



Excéllent, merci!
Comment ça, "excellent" ? Je comprends pas, le résultat ne résoud pas le

problème initial !?

Si j'écris
*****************************
<?php
echo highlight('actuel', 'Bonjour à tous, je recherche actuellement un
livre sur la POO.');
?>
*****************************
Cela surlignera le 'actuel' en laissant le 'lement' non surligné !

D'ailleurs, en passant, preg_replace() est plus rapide que
eregi_replace(), donc il est préférable de l'utiliser !