IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Matcher la valeur contenu entre des balises crochets


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 20
    Points
    20
    Par défaut Matcher la valeur contenu entre des balises crochets
    Bonsoir,

    Je n'arrive pas à matché la valeur entre les balises suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [tab][tab_item title="Contacts"] BLABLAN ? BLABLA [/tab_item]

    J'ai essayé ceci mais cela ne fonctionne pas d'ou ma demande.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     preg_match("|\[tab_item title=\"Contacts\"\](.*)\[/tab_item\]|", $content,$matches);
    Merci pour votre aide

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Un truc dans ce genre peut faire l'affaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $pattern = '#\[[^\]]*\]#';
    $str = '[tab][tab_item title="Contacts"] BLABLAN ? BLABLA [/tab_item]';
     
    preg_match_all($pattern, $str, $m);
     
    var_dump($m);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 23
    Points : 20
    Points
    20
    Par défaut
    Avec cette expression, je n'obtiens juste le contenu de tab.
    J'ai tenté de faire une nouvelle expression pour récupérer tout ce qui se trouve entre ] BLABLAN ? BLABLA [. C'est à dire BLABLAN ? BLABLA mais cela reste un echec. Si vous avez une autre idée, je suis preneur.

    Merci par avance pour votre aide

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $pattern = "~\[(?P<node>\w+)(?P<attr>[^\]]*)\](?P<content>.*)\[/\g1\]~imsu";
     
    $str = <<< STR
    [node1 name="value"]content[/node1]
    [node2 name="foo" value="bar"]
    	another content
    [/node2]
    [node3][node4]foo[/node4]bar[/node3]
    STR;
     
    preg_match_all($pattern, $str, $matches);
     
    var_dump(
    	$matches['node'],
    	$matches['attr'],
    	$matches['content']
    );
    Mais j'ai beaucoup de mal à implémenter la récursivité, j'arrrive à obtenir le noeud 3 ou 4 mais pas les deux...

    Si on met $pattern = "~\[(?P<node>\w+)(?P<attr>[^\]]*)\](?P<content>[^\[\]]*|(?R))\[/\g1\]~imsu"; on ne match plus node3...

    Une autre solution assez marrante consiste à remplacer les [ et ] par < et > afin de parser le flux comme du XML.

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Tout dépend du besoin.
    Dans un premier temps, j'aurais fait plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $pattern = '#\]([^[]+?)\[#';
     
    $str = '[tab][tab_item title="Contacts"] BLABLAN ? BLABLA [/tab_item]';
    preg_match_all($pattern, $str, $match);
     
    foreach($match[1] as $value)
        var_dump($value);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

Discussions similaires

  1. Récupérer valeur entre des balises script
    Par lirycs78 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/10/2010, 14h07
  2. extraire du contenu entre des balises
    Par freeriders88 dans le forum ASP
    Réponses: 3
    Dernier message: 30/05/2007, 10h25
  3. [Debutant]Edition du contenu entre les balises
    Par Perceval dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 01/06/2005, 09h16
  4. Empêcher le retour á la ligne entre des balises <Hx> e
    Par thomas_chamas dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 29/11/2004, 16h39
  5. [Balise XML] Comment récupérer le contenu entre 2 balise?
    Par ZoumZoumMan dans le forum C++Builder
    Réponses: 5
    Dernier message: 05/03/2004, 16h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo