Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mettre en gras une chaine recherchee mais pas dans les tags HTML

2 réponses
Avatar
Khorne
Bonjour,


suite à une recherche sur un texte contenant des tags HTML, je voudrais
mettre en gras la chaine recherchée dans le texte sans toucher aux tags HTML
et surtout sans mettre du gras a l'interieur d'une balise si la chaine
recherchée si trouve.

ex:

<font color="#FFFFFF">This color is black</font>

après recherche:

<font color="#FFFFFF"><B>This color is black</B></font>

Je pense que la 1er étape serait de mettre toutes les occurences de la
chaine recherchée en gras meme a l'intérieur des balises, comme ca:

$data = preg_replace("/($word)/i", "<b>\\1</b>", $data); // data est le
texte et word la chaine recherchée


et ensuite de supprimer les tags <B> et </B> autour des occurences se
trouvant dans des balises HTML.
C'est la dessus que je ne trouve pas comment faire le masque. J'en ai un
mais qui ne marche que sur le nom de la balise (dans mon exemple: font)

$data = preg_replace("/(<[^<>]*)<b>($word)<\/b>([^<>]*>)/i", "\\1\\2\\3",
$data);

Si quelqu'un pourrait m'aider pour le deuxième masque.

Merci

2 réponses

Avatar
P'tit Marcel
Khorne écrivit:


suite à une recherche sur un texte contenant des tags HTML, je
voudrais mettre en gras la chaine recherchée dans le texte sans
toucher aux tags HTML et surtout sans mettre du gras a l'interieur
d'une balise si la chaine recherchée si trouve.
ex:
<font color="#FFFFFF">This color is black</font>
après recherche:
<font color="#FFFFFF"><B>This color is black</B></font>


essaye un masque du genre :
'`(?<=>)([^<]*color[^<]*)`'

en supposant que color est le mot à chercher. Au passage, si t'écrivais en
français, le problème ne se poserait pas ;-)

NB: j'ai un peu compliqué le masque juste pour le fun!


--
P'tit Marcel

Avatar
Guillaume Bouchard
Khorne wrote:

suite à une recherche sur un texte contenant des tags HTML, je voudrais
mettre en gras la chaine recherchée dans le texte sans toucher aux tags HTML
et surtout sans mettre du gras a l'interieur d'une balise si la chaine
recherchée si trouve.


De nos jours ont ne met plus en gras, on met en important, via la balise
strong, qui a un effet par defaut gras, mais qui est stylable.

<font color="#FFFFFF">This color is black</font>


De nos jours nous n'utilisons plus la balise font.
Maitenant, ormit la solution de Ptit Marcel qui est 'achement complex,
faut que je me remet à la page en matiere de regex... Je te propose une
solution completement HS.

Tu remplaces tous tes mots pas <strong>le mot</strong>
Dans une feuille CSS, tu style ton strong en gras.

Ce que tu ne veux pas c'est un certain type de balises encadre le
strong, et bien tu faix

balise > strong {
font-weight: normal;
}

Voilà, pour plus de details, FU2+Xpost sur NG KiVaBien.

--
Guillaume.