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 23/04/2007, 13h26   #1
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
Par défaut Remplacement et récupération

Bonjour,

Je ne parviens pas a trouver comment effectuer au mieux les 2 opérations suivantes:

Voici l'exemple :

$text="<p>titre</p><div><img src='fond.jpg' /></div>";

Comment puis, avec les expressions régulières, cinder la variable $text en autant de partie qu'il y a de balises img?

Ensuite, comment puis-je récupérer 'fond.jpg' dans une autre variable?

Résultat attendu :

Code :
1
2
3
4
5
6
$tableau= array();
 
$tableau[0]="<p>titre</p><div>";
$tableau[1]="</div>";
 
$var_image='fond.jpg';

Voilà exactement le résultat que j'aimerais, malheureusement, je manque de pratique avec les regex, et un exemple concret dans ce genre pourrait vraiment m'aider pour la suite de mon développement.

Je vous avoue avoir lu pas mal de tutoriels sur les regex, comment valider une url, une adresse mail, etc. Ca va, mais là je bloque un peu.

De plus je ne sais quelle fonction PHP est la plus performante et la moins gourmande en ressource pour effectuer ce genre d'opérations.

Merci à vous pour vos lumières.
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 13h56   #2
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
Code :
$test2=preg_replace('#<img src=(.+)/>#i', '$1', $test);
Je récupère dans $test2 : 'fond.jpg'

Maintenant, en ce basant sur la chaine suivante:

Code :
$test="<p> test </p><div>Texte de bla bla bla <br /><img src='fond.jpg' /></div>";

Comment récupérer dans :

Code :
1
2
3
$tableau[0] => "<p> test </p><div>Texte de bla bla bla <br />";
$tableau[1] => "'fond.jpg'";
$tableau[2] => "</div>";
Un grand merci
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 14h13   #3
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Pour ta premiere question :
Code :
$tableau = preg_split('#<img[^>]*>#Uis', $text);
Pour la seconde, voici quelques propositions :
Code :
1
2
3
preg_match_all('#<img[^>]*src=([\'"])([^\\1]*)\\1[^>]*>#Uis', $text, $matches);
 
print_r($matches);
Code :
1
2
3
preg_match_all('#<img[^>]*src=([\'"])(.*)\\1[^>]*>#Uis', $text, $matches);
 
print_r($matches);
Code :
1
2
3
preg_match_all('#<img[^>]*src=[\'"](.*)[\'"][^>]*>#Uis', $text, $matches);
 
print_r($matches);
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 14h28   #4
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
Hello Korko,

Merci pour ton aide!

J'ai trouvé ceci:

Code :
1
2
3
4
$test=preg_replace("#<img (.+)/>#isU", '', $test);
$test=preg_replace("#<div>(.+)</div>#isU", "$1 \n", $test);
$test=preg_replace("#<p>(.+)</p>#isU", "$1 \n", $test);
$test=preg_replace("#<br />#isU", "\n", $test);
Ca marche très bien!

Par contre, si je veux optimiser en me disant qu'il y aura peut etre des attributs supplémentaires dans la balise <div> ou <p>, je fais ceci:

Code :
1
2
3
4
$test=preg_replace("#<img (.+)/>#isU", '', $test);
$test=preg_replace("#<div(.+)>(.+)</div>#isU", "$2 \n", $test);
$test=preg_replace("#<p(.+)>(.+)</p>#isU", "$2 \n", $test);
$test=preg_replace("#<br />#isU", "\n", $test);

Mais la deuxième solution ne semble pas fonctionner...

Une petite idée de mon erreur?

Merci
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 15h01   #5
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Code :
1
2
3
4
$text = preg_replace('#<img.*>#Uis', '', $text);
$text = preg_replace('#<div.*>(.*)</div>#Uis', "$1\n", $text);
$text = preg_replace('#<p.*>(.*)</p>#Uis', "$1\n", $text);
$text = preg_replace('#<br.*>#Uis', "\n", $text);
^^
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 15h19   #6
Membre éprouvé
 
Avatar de Sayrus
 
Inscription : décembre 2005
Messages : 818
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : décembre 2005
Messages : 818
Points : 456
Points : 456
Cool!

Un grand merci
Sayrus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 16h16   #7
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
You're Welcome
Korko Fain 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 10h29.


 
 
 
 
Partenaires

Hébergement Web