preg_replace une fonction éxisterait-elle ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : preg_replace une fonction éxisterait-elle ?

par katagoto » 04 avr. 2007, 16:15

merci a vous deux, j'en ai tennu compte, ça fonctionne bien et je fermerais par [/couleur], vite fais et bien fais ;)

par Expreg » 04 avr. 2007, 15:47

$1 ne marchera pas !
Une référence arrière à l'intérieur d'un masque demande toujours l'appel sous la forme \1 :wink:

P'têt même que j'aurais utilisé [[:xdigit:]] pour la classe color :wink:

Mais c'est vrai, comme le souligne Naholyr qu'il faut se rappeler de la couleur du départ pour que ça marche.
De plus, il est a noter qu'une référence arrière (capture) ralenti la regex.
Sur cette seule regex c'est pas grave, mais je sens l'artillerie lourde derrière. :lol:

par naholyr » 04 avr. 2007, 15:35

De mémoire ce que tu veux faire s'appelle un masque arrière. C'est-à-dire un masque basé sur ce qu'il a capturé un peu avant. Pour que ça marche il faut déjà... capturer :)

Il ne te manquait que ça : mettre des parenthèses autour de [0369CF] pour le capturer.
Au passage je ne sais plus si le "$1" marche dans les masques arrières, il faut peut-être revenir au "\1". Teste avec $1, et si ça ne marche pas essaie avec \1.

Par contre je me permets de te dire que ton remplacement est à peu près inutile, puisqu'au final il va remplacer par exemple

Code : Tout sélectionner

[ffffff]texte blanc[/ffffff]
par

Code : Tout sélectionner

<ffffff>texte blanc</ffffff>
Un str_replace(array('[',']'), array('<','>'), $chaine) aurait suffit :lol: C'est ça l'avantage du HTML ou du BBCode : on ouvre un type de balise (ici "color"), qu'on peut éventuellement spécifier (ici en ajoutant la couleur), et à la fin on ferme le type de balise, sans avoir à mémoriser la spécificité. Si je veux changer ma couleur je n'ai qu'à changer l'attribut dans la balise ouvrante.
Ton choix a ici un double inconvénient : à l'écriture (obligé de me souvenir de la couleur que j'ai ouverte pour pouvoir la fermer), et à la modification (si je change ma couleur, je dois changer la balise ouvrante ET fermante).

preg_replace une fonction éxisterait-elle ?

par katagoto » 04 avr. 2007, 15:25

Bonjour a tous et toutes,
Voilà je suis entrain de réaliser un PregCode (assimillabe a un "BBCode"), comme les expression rationnel (preg_repalce) sont assez compliqué et possède de nombreuses fonctions, je me demandais si une fonction ne me permetterais pas de récupéré une valeur du patern exemple :
preg_replace('#\[[0369FC]{6}\](.+)\[/$1\]#isU', '<$1>$2</$1>', $t8);
______________cette valeur_______récupéré
______________serait $1 et________ici et semblable
______________récupérable________pour que le
______________dans les____________remplacement
______________qualificateurs_______soit effectif

esce-qu'une telle fonction éxisterait-elle ???
d'avance merci

PS : Je sais j'aurais pût faire comme tout le monde ([color=[0369FC]{6}\](.+)[/color]), mais j'ai pas envis ;)