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 24/11/2011, 18h16   #1
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
Par défaut preg_replace sélectif ?

Bonjour,

Dans un texte j'ai besoin d'insérer une balise img au début d'un
paragraphe. La difficulté c'est que ça peut être n'importe quel paragraphe, ça dépend.
Je n'arrive pas à voir comment effectuer le remplacement uniquement
dans le paragraphe voulu.
Si je fais:
Code :
preg_replace('#<p.*>(.*)</p>#Usi', '<img etc... />$1', $text);
la balise img est bien insérée mais dans tout les paragraphes et ça ne va pas.
Y a t-il moyen d'être sélectif avec preg_replace ou faut-il utiliser une autre solution ?


Merci.
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 18h23   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 209
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 209
Points : 8 588
Points : 8 588
pour manipuler du HTML c'est DOMDocument
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2011, 18h40   #3
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Citation:
Envoyé par stealth35 Voir le message
pour manipuler du HTML c'est DOMDocument
Tu devrais le mettre dans ta signature vu le nombre de fois que tu le dis

@tintin72
Fais un XPath pour trouver les paragraphes que tu veux et utilise la méthode DOMNode::insertBefore.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 14h18   #4
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
Merci pour vos réponses, c'est en effet DOMDocument qui est
le mieux adapté à ce que je veux faire.

Toutefois j'ai un problème. Etant novice avec DOMDocument
je suis parvenu à un code qui fonctionne.
Ici la balise img est insérée dans le 2eme paragraphe:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$doc = DOMDocument::loadHTML($textHtml);
$tags = $doc->getElementsByTagName('p');
 
$paragraphNb = 0;
 
foreach($tags as $tag)
{
  if($paragraphNb == 1)
    $tag->nodeValue = $imgTag.$tag->nodeValue;
 
  $paragraphNb++;
}
Ce que je ne sais pas c'est comment faire pour que le changement
effectué dans le paragraphe soit répercuté dans le document
original $textHtml.

Merci pour votre aide.
tintin72 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 14h40   #5
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 031
Points : 5 031
Utilise DOMDocument::saveHTML (ou saveXML si c'est du XML)
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2011, 15h11   #6
Membre habitué
 
Avatar de tintin72
 
Inscription : septembre 2003
Messages : 595
Détails du profil
Informations forums :
Inscription : septembre 2003
Messages : 595
Points : 123
Points : 123
C'est ce que j'ai fais:
Code :
$textHtml = $doc->saveHTML();
mais il me rajoute un doctype au début du document original ainsi que des balises html et body.
De plus, il transforme les chevrons du tag de l'image en entités html (&lt; &gt.

Y a t-il des paramètres optionnels à renseigner ?
tintin72 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 17h50.


 
 
 
 
Partenaires

Hébergement Web