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 15/02/2008, 12h37   #1
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
Par défaut Remplacement de balise

Hello,

j'ai une chaîne qui contient cela :
Code :
1
2
 
<a href="javascript:pop_image('1718','1718','155','239');"><img src="..." /></a>
il faut que je puisse remplacer tout ce qu'il y a entre guillemet par cela :

Code :
<a href="http://www.nomdusite.com/bdd/images/1718.jpg" rel="lytebox"><img src="..." /></a>
en sachant qu'il faut que je récupéré le premier numéro entre parenthèse pour le réintégrer dans la nouvelle ligne.
Cette chaîne peut être présente plusieurs fois dans un texte issu d'une table.

pour l'instant j'ai fait cela pour trouver le contenu dans le texte, c'est au niveau du traitement que je bloque
Code :
1
2
3
4
5
6
7
8
9
function image($texte){
	preg_match_all('#<a href="javascript:pop_image(.+?)>#',$texte,$matches);
	for($i=0;$i<count($matches[0]);$i++){
//traitement a faire ici pour remplacement
 
		}
	}
 
}
vous auriez une idée ?

merci
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 13h15   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Si le but est de faire du remplacement pourquoi n'utilisez-vous pas la fonction preg_replace directement ?
Code :
$out = preg_replace('~<a href="javascript:pop_image\(\'(\d+)\'.*\);">~U', '<a href="http://www.nomdusite.com/bdd/images/\1.jpg" rel="lytebox">', $in);
A adapter, si besoin.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 13h18   #3
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
salut,
j'ai pensé à ceci, mais il doit y avoir moyen de faire plus élégant pour prévoir des séquences de chiffres plus longues ou plus courtes...
Code :
1
2
3
4
5
6
7
8
9
10
function image($texte){
	preg_match_all('#[[:digit:]]{4}|[[:digit:]]{3}#',$texte,$matches);
	foreach($matches[0] as $entry){
		echo '<a href="http://www.nomdusite.com/bdd/images/'.$entry.'.jpg" rel="lytebox"><img src="..." /></a>';
 	}
}
 
$texte = "<a href=\"javascript:pop_image('1718','1719','155','239');\"><img src=\"...\" /></a>";
 
image($texte);
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 13h26   #4
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
en effet preg_replace était la solution parfaite

merci pour les infos

bonne journée
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 13h29   #5
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
tant mieux si ça fonctionne.
je reviens quand même sur le code que j'ai posté car en fait je viens de penser qu'il suffit de faire ceci...
Code :
1
2
3
4
5
6
function image($texte){
	preg_match_all('#[[:digit:]]{1,4}#',$texte,$matches);
	foreach($matches[0] as $entry){
		echo '<a href="http://www.nomdusite.com/bdd/images/'.$entry.'.jpg" rel="lytebox"><img src="..." /></a>';
 	}
}
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 13h38   #6
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
je vais tester les deux méthodes et voir celle qui consomme le moins de ressources et la plus rapide en exécution (vu le nombre de requête par jour il faut que j'optimise au maximum)

j'ai un petit souci
en fait, l'image peut être au format jpg, gif ou png

du coup si je met jpg ca ne passe pas
y aurai t il un moyen simple de faire un contrôle si l'image existe dans un format et de mettre la bonne extension dans le regex ?
kenji33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 15h38   #7
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il n'y a qu'à faire ce traitement par une fonction de rappel lors de chaque correspondance (implique l'utilisation de la fonction preg_replace_callback au lieu de preg_replace) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
function cb_replace($m) {
    static $extensions = array('jpg', 'gif', 'png');
 
    foreach ($extensions as $ext) {
        if (file_exists($m[1] . '.' . $ext)) { # Adapter le chemin si nécessaire
            return '<a href="http://www.nomdusite.com/bdd/images/' . $m[1] . '.' . $ext . '" rel="lytebox">';
        }
    }
    return $m[0]; # Par défaut, on laisse la chaîne inchangée
}
 
$out = preg_replace_callback('~<a href="javascript:pop_image\(\'(\d+)\'.*\);">~U', 'cb_replace', $in);
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2008, 18h13   #8
Candidat au titre de Membre du Club
 
Inscription : janvier 2006
Messages : 28
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : janvier 2006
Messages : 28
Points : 11
Points : 11
Envoyer un message via ICQ à kenji33 Envoyer un message via MSN à kenji33 Envoyer un message via Skype™ à kenji33
super

merci beaucoup , avec cette fonction je vais pouvoir remettre a jour la base

bon week end
kenji33 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 19h25.


 
 
 
 
Partenaires

Hébergement Web