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 28/04/2006, 17h57   #1
Membre du Club
 
Inscription : avril 2005
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 300
Points : 59
Points : 59
Par défaut Question performance avec preg_replace_callback()

Bonjour,

Je souhaiterais savoir, en terme de performance que vaut-il mieux faire pour un grand nombre d'appel au premier ou deuxième cas : (simple exemple, ne pas tenir compte des balises, etc..)

Code :
1
2
3
4
5
6
    $texte = preg_replace_callback('`\[1\].+\[/1\]`iU', array($this,'test'), $texte);
    $texte = preg_replace_callback('`\[2\].+\[/2\]`iU', array($this,'test'), $texte);
    $texte = preg_replace_callback('`\[3\].+\[/3\]`iU', array($this,'test'), $texte);
    $texte = preg_replace_callback('`\[4\].+\[/4\]`iU', array($this,'test'), $texte);
    $texte = preg_replace_callback('`\[5\].+\[/5\]`iU', array($this,'test'), $texte);
    $texte = preg_replace_callback('`\[6\].+\[/6\]`iU', array($this,'test'), $texte);
OU

Code :
    //$texte = preg_replace_callback('`\[(1|2|3|4|5|6)\].+\[/(1|2|3|4|5|6)\]`', array($this,'test'), $texte);
Avec dans la fonction test la gestion de si la valeur 1 et bien égale à la valeur 2.

N'est pas la seconde qui est le plus long finalement, même si l'on ne fait appel qu'à un seul preg_replace_callback(), du fait qu'il doit comparer 1 devant pour 1|2|3|... dernière et ainsi de suite ?

Merci de votre aide et avis.
Thierry8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2006, 18h08   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Salut !

le problème dans ton second exemple est que tu autorise quelque chose de ce style :
Citation:
[1]bla bla bla[/6]
je te conseillerais d'utiliser un truc comme ça :
Code :
    //$texte = preg_replace_callback('`\[(1|2|3|4|5|6)\].+\[/\\1\]`', array($this,'test'), $texte);
qui obligera à matcher ce qui a été trouvé lors de la première prise...

ensuite, je pense qu'il est plus léger (donc plus performant de ne faire qu'un seul appel plutôt que 6 dans ce cas en tous cas...
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2006, 18h42   #3
Membre du Club
 
Inscription : avril 2005
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 300
Points : 59
Points : 59
merci de ta réponse.

En fait le truc c'est que dans la fonction qui est appellée dans le calback je test si par exemple $1 est == $5 pour vérifier l'ouverture et la fermeture. A vrai dire je ne savais pas que l'on pouvait utiliser le résultat directement dans la même "requête".

En revanche je me suis toujours servit de $1. Quel est la différence avec \\1 ?
Thierry8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2006, 18h47   #4
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
en fait, le \\1 (\1 en fait puisque le \\ est transformé en \ après interprétation dans les ' ') est ce qu'on appelle une référence arrière, et ne doit (et ne peut) être utilisé que dans les patterns, pas dans les "masques" de remplacemet

en gros il s'agit surtout du "lieu" d'utilisation qui est différent ^^
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2006, 18h54   #5
Membre du Club
 
Inscription : avril 2005
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 300
Points : 59
Points : 59

Mais pourtant j'ai déjà vu des \\1 dans le résultat.
Un exemple de la doc:
Code :
1
2
3
preg_replace("/(<\/?)(\w+)([^>]*>)/e",
             "'\\1'.strtoupper('\\2').'\\3'",
             $html_body);
Ou alors je n'ai rien compris ?
En fait il faut utiliser le \\1 dans le preg_replace, etc.. et non pas le $1 parce qu'il peut être utilisé ailleurs ?
Thierry8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2006, 18h59   #6
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
perso, j'ai toujours utilisé le $ dans preg_replace, et n'ai jamais eu de problèmes avec...

Je ne pensais pas que le \\ soit accepté... à priori, il s'agit surtout de considération personnelles, perso je préfère toujours le $... plus clair
par contre je suis sûr que la syntaxe avec le $ ne peut être utilisée dans les recherches à cause de la signification du $ (fin de ligne/chaine)

après reflexion, la syntaxe en \\ permet surtout d'éviter l'interprétation du $1 en tant que variable quand il est entre " " ... enfin, suffit d'utiliser des simples quotes ou d'échaper les $ et on retombe sur le même problème...

principalement un choix perso donc
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2006, 19h05   #7
Membre du Club
 
Inscription : avril 2005
Messages : 300
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 300
Points : 59
Points : 59
Très bien, je te remercie de ton aide.
Thierry8 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/04/2006, 19h09   #8
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
De rien, content d'avoir pu t'aider
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h14.


 
 
 
 
Partenaires

Hébergement Web