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 08/03/2007, 10h07   #1
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 48
Points : 18
Points : 18
Par défaut Une expression régulière

Bonjour,

Je n'arrive pas à ecrire l'expression régulière que je desire.

Expression :
Code :
echo preg_replace('`<div>(.+)</div>`','<div>$1 !</div>','<div>test</div><div>test</div>');
Résultat :

Résultat désiré :

Est ce que quelqu'un saurais ecrire cette expression ?

Merci
Cr@zyDeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 10h42   #2
Modérateur
 
Avatar de mathieu
 
Inscription : juin 2003
Messages : 4 893
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 4 893
Points : 4 466
Points : 4 466
tu dois rendre ton expression non gourmande
donc soit tu fais ça
soit ça :
__________________
Modérateur PHP
mathieu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 14h42   #3
Futur Membre du Club
 
Inscription : septembre 2005
Messages : 48
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 48
Points : 18
Points : 18
Merci Mathieu pour ta réponse qui fonctionne comme je le désirais. Malheureusement une fois integré dans mon script cette expression ne fonctionne pas comme désiré (le contenu des div est trés diverse).

Au départ je suis parti sur POSIX avec cette expression qui fonctionne bien mais qui est gourmande :
Code :
1
2
 
echo ereg_replace('<div>(.+)</div>',"<div>\\1 !</div>",'<div>contenu</div><div>contenu</div>');
Mais les PCRE suivante ne fonctionne pas :
Code :
1
2
3
4
5
6
7
8
9
10
 
echo preg_replace('`<div>(.+?)</div>`','<div>$1 !</div>','<div>contenu</div><div>contenu</div>');
 
ou
 
echo preg_replace('`<div>(.+)</div>`U','<div>$1 !</div>','<div>contenu</div><div>contenu</div>');
 
et même
 
echo preg_replace('`<div>(.+)</div>`','<div>$1 !</div>','<div>contenu</div><div>contenu</div>');
Est il possible de rendre l'expression POSIX non gourmande ? Ou si quelqu'un a une idée de pourquoi ca ne marche pas en PCRE quand il y a beaucoup de contenu HTML ?

Merci
Cr@zyDeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/03/2007, 15h06   #4
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
Citation:
Envoyé par Cr@zyDeep
Mais les PCRE suivante ne fonctionne pas
A détailler

Pour les fonctions POSIX et PCRE, on peut remplacer .* et .+ respectivement par .*? et .+? pour supprimer le caractère gourmand de l'expression, comme l'a précédemment indiqué mon collègue mathieu. Les expressions PCRE, offre "en plus" le flag U pour inverser cette tendance mais si vous utilisez .*? comme .+? en plus, l'expression redeviendra gourmande.


Julp.
julp 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 08h55.


 
 
 
 
Partenaires

Hébergement Web