Utiliser une fonction au sein d'une regex

Petit nouveau ! | 8 Messages

10 août 2006, 09:42

Bonjour j'ai essayer ceci pour intégre une fonction, mais un message d'erreur s'affiche.
$message = preg_replace('#\[php\](.+)\[/php\]#i', '<br /><br /><strong>Code : PHP</strong><div align="center" style="border:dashed #003399 1px; padding:5px">'.highlight_string($1).'</div>', $message); 

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 août 2006, 09:57

:shock: euh, certes

Je suis vraiment désolé mais je n'ai rien compris à ce que tu voulais obtenir et ce qui ne marche pas :oops:

Est-ce que tu pourrais préciser ton problème stp ? merci d'avance ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Petit nouveau ! | 8 Messages

10 août 2006, 10:05

Ca affiche cette erreure :
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in /media/160go/hebergement/megaland.goldzoneweb.info/test/includes/view_topic.inc.php on line 101
C'est donc une erreure de symtaxte.

PS : C'est pour une colorisation du code PHP avec une balise de BBCode. (je programme mon forum)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 août 2006, 10:15

ok, je comprend

Je pense que ton erreur vient du fait qu'une variable php ne doit jamais commencer par un chiffre dont $1 n'est pas autorisé ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

ViPHP
ViPHP | 1380 Messages

11 août 2006, 17:14

L'appel à une fonction callback dans preg_replace est un casse-tête. Je préfère de loin preg_replace_callback().

De plus la fonction highlight_string() doit être bufférisée pour produire les effets désirés. Deux problèmes donc.

preg_replace avec option e (qui manque dans ton exemple, il faut aussi rendre le multiplicateur + non gourmand):
$message = preg_replace('#\[php\](.+?)\[/php\]#ei',  "'code html avant '.strtoupper('$1').'  code html après'", $message);
La valse des quotes, et guillemets en trois temps! :wink:

Ici j'ai pris strtoupper() pour illustrer l'option e car, comme signalé plus haut, highlight_string() doit être bufférisée.

Dans ce contexte $1 n'est pas une variable mais bien une référence arrière à la sauce PHP. Equivalent à \1 dans les autres langages.

Essaye déjà ceci.
ripat