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 :

Capture - La regex s'arrête trop tôt [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 402
    Points
    402
    Par défaut Capture - La regex s'arrête trop tôt
    Bonjour,

    çà fait déjà quelques heures (et oui !) que je réfléchis sur cette satanée regex et j'trouve pas ce qui ne va pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $chaine = '<p class="c">chap1</p><p class="p">parag1</p>bla bla<p class="p">parag2</p>bla bla<p class="c">chap2';
     
    $masque = '&<p class="c">.+</p>(?:<p class="p">(.+)</p>)+.*<p class="c">&Uis';
    preg_match_all($masque, $chaine, $resultat);
     
    echo '<pre>';
    print_r($resultat);
    echo '</pre>';
    Voilà donc mon code. Ce que je souhaiterais faire : Capturer tous les <p class="p">...</p> d'un chapitre particulier (au pire je peux faire une regex par chapitre ce n'est pas un problème je n'ai pas beaucoup de chapitres)

    Merci d'avance.

    EDIT : J'ai oublié de dire que actuellement juste le premier <p class="p">...</p> était capturé.

    Règle n°1 du forum francophone : Parler le français...
    Pas de question technique par MP, le forum est fait pour çà, merci.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Bonsoir,

    si, la voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $chaine = '<p class="c">chap1</p><p class="p">parag1</p>bla bla<p class="p">parag2</p>bla bla<p class="c">chap2';
     
    	$pattern = "`<p class=\"p\">[^<]+</p>`mi";
    	$masque = $pattern;
    	preg_match_all($masque, $chaine, $matches);
     
    	echo "<pre>";
    		var_dump($matches);
    	echo "</pre>";
    Je me suis insipiré de ce site -> http://www.expreg.com/pregmatchall.php

    bye

  3. #3
    Membre averti Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 402
    Points
    402
    Par défaut
    Merci pour ta réponse, mais çà ne correspond pas à ce que je veux faire.

    J'avais réussi à faire mon masque pour capturer tous les paragraphes mais je me suis rendue compte que ce n'était pas vraiment ce que je voulais. Je veux conserver l'arborescence, c'est à dire distinguer quels paragraphes appartiennent à tel chapitre.

    On s'en rend compte quand on rajoute des paragraphes au deuxième chapitre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = '<p class="c">chap1</p><p class="p">parag1</p>bla bla<p class="p">parag2</p>bla bla<p class="c">chap2</p><p class="p">parag1 de l\'autre chapitre</p>bla bla';
    En fait je pense que le masque ressemblerait plus à çà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $masque = '&<p class="c">chap1</p>(?:<p class="p">(.+)</p>)+.*<p class="c">chap2</p>&Uis';

    Règle n°1 du forum francophone : Parler le français...
    Pas de question technique par MP, le forum est fait pour çà, merci.

  4. #4
    Membre averti Avatar de Huntress
    Femme Profil pro
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 402
    Points
    402
    Par défaut
    Toujours pas trouvé le bon motif, par contre j'ai trouvé une bidouille qui me permet de conserver cette fameuse arborescence.

    Si un dieu des RegEx est dans le coin je suis quand même encore intéressée

    Règle n°1 du forum francophone : Parler le français...
    Pas de question technique par MP, le forum est fait pour çà, merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/02/2008, 11h16
  2. Réponses: 9
    Dernier message: 24/12/2007, 11h27
  3. Capturer un <a></a> avec une regex
    Par mioux dans le forum C#
    Réponses: 3
    Dernier message: 15/06/2007, 10h47
  4. [regex] petite reg ex pas trop violente je pense ;)
    Par Spoutnik dans le forum Langage
    Réponses: 8
    Dernier message: 04/08/2006, 14h00
  5. capture trop large
    Par htristra dans le forum Langage
    Réponses: 2
    Dernier message: 04/04/2006, 11h46

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