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 me fait monter la tension


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de myz-rix
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 143
    Par défaut preg_match me fait monter la tension
    bonjour,

    comme a chaque fois que j'utilise du preg_match.... bah je m’énerve... sûrement dû au fait que je ne maîtrise pas l'outil.

    alors j'essaye un truc simple qui marchait quasiment parfaitement au complet et je ne sais pas ce que j'ai fait pour que ça ne marche plus, même en réduisant mon preg_match au minimum.

    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
    print '<br>test 1<br>';
    $subject = '<div id="produit_3260449047081" ustock="" uprice="" uppi="" ufilter="" utype="" class="uproduct produit_mosaique" onmouseover="javascript:µ(\'bandeau_3260449047081\').style.display=\'block\';" onmouseout="javascript:µ(\'bandeau_3260449047081\').style.display=\'none\';" style="display: none;">';
    $pattern = '/<div id="produit_(.*)" ustock="(.*)" uprice="(.*)" uppi="(.*)" ufilter="(.*)" utype="" class="uproduct produit_mosaique" /';
    preg_match($pattern, $subject, $matches);
    print_r($matches);
     
    print '<br>test 2<br>';
    $subject = '<div id="produit_3260449047081" ustock="" uprice="" uppi="" ufilter="" utype="" class="uproduct produit_mosaique" onmouseover="javascript:µ(\'bandeau_3260449047081\').style.display=\'block\';" onmouseout="javascript:µ(\'bandeau_3260449047081\').style.display=\'none\';" style="display: none;">';
    $pattern = '/<div id="produit_(.*)" ustock="(.*)" uprice="(.*)" uppi="(.*)" ufilter="(.*)" utype="" class="uproduct produit_mosaique"(.*)/';
    preg_match($pattern, $subject, $matches);
    print_r($matches);
     
    print '<br>test 3<br>';
    $subject = '<div id="produit_3260449047081" ustock="" uprice="" uppi="" ufilter="" utype="" class="uproduct produit_mosaique" onmouseover="javascript:µ(\'bandeau_3260449047081\').style.display=\'block\';" onmouseout="javascript:µ(\'bandeau_3260449047081\').style.display=\'none\';" style="display: none;">';
    $pattern = '/<div id="produit_(.*)" ustock="(.*)" uprice="(.*)" uppi="(.*)" ufilter="(.*)" utype="" class="uproduct produit_mosaique" onmouseover=".*" onmouseout=".*"/';
    preg_match($pattern, $subject, $matches);
    print_r($matches);
    j'obtient ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    test 1
    Array ( [0] =>
    3260449047081 [2] => [3] => [4] => [5] => )
    test 2
    Array ( [0] =>
    en fait le code se plante au 2eme test, si j'inverse 3 et 2 c'est pareil, pas d'erreur PHP d'affiché, rien de rien mais tout le code sera apres le test 2 ou 3 sera stoppé.

    pouvez vous m'aider pour comprendre pourquoi mes tests 2 et 3 ne marchent pas ?

    et pourquoi je n'ai pas d'erreur php ou quelque chose qui puisse m'indiquer d’où vient l'erreur ?

    merci d'avance, je vais aller faire un tour dehors pour me détendre

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Si ton but est de parser du HTML pour en extraire des données , je te conseil de laisser tomber les regex et de passer par un parseur tel que DomDocument accompagné de DomXPath Tu va gagner en performance et perdre en tension

    Exemple issue de la doc :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    // to retrieve selected html data, try these DomXPath examples:
     
    $file = $DOCUMENT_ROOT. "test.html";
    $doc = new DOMDocument();
    $doc->loadHTMLFile($file); // Pourrait être LoadHTML() pour charger une chaine plutôt qu'un fichier
     
    $xpath = new DOMXpath($doc);
     
    // example 1: for everything with an id
    //$elements = $xpath->query("//*[@id]");
     
    // example 2: for node data in a selected id
    //$elements = $xpath->query("/html/body/div[@id='yourTagIdHere']");
     
    // example 3: same as above with wildcard
    $elements = $xpath->query("*/div[@id='yourTagIdHere']");
     
    if (!is_null($elements)) {
      foreach ($elements as $element) {
        echo "<br/>[". $element->nodeName. "]";
     
        $nodes = $element->childNodes;
        foreach ($nodes as $node) {
          echo $node->nodeValue. "\n";
        }
      }
    }
    ?>
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre très actif Avatar de myz-rix
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 143
    Par défaut
    merci pour ton retour, je regarde depuis hier mais c'est très peu documenté et je galère pas mal. Après ça à l'air plus adapté c'est clair.

    si quelqu'un peut quand même m'indiquer pourquoi mon code ne marche pas je suis preneur

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Exemple avec domdocument pour récupérer l'id :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $subject = '<div id="produit_3260449047081" ustock="" uprice="" uppi="" ufilter="" utype="" class="uproduct produit_mosaique" onmouseover="javascript:µ(\'bandeau_3260449047081\').style.display=\'block\';" onmouseout="javascript:µ(\'bandeau_3260449047081\').style.display=\'none\';" style="display: none;">';
    $doc= new DOMDocument();
    $doc->loadHTML( $subject );
    $elements = $doc->getElementsByTagName('div');
    foreach( $elements as $e)
    {
        $id= $e->getAttribute('id');
        echo $id;
    }
    Suffit donc juste de récupérer les attributs que tu veux avec getAttribute()
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre très actif Avatar de myz-rix
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2008
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ariège (Midi Pyrénées)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 143
    Par défaut
    j’étais en train de chercher ce genre de chose et tu viens de me débloquer

    ça à l'air vraiment top le domdocument, j'arrive à sortir un truc pas mal et c'est beaucoup moins irritant que preg_match

    merci à toi

  6. #6
    Nouveau candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aisne (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Par défaut
    En fait ça fonctionne, mais l'affichage est cassé à cause des tags html à l'intérieur de la variable $matches qui sont interprétés par le navigateur. Il faut utiliser htmlspecialchars() pour pouvoir les afficher correctement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo htmlspecialchars(print_r($matches, true));
    Ne pas oubliez de passer "true" en paramètre à la fonction print_r() pour rediriger la sortie vers echo.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2019, 18h55
  2. Réponses: 10
    Dernier message: 15/10/2013, 18h50
  3. Réponses: 6
    Dernier message: 09/04/2007, 16h52
  4. Quoi ?! Common Dialog fait crasher DirectDraw ?
    Par Magus (Dave) dans le forum DirectX
    Réponses: 4
    Dernier message: 21/10/2002, 19h01
  5. Qu'est-ce que c'est que Nessus, ça fait quoi exactement ?
    Par PeterT dans le forum Développement
    Réponses: 3
    Dernier message: 24/07/2002, 11h23

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