Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/07/2008, 18h17   #1
Membre à l'essai
 
Avatar de Electroniktor
 
Inscription : juin 2007
Messages : 150
Détails du profil
Informations personnelles :
Âge : 19

Informations forums :
Inscription : juin 2007
Messages : 150
Points : 24
Points : 24
Par défaut Problème avec preg_replace_callback

Bonjour tout le monde !

J'ai un petit problème avec la fonction preg_replace_callback : je n'arrive pas à la faire marcher.

Voiçi une partie de mon script :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php 
    function f($matches)
    {
        $txt = $matches[1] . $matches[2];
	$txt = preg_replace('#<FONT COLOR=\#[0-9a-f]{6}>#', '', $txt);
	$txt = str_replace('</FONT>', '', $txt);
	return '<FONT COLOR=#0000ff>' . $txt . '</FONT>';
    }
    $cpp = '// commentaire du fichier "fichier.cpp"';
    $htm = $cpp;
    $htm = preg_replace('#"(.*)"#iU', '<FONT COLOR=#ff0000>$0</FONT>', $htm);
    $htm = preg_replace_callback('#(//)(.+)\n#isU', 'f', $htm);
    echo 'Texte en C++ : ' . $cpp . '<br/>';
    echo 'Coloré pour HTML : ' . $htm;
?>
Il donne ceci :
Citation:
Texte en C++ : // commentaire du fichier "fichier.cpp"
Coloré pour HTML : // commentaire du fichier "fichier.cpp"

Alors qu'il devrais donner :
Citation:
Texte en C++ : // commentaire du fichier "fichier.cpp"
Coloré pour HTML : // commentaire du fichier "fichier.cpp"
En fait, c'est la fonction f qui ne s'execute pas !

D'où vient le problème ?

Merci d'avance !
Electroniktor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2008, 23h03   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Si la fonction de callback ne s'exécute pas, c'est que la regex ne reconnaît rien. En effet, tu mets \n à la fin alors que ta chaîne se termine sans saut de ligne. Tu peux utiliser $ ou (\n|$) à la place, et ça marche.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h24.


 
 
 
 
Partenaires

Hébergement Web