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 22/06/2007, 13h08   #1
Membre du Club
 
Avatar de alejandro
 
Alexandre Bastien
Inscription : septembre 2004
Messages : 105
Détails du profil
Informations personnelles :
Nom : Alexandre Bastien

Informations forums :
Inscription : septembre 2004
Messages : 105
Points : 54
Points : 54
Envoyer un message via MSN à alejandro
Par défaut problème fonction preg_match_all()

Bonjour

J'ai un problème avec une utilisation de la fonction preg_match_all(), je m'explique :

j'ai un contenu avec des balises de type
<!-- BEGIN xxxx --> et <!-- END xxxx -->

je fais un premier preg_match_all qui fonctionne pour récupérer toutes
mes balises BEGIN :
preg_match_all('#<!-- BEGIN (.*?) -->#', self::$content, $temp);

ça marche.
j'en déduis les balises de fermeture en faisant un ereg_replace :
ereg_replace('BEGIN', 'END', $value));

enfin j'essaie de récupérer le contenu de ces balises situé entre
<!-- BEGIN xxxx --> et <!-- END xxxx -->

exemple en dur avec :
preg_match_all('#<!-- BEGIN LOOP -->(.*?)<!-- END LOOP -->#', self::$content, $buffer);

et là ça marche pas ????

quelqu'un peut m'aider je pense que c'est dans mon expression régulière.

Merci d'avance
alejandro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 13h17   #2
Rédactrice
 
Avatar de xave
 
Inscription : mai 2002
Messages : 860
Détails du profil
Informations personnelles :
Âge : 34

Informations forums :
Inscription : mai 2002
Messages : 860
Points : 824
Points : 824
Citation:
Envoyé par alejandro
j'en déduis les balises de fermeture en faisant un ereg_replace :
ereg_replace('BEGIN', 'END', $value));
Je comprend pas bien ce que tu veux dire par "j'en déduis les balises de fermeture", toujours est-il que ton ereg_replace ne déduis rien du tout mais remplace 'BEGIN' par 'END' dans $value...
Le problème est peut être là...

Si ce que tu veux faire c'est trouver le 'END' à la fin de $value, utilise plutôt ereg()
__________________
Les règles du forum
Cours et tutoriels php
Développements web (CSS, (X)HTML,javascript, etc...)
Cours et tutoriels MySQL
Tutoriels Ajax
Initiation à PHP-GTK1


Il n'est point de bonheur sans liberté, ni de liberté sans courage. Péricles
xave est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 13h25   #3
Membre du Club
 
Avatar de alejandro
 
Alexandre Bastien
Inscription : septembre 2004
Messages : 105
Détails du profil
Informations personnelles :
Nom : Alexandre Bastien

Informations forums :
Inscription : septembre 2004
Messages : 105
Points : 54
Points : 54
Envoyer un message via MSN à alejandro
désolé pour le post, je vais essayer de faire simple :

j'essaie de récupérer un contenu situé entre les balises suivantes :

<!-- BEGIN LOOP --> et <!-- END LOOP -->

voilà tout simplement et ma ligne

preg_match_all('#<!-- BEGIN LOOP -->(.*?)<!-- END LOOP -->#', self::$content, $buffer);

ne marche pas.

Merci d'avance
alejandro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 15h58   #4
Futur Membre du Club
 
Inscription : janvier 2007
Messages : 30
Détails du profil
Informations forums :
Inscription : janvier 2007
Messages : 30
Points : 17
Points : 17
au lieu de (.*?)
essaie avec ([^<]*)
=> tout ce qui n'est pas une balise ouvrante
zobsystem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 16h59   #5
Membre du Club
 
Avatar de alejandro
 
Alexandre Bastien
Inscription : septembre 2004
Messages : 105
Détails du profil
Informations personnelles :
Nom : Alexandre Bastien

Informations forums :
Inscription : septembre 2004
Messages : 105
Points : 54
Points : 54
Envoyer un message via MSN à alejandro
Citation:
Envoyé par zobsystem
au lieu de (.*?)
essaie avec ([^<]*)
=> tout ce qui n'est pas une balise ouvrante
Non désolé ça marche pas ... mais mon contenu est une page contenant du code html donc des balises y en a plein. Il me faut absolument récupérer le contenu de balises de type <!-- BEGIN LOOP --> ***ici mon contenu *** <!-- END LOOP --> et mon preg_match_all ne fonctionne pas
alejandro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 17h09   #6
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
Vous avez certainement besoin d'options, notamment s, pour que le métacaractère . inclue les sauts de ligne (ce n'est pas le cas par défaut) :
Code :
preg_match_all('#<!-- BEGIN ([[:alnum:]]+) -->(.*?)<!-- END \1 -->#s', self::$content, $buffer);
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2007, 18h26   #7
Membre du Club
 
Avatar de alejandro
 
Alexandre Bastien
Inscription : septembre 2004
Messages : 105
Détails du profil
Informations personnelles :
Nom : Alexandre Bastien

Informations forums :
Inscription : septembre 2004
Messages : 105
Points : 54
Points : 54
Envoyer un message via MSN à alejandro
Respects Maestro, c'était ça, le petit s à la fin qui fait que le '.' prend en compte les sauts de ligne. Merci encore je n'aurais pas trouvé.

alejandro 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 12h12.


 
 
 
 
Partenaires

Hébergement Web