Une quote dans une quote [regexp]

Une quote dans une quote [regexp] - PHP - Programmation

Marsh Posté le 24-11-2003 à 18:22:22    

hmmm pas tres facile la.
Grace a l'autre topic sur les regex j'avais eu assez de bout de code pour comprendre comment monter un systeme de quote assez banal a savoir [quote=le_nom]blabla[/quote] qui donnais a peu pres le meme resultat qu'ici.
 
Par contre si je fait [quote=le_nom][quote=le_nom]blabla[/quote]blabla[/quote] la ca part en vrille et il considerre le premier [/quote] comme etant la fin du premier [quote] et m'inscrivant ainsi le dernier quote comme un message banale :o [:totoz]
 
le resultat ici : http://chak.serveftp.com/chak_foru [...] at=2&sub=2
 
ma reg :

Code :
  1. $ToPreg=preg_replace("#\[quote=(.*?)\](.*?)\[/quote\]#si",'<center>
  2. <table style="width:550px; border:none;"><tr><td style="padding:1px; font-weight:bold; border:none;">$1 wrote :</td>
  3. </tr><tr><td style="background-color : #5F5F5F; padding:4px">$2</td></tr></table></center>', $ToPreg);


 
help :)


Message édité par Profil supprimé le 24-11-2003 à 18:22:44
Reply

Marsh Posté le 24-11-2003 à 18:22:22   

Reply

Marsh Posté le 24-11-2003 à 18:34:50    

question tres interessante, je serais curieux de voir une regex qui fonctionne sur :  
 

Citation :


Citation :






Citation :




 
 
La seule solution que j'ai trouvée est de parser a la main a coup de strpos substr_replace. Ca marche du tonnerre mais c'est assez fastidieux.


Message édité par karamilo le 24-11-2003 à 18:35:10
Reply

Marsh Posté le 24-11-2003 à 18:38:35    

preg_replace("/\[quote=(.*?)\](.*?)\[/quote\]/si",'<div>'.$1.' a écrit:<br />'.$2.'</div>',$text);
devrait fonctionner

Reply

Marsh Posté le 24-11-2003 à 18:46:14    

gizmo a écrit :

preg_replace("/\[quote=(.*?)\](.*?)\[/quote\]/si",'<div>'.$1.' a écrit:<br />'.$2.'</div>',$text);
devrait fonctionner

en effet :ouch:  
 
merci bcp je vais decortiquer tout ca :)

Reply

Marsh Posté le 24-11-2003 à 18:47:31    

ha mais nan en fait :lol:
 
ca marche qu'avec 2 quote mais si les utilisateur decident de faire un championnat de quote je suis mal :/

Reply

Marsh Posté le 24-11-2003 à 18:52:16    

wai en fait ma regexp fonctionnait nikel mais faut que j'en mette une par quote.
 
Si je met une fois  
$ToPreg=preg_replace("#\[quote=(.*?)\](.*?)\[/quote\]#si",'<center>
<table style="width:550px; border:none;"><tr><td style="padding:1px; font-weight:bold; border:none;">$1 wrote :</td>
</tr><tr><td style="background-color : #5F5F5F; padding:4px">$2</td></tr></table></center>', $ToPreg);
 
ca me fera qu'un quote, si j'en met 2 ca en fera 2...

Reply

Marsh Posté le 24-11-2003 à 18:57:02    

euh... et tu vas la foutre dans une boucle? :heink:
 
A mon avis, le plus simple serait d'utiliser preg_replace_callback.

Reply

Marsh Posté le 24-11-2003 à 19:07:13    

hm wai jamais utilisé cette fonction et il me chie a la geule :/

Code :
  1. $ToPreg=preg_replace_callback("#\[quote=(.*?)\](.*?)\[/quote\]#si", '<center>
  2. <table style="width:550px; border:none;"><tr><td style="padding:1px; font-weight:bold; border:none;">$1 wrote :</td>
  3. </tr><tr><td style="background-color : #5F5F5F; padding:4px">$2</td></tr></table></center>', $ToPreg);


 

Code :
  1. Warning: preg_replace_callback() requires argument 2, '
  2. $1 wrote :
  3. $2
  4. ', to be a valid callback in e:\coding\chak_forum\include\replace.php on line 58
  5. pwned !


 
je voit pas ce qu'il a d'invalide


Message édité par Profil supprimé le 24-11-2003 à 19:07:52
Reply

Marsh Posté le 24-11-2003 à 19:11:57    

ceci fonctionne :
 

Code :
  1. while (preg_match("/(\[quote\])(.+?)(\[\/quote\])/si",$text))
  2. {
  3. $text = preg_replace( "/(\[quote\])(.+?)(\[\/quote\])/si", "<table width=\"90%\" align=\"center\"><tr><td class=\"qte\">\\2</td></tr></table>", $text);
  4. }


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 24-11-2003 à 19:13:38    

chacal_one333 a écrit :


je voit pas ce qu'il a d'invalide


 
rtfm! :o
 
avec preg_replace_callback(), le 2ème argument doit être une fonction de callback


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 24-11-2003 à 19:13:38   

Reply

Marsh Posté le 24-11-2003 à 19:14:58    

egalement :jap:
j'ai appris un truc merci :hello:

Reply

Marsh Posté le 24-11-2003 à 19:19:22    

Mais je ne garantis pas que ce soit la solution la plus élégante/efficace? :D


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Marsh Posté le 24-11-2003 à 19:24:06    

quand ca marche c'est efficace :jap:

Reply

Marsh Posté le 24-11-2003 à 19:25:09    

Ceci est déjà un peu mieux :
 

Code :
  1. $matches = array();
  2. preg_match_all("/(\[quote\])(.+?)(\[\/quote\])/si",$text,$matches);
  3. for($i=0;$i<sizeof($matches);$i++)
  4. {
  5. $text = preg_replace( "/(\[quote\])(.+?)(\[\/quote\])/si", "<table width=\"90%\" align=\"center\"><tr><td class=\"qte\">\\2</td></tr></table>", $text);
  6. }


 
Ca évite de relancer un preg_match à chaque fois? :D


---------------
Faux & usage de faux ¤ Machins roses ¤ ASCIImage ¤ HFR Enhance v0.8.6
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed