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 :

Expression régulière façon bbcode, problème sur une page complete. [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut Expression régulière façon bbcode, problème sur une page complete.
    Bonjour,

    Alors voila. Je suis entrain de me faire un parseur façon bb code. Pour ca, j'utilise la fonction preg_replace_callback.
    La première regexp trouve toutes les balises, et appele la méthode "_baliseSimplesVersHtml" qui par exemple me tranforme une balise de type "[ligne]" en un code html affichant une image de séparation.

    La seconde regexp récupère les balises de type [definition]blabla[/definition], et envoie vers la méthode baliseComplexeVersHtml, qui va remplacer tout le bloc par "blabla" et une infobulle avec sa définition.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $textarea = preg_replace_callback("/(\[([\w]+)[^\]]*\])|(\[\/([\w]+)[^\]]*\])/", array($this, "_baliseSimplesVersHtml"), $textarea);
     
    $textarea = preg_replace_callback("/(\[([\w]+)[^\]]*\])((.|\n)*)(\[\/\\2\])/U", array($this, "_baliseComplexeVersHtml"), $textarea);

    Ca marche très bien... tant que la page est petite. Si elle dépasse un trop grand nombre de caractère, apache redémare.
    Initialement, j'avais php 5.2.3, et sans planter, le callback ne faisait rien. J'ai upgradé en 5.3, et maintenant ca plante
    C'est visiblement la seconde regexp qui fait planter le tout car si je l'enlève, tout fonctionne (mais je ne sais pas comment remplacer mes balises complexe...). A noter également que si je garde la seconde regexp et que je remplace ((.|\n)*) au milieu par (.*), ca marche, mais il ne détecte plus les balises avec la balise ouvrante sur une ligne et la balise fermante sur une autre ligne.

    Je m'arrache les cheveux et je n'y comprend rien. Please, help !

    Si ca peut aider, voila ce que me dit le log apache (en gros, rien) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Sun Sep 27 21:53:03 2009] [notice] Parent: child process exited with status 255 -- Restarting.
    [Sun Sep 27 21:53:03 2009] [notice] Apache/2.2.11 (Win32) PHP/5.3.0 configured -- resuming normal operations
    [Sun Sep 27 21:53:03 2009] [notice] Server built: Dec 10 2008 00:10:06
    [Sun Sep 27 21:53:03 2009] [notice] Parent: Created child process 6536
    [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(487): Parent: Sent the scoreboard to the child
    [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Child process is running
    [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(408): Child 6536: Retrieved our scoreboard from the parent.
    [Sun Sep 27 21:53:03 2009] [info] Parent: Duplicating socket 268 and sending it to child process 6536
    [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(564): Child 6536: retrieved 1 listeners from parent
    [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Acquired the start mutex.
    [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Starting 64 worker threads.
    [Sun Sep 27 21:53:03 2009] [debug] mpm_winnt.c(605): Parent: Sent 1 listeners to child 6536
    [Sun Sep 27 21:53:03 2009] [notice] Child 6536: Starting thread to listen on port 80.
    Je prend toutes les solutions.. Si quelqu'un a une meilleure expression régulière, une fonction "a la mano" qui fait pareil mais sans planter, une option de configuration sur un php.ini ou je ne sais quoi... Bref, ca fait deux jours que je m'arrache les cheveux la dessus, et pas moyen.

    Merci d'avance !

  2. #2
    Membre éprouvé
    Avatar de Rakken
    Homme Profil pro
    Inscrit en
    Août 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 257
    Par défaut
    J'aurai mis le temps, mais j'ai trouvé !
    Le problème vient d'une limitation des regexps.

    Pour faire sauter cette limitation, dans le php.ini, il faut décommenter les instructions pcre et leur rajouter de la taille. Pour info, voici ce que j'ai mis chez moi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    pcre.recursion_limit=100000000
    pcre.backtrack_limit=100000000

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

Discussions similaires

  1. Problème sur une page
    Par jeje25440 dans le forum VB.NET
    Réponses: 0
    Dernier message: 04/07/2012, 17h40
  2. Problème sur une page graphique
    Par Regor dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 05/04/2011, 01h03
  3. Problème sur une expression régulière
    Par GregLig dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 22/12/2007, 13h34
  4. [XSL-FO] [fop] Problème sur une page unique
    Par gcproginov dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 18/10/2007, 09h52
  5. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54

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