Précédent   Forum des professionnels en informatique > PHP > Langage
Langage Forum sur le langage PHP, la POO, les conventions, la sécurité, etc. Avant de poster : FAQ Langage, toutes les FAQ PHP, cours langage et sources PHP
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 10/01/2011, 23h33   #1
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Par défaut extraction chaine caractere

Bonjour,

Voici mon texte :

Code :
$texte = 'aaaaa "http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"';
Je cherche a extraire la partie http://www.image1.jpg

J'ai utilisé l'expression reguliere suivante :

Code :
preg_match('#"http:.*\"#',$texte,$res);

mais le résultat de $res[0] me renvoie :

Code :
http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"'

Savez-vous comment extraire seulement :

http://www.image1.jpg


Merci bcp
omelhor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/01/2011, 23h54   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
juste :
le . prend tout jusqu'à la derniere occurence il faut le mettre en mode lazy pour s'arrêter à la première, le mode lazy c'est avec l'option "?" .*?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 00h01   #3
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Citation:
Envoyé par stealth35 Voir le message
juste :
le . prend tout jusqu'à la derniere occurence il faut le mettre en mode lazy pour s'arrêter à la première, le mode lazy c'est avec l'option "?" .*?

Si je met
Code :
preg_match('#http://\s+#',$texte,$res);
Cela me retourne un tableau vide:


Code :
1
2
3
4
<pre>Array
(
)
</pre>
omelhor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 00h07   #4
Membre du Club
 
Jean Frederic Nault
Inscription : juillet 2010
Messages : 61
Détails du profil
Informations personnelles :
Nom : Jean Frederic Nault

Informations forums :
Inscription : juillet 2010
Messages : 61
Points : 59
Points : 59
essaye ceci :
Code :
1
2
3
4
5
6
7
8
 
<?php
	$texte = 'aaaaa "http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"';
	$pattern = '#(http:\/\/)+(.*?)\\\"#';
	$replacement = " $1";
	preg_match($pattern, $texte, $res);
	echo($res[1].$res[2]);
?>
nault est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 00h52   #5
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Citation:
Envoyé par nault Voir le message
essaye ceci :
Code :
1
2
3
4
5
6
7
8
 
<?php
	$texte = 'aaaaa "http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"';
	$pattern = '#(http:\/\/)+(.*?)\\\"#';
	$replacement = " $1";
	preg_match($pattern, $texte, $res);
	echo($res[1].$res[2]);
?>
Merci à tous pour votre aide

J'essaye d'utilise ta méthode pour extraire des images, mais je n'arrive pas à les isoler


Code :
1
2
3
4
5
6
7
$texte = 'aaaaa "<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >';
$pattern = '#(<img.*(http:\/\/)+(.*?)(\\\")+(.*))#';
$replacement = " $1";
preg_match($pattern, $texte, $res);
echo "<pre>";
print_r($res);
echo "</pre>"

Résultat :


Code :
1
2
3
4
5
6
7
8
9
10
<pre>Array
(
    [0] => <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >
    [1] => <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >
    [2] => http://
    [3] => <a href="http://www.image3.jpg" target="_blank">www.image3.jpg</a>
    [4] => \"
    [5] =>  >
)
</pre>

Mon but étant d'avoir pour chaque image a décomposition suivante:

Code :
1
2
3
4
5
6
<pre>Array
(
    [0] => <img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\">
    [1] => http://
    [2] => <a href="http://www.image3.jpg" target="_blank">www.image3.jpg</a>
)
En fait le but sera de tester l'image en fonction de sa largeur, et si il me convient pas je supprime le bloc
Code :
<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\">

Comment faire pour isoler chaque balise img ?
omelhor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 01h24   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
comme ca avec un preg_match_all sinon t'aura que la première occurrence :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$str = 'aaaaa "<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >';
preg_match_all('/(?<=\x22)http\x3A\x2F{2}.*?(?=\x5C?\x22)/', $str, $matches);
print_r($matches);
/*
Array
(
    [0] => Array
        (
            [0] => http://www.image1.jpg
            [1] => http://www.image2.jpg
            [2] => http://www.image3.jpg
        )
 
)
*/
ou comme ça : #(?<=")http://.*?(?=\\\?")#, si l'ASCII ca te perturbe, mais c'est plus simple de mettre le code ASCII que d'échapper un caractère, surtout en PCRE où beaucoup sont réservés (en plus des délimiteurs, et des quotes PHP)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 07h22   #7
Membre habitué
 
Inscription : septembre 2004
Messages : 244
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 244
Points : 110
Points : 110
Citation:
Envoyé par stealth35 Voir le message
comme ca avec un preg_match_all sinon t'aura que la première occurrence :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$str = 'aaaaa "<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\"><img src=\"http://www.image2.jpg\" width=\"128\"><img src=\"http://www.image3.jpg\" >';
preg_match_all('/(?<=\x22)http\x3A\x2F{2}.*?(?=\x5C?\x22)/', $str, $matches);
print_r($matches);
/*
Array
(
    [0] => Array
        (
            [0] => http://www.image1.jpg
            [1] => http://www.image2.jpg
            [2] => http://www.image3.jpg
        )
 
)
*/
ou comme ça : #(?<=")http://.*?(?=\\\?")#, si l'ASCII ca te perturbe, mais c'est plus simple de mettre le code ASCII que d'échapper un caractère, surtout en PCRE où beaucoup sont réservés (en plus des délimiteurs, et des quotes PHP)

C'est exactement ce que je cherche à extraire.

Comment je faut aussi pour récupérer chaque balise img complète :

<img src=\"http://www.image1.jpg\" alt=\"alt\" title=\"titre1\">
<img src=\"http://www.image2.jpg\" width=\"128\">
<img src=\"http://www.image3.jpg\" >

En fait ce que je cherche a faire c récuperer toutes les balises html img
En extraire les images afin de déterminer leur taille
Si la taille des images sont supérieur à une largeur donnée, je n'affiche pas ou supprimes la balise img concernée

Si vous connaissez un bon ptit bouquin sur les expressions reguliere en php je suis preneur !!!

Merci encore
omelhor 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 19h15.


 
 
 
 
Partenaires

Hébergement Web