Regex pour un "." dot

Eléphant du PHP | 112 Messages

24 avr. 2006, 00:19

Bonsoir,

Je vous fais part d'un petit prolème au quel je suis confronté:

Je voudrais remplacer les "Equipé ... ." Par "Equipé ... ." Mais en vert.

les ... représente une chaine composée de mots et chiffres et cette chaine est terminée par un "."

Pour ce, j'ai commencé avec les regex en faisant :

Code : Tout sélectionner

$v = preg_replace("/Equipé(.+)./","<font color=#1eff00>Equipé\\1 .</font>",$v);
Mais comme je m'en doutais, le "." n'est pas bon et doit surement être déffinit d'une autre facon que je ne connais pas =/

D'avance, merci

Mouet

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2006, 00:32

Dans les expression régulière, le . est utilisé pour représenter n'importe quel caractère. Si tu veux dire qu'il s'agit du caractère point, il te faut le protéger d'un antislash : \.

Tu peux également ajouter un "^" au début de ta chaine pour dire que celle ci doit obligatoirement commencer par "Equipé", et ajouter "$" à la fin, pour dire qu'il s'agit du point final et pas du premier point rencontré :
preg_replace("/^Equipé(.+)\.$/","Equipé <font color=#1eff00>$1</font>.",$v);
J'ai également déplacé les balises <font> du résultat, je ne sais pas si c'est ce que tu veux, mais si tu voulais tout mettre en vert, l'expression régulière n'était pas utile ;)

Eléphant du PHP | 112 Messages

24 avr. 2006, 00:33

Grand Grand merci pour la rapidié et la qualité!


Le problème est que le Equipé... . se trouve dans un texte ;-) donc je pense que c'est nécessaire 8)

Mammouth du PHP | 19672 Messages

24 avr. 2006, 00:45

Tiens, essaye comme ça :
<?php
$v = "Equipé des meilleurs composants. Et à un prix défiant toute concurrence.";
echo("<p>". $v ."</p>");
$masque = "#(Equipé[a-zA-Z ]*\.)#";
$remplacement = "<span style=\"color=#1eff00\">$1</span>";
$v = preg_replace($masque, $remplacement,$v);
echo("<p>". $v ."</p>");
?>
Ça devrait t'afficher ceci :
Equipé des meilleurs composants. Et à un prix défiant toute concurrence.
Equipé des meilleurs composants. Et à un prix défiant toute concurrence.
Est-ce que c'est bien ce que tu veux faire ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

24 avr. 2006, 09:48

Si ta chaine se trouve au milieu d'un texte, tu peux utiliser la même chose sans les "^$" :)

L'expression de cyrano fonctionne également, et c'est effectivement plus propre et plus lisible de sortir le masque. Par contre si tu utilises les styles pour mettre en couleur, il y a une ch'tite erreur, c'est un " : " qu'il faut utiliser dans l'attribut à la place du " = "

Code : Tout sélectionner

<span style="color:#1eff00;">