IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec preg_replace_callback


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Electroniktor
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 150
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :
    Texte en C++ : // commentaire du fichier "fichier.cpp"
    Coloré pour HTML : // commentaire du fichier "fichier.cpp"

    Alors qu'il devrais donner :
    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 !

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    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.

Discussions similaires

  1. [RegEx] probléme avec preg_replace_callback
    Par abousa3d dans le forum Langage
    Réponses: 7
    Dernier message: 19/05/2010, 12h01
  2. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo