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 :

Une limite aux REGEX ?


Sujet :

Langage PHP

  1. #1
    Membre à l'essai Avatar de Noxalus
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Une limite aux REGEX ?
    Bonjour à toutes et à tous !

    Pour un projet personnel, je suis amené à colorer du code entre crochet en Ruby. Pour ça, j'ai utilisé l'excellente bibliothèque GeiShi, mais je suis confronté à un problème.

    En effet, dès que le texte à colorer dépasse 45 233 caractères, la REGEX ne s'exécute pas et le texte ne s'affiche même pas !

    Savez-vous d'où peut venir ce problème ?

    Voici le code pour la coloration en Ruby:

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php
    //Colore le code écrit en Ruby !
    function ruby($texte)
    {	
    	$texte = preg_replace_callback('#\[ruby\](.+)?()\[/ruby\]#isU', 'parse_ruby', $texte);
    	return $texte;
    }
     
    function parse_ruby($capt)
    {
    	$code = trim(htmlspecialchars_decode($capt[1]));
    	$code = new GeSHi($code, 'ruby');
    	$code = $code->parse_code(FALSE);
     
    	return '<div><div class="tout_selectionner"><a onclick="selectCode(this); return FALSE;" href="#">Tout sélectionner</a></div>' . str_replace("\n", '<br />', $code) . '</div>'; 
    }
    ?>

    Merci d'avance !

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pas besoin de regexp pour ça un strpos va suffir

  3. #3
    Membre à l'essai Avatar de Noxalus
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Vous voulez dire en identifiant les premières occurence de "[ruby]" et de "[/ruby]" puis en faisant un substr() ?

    Ça résoudrait en effet quelques problème car je viens de me farcir la doc, et en effet, j'ai pu constater qu'il y avait une limite de taille pour l’exécution d'une REGEX, je cite:

    The pcre.backtrack_limit option (added in PHP 5.2) can trigger a NULL return, with no errors. The default pcre.backtrack_limit value is 100000. If you have a match that exceeds about half this limit it triggers a NULL response.
    e.g. My limit was at 100000 but 500500 triggered a NULL response. I'm not running unicode but I *guess* PCRE runs in utf-16.
    (source)

    Je test ça tout de suite !

    Merci pour l'astuce en tout cas !

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Les développeurs qui se sont cassés les dents sur la coloration syntaxique alors qu'il existe des scripts JS prêts à l'emploi sont légion.

    Pourquoi ne pas utiliser l'un de ceux là ?

    On dit merci

Discussions similaires

  1. Réponses: 17
    Dernier message: 23/09/2010, 18h06
  2. Limiter une requête aux X premières occurences
    Par lbar012001 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 20/05/2009, 12h57
  3. Comment faire une condition aux limites?
    Par j-mike dans le forum MATLAB
    Réponses: 10
    Dernier message: 09/10/2008, 15h28
  4. Réponses: 3
    Dernier message: 13/12/2007, 14h44
  5. [Configuration] une limite aux accolade?
    Par yemal48 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 11/10/2005, 21h15

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