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 04/12/2011, 09h13   #1
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Par défaut Remplacer une image avec <img scr

j'ai un contenu $desc incluant ce tag je fais un code comme celà:
Code :
1
2
 
$rech='/\[(.*?)\]/is';$rempl='<img src="$1"  title="$1" />';$desc=preg_replace($rech,$rempl,$desc);
l'inconvénient c'est que çà me donne ce résultat
Code :
<img scr="images/image/1.jpg" title="images/image/1.jpg" />
alors que j'aimerais avoir comme résultat
Code :
<img scr="images/image/1.jpg" title="1.jpg" />
il manque un petit truc mais là je suis bloqué.merci pour votre aide
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 10h59   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Il n'y a pas besoin de regex, tu peux faire comme ça :
Code :
1
2
3
4
<?php
$txt = trim('[images/image/1.jpg]', '[]');
$html = '<img src="' . $txt . '" title="' . basename($txt) . '" />';
?>
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 12h22   #3
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Citation:
Envoyé par rawsrc Voir le message
Bonjour,

Il n'y a pas besoin de regex, tu peux faire comme ça :
Code :
1
2
3
4
<?php
$txt = trim('[images/image/1.jpg]', '[]');
$html = '<img src="' . $txt . '" title="' . basename($txt) . '" />';
?>
oui j'ai déjà pensé a celà.mais c'est pas adpaté dans mon cas j'aimerais plutot une solution expreg
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 14h47   #4
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Salut,

Essaie comme ceci...

Code :
$desc=preg_replace('%\[((?:.*?/)*(.+?)\.[a-z0-9]+)\]%i', '<img scr="$1" title="$2" />', $desc);
En prenant soin au préalable que les données entre crochets representent effectivement une URL. Dans le cas contraire, si des guillemets sont présents par exemple, le code XHTML généré pour l'image serait "cassé".

Edit :
Voir aussi :
parse_url (Analyse une URL et retourne ses composants)
filter_var (Filtre une variable avec un filtre spécifique)
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/12/2011, 15h03   #5
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour Eric2a,
Avec ton pattern tu ne récupères pas le jpg du nom de fichier : title="1"Je l'ai un peu modifié :
Code :
$desc = preg_replace('%\[((?:.*?/)*((.+?)\.\w+))\]%i', '<img scr="$1" title="$2" />', $desc);
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/12/2011, 15h16   #6
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Bien vu et Merci pour la correction rawsrc
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 16h49   #7
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
houlà je pensais pas que ce serait si compliqué .
petite question
dans pourquoi ce ?
dans pourquoi
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 18h40   #8
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
La présence du point d'interrogation après le quantificateur (+) pemet à ce dernier d'être moins gourmand. Je l'ai plaçé par habitude mais il n'est pas utile dans ton cas après tout.

Plus d'info sur les répetitions.

Les caractères ?: après une parenthèse ouvrante permet de rendre ces parenthèses non capturantes.

Pattern simplifié
\[((?:.*/)*(.+\.\w+))\]
\[	# Crochet gauche (caractère litteral)

	(	# Parenthèse capturante #1
		Contient se qui se trouve entre les crochets

		(?:	# Parenthèse non capturante
		Permet de "passer" le chemin du fichier constitué :

			.*/		# d'éventuels caractères suivis d'un slash

		)*	# La présence du chemin est facultative

		(	# Parenthèse capturante #2 : Contient le nom du fichier

			.+		# Au moins un caractère
			\.		# Le point (caractère litteral)
			\w+		# L'extension
		)

	)

\]	# Crochet droit (caractère litteral)
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/12/2011, 20h05   #9
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
merci eric2.Je crois avoir compris
en m'inspirant de votre méthode j'ai essayé une autre méthode avec express reg tout sauf:
Code :
1
2
$rech='#\[([^\/]*\/)((.+?)\.\w+)\]#i';$rempl='<img src="$1$2" alt="$2" title="$2" />';
$desc=preg_replace($rech,$rempl,$desc);
mais ca ne marche pas .
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 20h16   #10
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Pour faire comme tu as essayé, il faut utiliser ce regex :
Code :
$desc = preg_replace('/(?:(\w.*)(.+\.\w+))/', '<img scr="$1$2" title="$2" />', $desc);
Tu peux aussi essayer avec ce pattern :
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 20h41   #11
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Citation:
Envoyé par rawsrc Voir le message
Pour faire comme tu as essayé, il faut utiliser ce regex :
Code :
$desc = preg_replace('/(?:(\w.*)(.+\.\w+))/', '<img scr="$1$2" title="$2" />', $desc);
Tu peux aussi essayer avec ce pattern :
désolé les 2 méthodes ne marchent pas .
ca me donne toujours
Code :
<img scr="images/image/1.jpg" title="images/image/1.jpg" />
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2011, 21h48   #12
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Ah pas les deux, la deuxième effectivement j'ai fais un raté la 1ère est correcte sauf qu'elle garde les [] en php (mais je dois l'avouer ne pas l'avoir testé avec le moteur regex de php) j'ai juste fais des essais avec ce super outil
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 14h32   #13
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Citation:
Envoyé par bigs3232
j'ai essayé une autre méthode...
Pourtant dans le motif que je t'ai donné
\[((?:.*/)*(.+\.\w+))\]
nous capturons pour la chaine
images/image/1.jpg
	   L'URL complète (capture #1) : images/image/1.jpg
	Le nom du fichier (capture #2) : 1.jpg
C'est la partie du motif suivante
((?:.*/)*
qui permet au moteur d'expressions rationnelles de se positionner sur le premier caractère du nom du fichier.
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 14h38   #14
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
merci eric .ta technique marche nikel.simplement je voudrais essayer d'autres méthodes c'est tout.c'est comme celà qu'on apprend je pense en trouvant plusieurs solutions
bigs3232 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/12/2011, 14h45   #15
Membre Expert
 
Avatar de Eric2a
 
Homme Eric Garidacci
Inscription : septembre 2005
Messages : 1 057
Détails du profil
Informations personnelles :
Nom : Homme Eric Garidacci
Âge : 41

Informations forums :
Inscription : septembre 2005
Messages : 1 057
Points : 1 564
Points : 1 564
Citation:
Envoyé par bigs3232
c'est comme celà qu'on apprend je pense en trouvant plusieurs solutions
Oui, je m'en suis douté un peu en voyant que tu as testé aussi les classes négatives [^\/]*\/.

Maintenant j'ai confirmation... +1
__________________

N'oubliez pas le vote des messages utiles ainsi que le Tag [Résolu].

Mon Site Web : Corse - Actualité, Météo, Vidéos, Logiciels, ...
Eric2a est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 14h54   #16
Nouveau Membre du Club
 
Inscription : janvier 2010
Messages : 291
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 291
Points : 28
Points : 28
Citation:
Envoyé par Eric2a Voir le message
Oui, je m'en suis douté un peu en voyant que tu as testé aussi les classes négatives [^\/]*\/.

Maintenant j'ai confirmation... +1
le probleme c'est qu'avec ma classe négative ca ne marche pas quand c'est moi qui propose la solution.Je suis un petit débutant aussi
bigs3232 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 18h09.


 
 
 
 
Partenaires

Hébergement Web