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 :

preg_match_all [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut preg_match_all
    Bonjour tout le monde,

    J'ai un problème avec une expression régulière qui ne me retourne pas de résultat et je ne comprends pas pourquoi.
    Pourriez-vous m'aider SVP ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("/<h1><(.*)>(.*)<\/a><\/h1>/Ui", $page, $prix);
    et voici la partie html :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <div class="tableau">                    
                        	<h1><a href="monsite.com" title="Le titre du site">monsite.com</a></h1>
    						<h2><a href="monsite.com/letableau.php">Voir</a> le tableau |</h2>
    						<h3>Voir les autres tableaux</h3><hr />
    						<p class="exemple"><span>Exemple</span><span>des autres tableaux</span></p>
    Si je fais le test surPhpliveregex j'ai le résultat attendu, mais dès que j'essaie sur mon site, je reçoix ce résultat

    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
     
     
    Array
    (
        [0] => Array
            (
            )
     
        [1] => Array
            (
            )
     
        [2] => Array
            (
            )
     
    )
    D'avance merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 717
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 717
    Par défaut
    si vous utilisez "var_dump" vous ne verrez pas les balises HTML

    essayez ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echo "<pre>";
    echo htmlspecialchars(var_export($prix, TRUE));
    echo "</pre>";

  3. #3
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut
    Merci pour l'aide

    Voici le résultat que j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    array (
      0 => 
      array (
      ),
      1 => 
      array (
      ),
      2 => 
      array (
      ),
    )

  4. #4
    Invité
    Invité(e)
    Par défaut
    Super.... et quel est le "résultat attendu" ?

  5. #5
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut
    Bah le résultat attendu serait

    "Le titre de mon site" au minimum car il est entre <h1><(.*)>(.*)</a></h1>

    Non ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    "au minimum" ??

    Quand tu sauras précisément ce que tu veux obtenir, tu pourras écrire la regex correspondante...


    Si la structure du <h1> est toujours la même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /<h1><a href="(.*)" title="(.*)">(.*)<\/a><\/h1>/

  7. #7
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut
    Quand je dis "au minimum", ça veut dire que c'est ce que je cherche...

    Concrètement j'aimerai pouvoir écrire "$prix[0][2]" et que ça me donne "le titre de mon site"
    J'essaie d'être le plus précis possible, j'espère que je suis compréhensible

    PS : pour le bout de code que tu m'as donné, la réponse que je reçois est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <pre>array (
      0 =&gt; 
      array (
      ),
      1 =&gt; 
      array (
      ),
      2 =&gt; 
      array (
      ),
      3 =&gt; 
      array (
      ),
    )</pre>

  8. #8
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $pattern = '/<h1><a href="(.*)" title="(.*)">(.*)<\/a><\/h1>/Ui';
    preg_match_all($pattern, $page, $prix);
     
    $titre_du_site = $prix[2][0];

    [EDIT] Je pense que c'est ton $page qui ne va pas.

  9. #9
    Membre averti
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Octobre 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2013
    Messages : 14
    Par défaut
    Merci pour ton message, il m'a mis sur le chemin

    En fait il s'agissait d'un espace entre </a> et </h1>

    Du coup c'est résolu, merci beaucoup !

  10. #10
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 018
    Par défaut
    Citation Envoyé par ikki67 Voir le message
    En fait il s'agissait d'un espace entre </a> et </h1>
    Problème qui ne se pose pas quand on utilise l'outil adéquate pour parser du html (i.e. DOMDocument/DOMXPath).

  11. #11
    Invité
    Invité(e)
    Par défaut
    Pour résoudre les espace et autres passages à la ligne :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <div class="tableau">                    
    	<h1>
    		<a href="monsite.com" title="Le titre du site">
    			monsite.com
    		</a>
    	</h1>
    ...

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '/<h1>\s*<a href="(.*)" title="(.*)">\s*(.*)\s*<\/a>\s*<\/h1>/Umi';

  12. #12
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 018
    Par défaut
    Dans \s*(.*)\s* avec le modificateur U, le premier \s* ne matchera jamais le moindre espace. Il faut le rendre gourmand pour qu'il fasse son travail.

  13. #13
    Invité
    Invité(e)
    Par défaut
    c'est ce que j'avais aussi constaté lors de mes tests...

    @CosmoKnacki
    Si tu connais de BON TUTOS ou liens * où on peut trouver des exemples précis (pas des généralités indigestes), je suis preneur !
    Sur le web j'ai cherché : on trouve de tout, mais surtout n'importe quoi...

    D'ailleurs, si l'envie te prenait d'écrire un tuto, regroupant des exemples et cas particuliers traités... adapté aux débutant comme aux initiés...

    * que je pourrais aussi citer en référence par la suite

  14. #14
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 018
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 018
    Par défaut
    Pas évident de trouver quelque chose avec des exemples précis. J'aime bien l'ancien blog de Jeff rebaptiser rexegg.com. Ce ne sont pas vraiment des tutos, mais il aborde des points avancés et pas forcément très connus (introuvables dans la myriade de tutos de base sur les regex). Par contre c'est en anglais.

    Sinon en tutoriel de base, je trouve celui de Guillaume Rossolini plutôt clair.

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

Discussions similaires

  1. [RegEx] preg_match_all()
    Par winnie82 dans le forum Langage
    Réponses: 10
    Dernier message: 23/03/2006, 22h36
  2. [RegEx] [RegExp] preg_match_all
    Par TNorth dans le forum Langage
    Réponses: 6
    Dernier message: 05/02/2006, 22h21
  3. [RegEx] preg_match_all : messages d'erreur récurents
    Par nabab dans le forum Langage
    Réponses: 3
    Dernier message: 13/12/2005, 10h14
  4. [RegEx] preg_match_all : créer un masque :/
    Par Huntress dans le forum Langage
    Réponses: 2
    Dernier message: 22/01/2005, 14h58
  5. [RegEx] preg_match_all et retour chariot ??? comment faire ?
    Par zax-tfh dans le forum Langage
    Réponses: 6
    Dernier message: 26/09/2004, 17h21

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