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 :

Remplacement BBCode imbriquées [Débutant(e)] [RegEx]


Sujet :

Langage PHP

  1. #1
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut Remplacement BBCode imbriquées
    Bonjour,

    Je suis en train de développer un système de citation à partir de balise BBCode pour un site internet.

    Le code des citations et du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ quote=X]texte cité[ /quote]
    J'ai repris la RegEx de la FAQ et ai compris son fonctionnement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $str = "[ quote=FAQ]Forum Developpez.com[ /quote]";
    $quote = '<div style="width:50%;background-color:#CCCCCC"><div style="background-color:#FFFFFF">Citation :</div>';
    $quote .= '$1 a écrit :<div style="background-color:#CC0000">$2</div></div>';
    preg_replace('#\[ quote=([^\]]*)\](.*)\[ /quote\]#Usi', $quote, $str);
    Il n'y a aucun souci pour une citation. Mais lorsque je cite une citation, je ne vois pas comment modifier la regex

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [ quote=FAQ2][ quote=FAQ]Forum Developpez.com[ /quote]Texte pour la citation 1[ /quote]Texte pour la citation 2
    Je précise que je suis débutant dans les regex donc si je ne comprends pas tout du premier, ne m'en voulez pas ^^

    Si quelqu'un a une piste de réflexion ?


    Cordialement,
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Points : 8 040
    Points
    8 040
    Par défaut
    C'est bon j'ai réussi à trouver un pattern qui fait ce que je veux, coupler à preg_replace_callback();

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #\[ quote]((?:[^[]|\[(?!/?quote])|(?R))+)\[/ quote]#
    Il ne me reste plus qu'à l'adapter pour récupérer l'id de la quote.


    crash.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Membre éclairé Avatar de guitz
    Homme Profil pro
    Webdesigner
    Inscrit en
    Juillet 2006
    Messages
    717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Webdesigner

    Informations forums :
    Inscription : Juillet 2006
    Messages : 717
    Points : 741
    Points
    741
    Par défaut
    Bonjour, pourrais tu stp poster ce que tu as développé ?

    Merci beaucoup

    edit :

    Bon j'ai trouvé ça sur le net et ça marche nickel :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function replace_quotes_callback($matches) {
        $cite = empty($matches[1]) ? '<p><strong>Citation : </strong></p>' : '<p><strong>' . $matches[1] . '</strong> a écrit :</p>';
        return '<div class="quote">' . $cite . '<p>' . replace_quotes($matches[2]) . '</p></div>';
    }
     
    function replace_quotes($data) {
        return preg_replace_callback('~\[quote(?:=([^\]]+))?\]((?:(?R)|.)*?)\[/quote\]~s', 'replace_quotes_callback', $data);
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Parser du BBcode imbriqué
    Par VonDriguen dans le forum Langage
    Réponses: 3
    Dernier message: 25/02/2014, 11h50
  2. [RegEx] Remplacement BBcode par HTML
    Par J0r_x dans le forum Langage
    Réponses: 4
    Dernier message: 27/11/2007, 14h47
  3. [RegEx] regex pour remplacer bbcode et img
    Par gwena54 dans le forum Langage
    Réponses: 6
    Dernier message: 16/08/2007, 14h42
  4. [Système] bbcode imbriqué qui ne marche pas
    Par jexl dans le forum Langage
    Réponses: 11
    Dernier message: 22/06/2007, 12h21
  5. Remplacer une query imbriqué sous mySQL 4.01
    Par brousaille dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/01/2006, 19h33

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