Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 16/05/2011, 10h16   #1
Invité de passage
 
Inscription : novembre 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 25
Points : 4
Points : 4
Par défaut capturer les balises /## blablabla ##/ avec preg_match_all

Bonjour tout l'monde !

Me remettant doucement au php, je bloque sur la création d'un script pas vraiment compliqué sur le papier.
Je souhaite capturer toutes les chaines de caractères se trouvant entre les balises /## et ##/.
Il s'avère que la fonction preg_match_all soit tout à fait adaptée à la situation mais après plusieurs test, je n'arrive pas à m'en sortir avec les expressions régulières pour arriver à mes fins.

Le code se rapprochant le plus du résultat est le suivant :
Code :
preg_match_all('`/##(.+)##/`', $chaine_initiale, $resultat);
Mais le résultat contient des # alors qu'il ne le devrait pas..

Donc quel est le bon motif me permettant de capturer que ce qu'il se trouve entre les balises /## et ##/ ?

Merci =)
kegilko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 10h25   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
Code :
preg_match_all('/\/##(.+?)##\//', $chaine_initiale, $resultat);
évite de mettre l’opérateur d’exécution comme délimiteur
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/05/2011, 11h07   #3
Invité de passage
 
Inscription : novembre 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 25
Points : 4
Points : 4
Merci pour la réponse rapide (et le conseil :p ) , parcontre je me suis peut être mal exprimé, j'aimerais n'avoir que ce qui se trouve dans la balise, or avec ton motif, resultat[0][4] contient par exemple :
/## blablabla ##/

or je n'aimerais avoir que :
blablabla
kegilko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h20   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
fait un print_r de $resultat et tu comprendras
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h28   #5
Invité de passage
 
Inscription : novembre 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 25
Points : 4
Points : 4
Le print_r comme le echo me sortent la même chose, à savoir ma chaine avec la balise dedans..

Sinon je sais que je peux trouver une fonction toute conne pour retirer de toutes les cases de résultat les caractères "/##" et "##/", mais bon j'aimerais comprendre pourquoi preg_catch_all me boude xD
kegilko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h33   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
pas print_r($resultat[0][4]), juste print_r($resultat)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h43   #7
Invité de passage
 
Inscription : novembre 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 25
Points : 4
Points : 4
Ouuuups dsl !

Voila ce que m'affiche le print_r($resultat) :

Array ( [0] => /## blablablaaaa ##/ )

Bah, j'en déduit que dans le tableau, toutes les cases contiennent /## ... ##/ , j'ai raté quelque chose ? xD
Et que donc, la fonction preg_match_all me renvoie ma chaine mais aussi ce qu'il y a autour, ce qui est un peu bizarre vu que le motif à capturer recherché est bien délimité par les parenthèses...
kegilko est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 11h49   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 103
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 103
Points : 8 466
Points : 8 466
il t'affiche que ça ?
quand je test j'ai ça :

Code :
1
2
3
$chaine_initiale = '/##test 1##/  truc /##test 2##/';
preg_match_all('/\/##(.+?)##\//', $chaine_initiale, $resultat);
print_r($resultat);
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Array
(
    [0] => Array
        (
            [0] => /##test 1##/
            [1] => /##test 2##/
        )
 
    [1] => Array
        (
            [0] => test 1
            [1] => test 2
        )
 
)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2011, 13h23   #9
Invité de passage
 
Inscription : novembre 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 25
Points : 4
Points : 4
Bon, j'ai du faire une fausse manip pour ne pas avoir ton résultat car en retapant, j'arrive à avoir le même affichage que le tiens :p

Et je vois se que tu voulais me dire, merci beaucoup pour ton aide, tout marche nickel =)
kegilko 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 11h59.


 
 
 
 
Partenaires

Hébergement Web