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 29/04/2011, 14h57   #1
Invité de passage
 
Inscription : janvier 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 13
Points : 3
Points : 3
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 :
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 !
Noxalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 15h30   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pas besoin de regexp pour ça un strpos va suffir
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 15h57   #3
Invité de passage
 
Inscription : janvier 2009
Messages : 13
Détails du profil
Informations forums :
Inscription : janvier 2009
Messages : 13
Points : 3
Points : 3
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:

Citation:
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 !
Noxalus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/04/2011, 17h41   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 016
Points : 5 016
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
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre 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 09h20.


 
 
 
 
Partenaires

Hébergement Web