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 :

Problème expression régulière


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut Problème expression régulière
    Bonjour,

    J'ai suis en train de créer un script PHP qui permet de récupérer des informations d'un code source HTML.

    Voici mon code :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    <?php
     
    /*****************************/
    //But : Script de migration de la table des utilisateurs (création du code SQL)
    //Auteur : ***
    //Date : 06.08.2009
    /*****************************/
     
     
     
    //URL et nom du fichier
    $file = "membres.sql";
    $gestion = fopen($file,"w");
     
     
    //En cas de long travail, ne pas interrompre
    set_time_limit(0);
     
     
    //On récupère le code source de la page de chaque membre et on met chaque code dans une cellule du tableau
    for ($i=1;$i<=1;$i++)
    {
     
     
        //Création des regex pour faire sortir les informations nécessaires :
     
        $regex_user="#Nom de l'utilisateur&nbsp;: (.+)</legend>#";
        $regex_mail="#name=\"email\" size=\"35\" maxlength=\"64\" value=\"(.+)\" />&nbsp;<a#";
        $regex_next_birthday_greeting="#\"next_birthday_greeting\" size=\"5\" maxlength=\"4\" value=\"(.+)\" /></td></tr><tr><td class=\"row1\"><span class=\"gen\">Si#";
        $regex_signature="#name=\"signature\" rows=\"6\" cols=\"45\">(.+)</textarea></td></tr><tr><td>&nbsp;</td>#";
        $regex_annee_naissance="#name=\"profile_field_4_-12\[\]\" style=\"width:50px\" size=\"5\" maxlength=\"4\" value=\"(.+)\" /><br /><em></em></td></tr><tr><td class=\"row1\"><span class=\"gen\">Age#";
        $regex_localisation="#name=\"profile_field_13_-11\" style=\"width:250px\" value=\"(.+)\" /><br /><em></em></td></tr><tr><td class=\"row1\"><span class=\"gen\">Humeur#";
     
        $regex_jour_birthday="#\"profile_field_4_-12\[\]\" size=\"1\">.*<option value=\"(.{0,2})\" selected=\"selected\">.{0,2}</option>.*</select> Mois#";
        $regex_mois_birthday="#Mois&nbsp;<select class=\"gensmall\" id=\"profile_field_4_-12_1\" name=\"profile_field_4_-12\[\]\" size=\"1\">.*<option value=\"(.*)\" selected=\"selected\">.*</option>.*</select> Ann#";
        $regex_annee_birthday="#Année&nbsp;<input type=\"text\" class=\"post\" id=\"profile_field_4_-12_0\" name=\"profile_field_4_-12\[\]\" style=\"width:50px\" size=\"5\" maxlength=\"4\" value=\"(.*)\" /><br /><em></em></td></tr><tr><td class=\"row1\"><span class=\"gen\">Age#";
     
     
        //Récupération du code source
        $code_source=file_get_contents("http://www.bibliojunior.ch/rafmos/temp.html");
     
     
        //Extraction des informations
        preg_match_all($regex_user, $code_source, $user);
        preg_match_all($regex_mail, $code_source, $mail);
        preg_match_all($regex_next_birthday_greeting, $code_source, $next_birthday_greeting);
        preg_match_all($regex_signature, $code_source, $signature);
        preg_match_all($regex_annee_naissance, $code_source, $annee_naissance);
        preg_match_all($regex_localisation, $code_source, $localisation);
     
        preg_match_all($regex_jour_birthday, $code_source, $jour_birthday);
        preg_match_all($regex_mois_birthday, $code_source, $mois_birthday);
        preg_match_all($regex_annee_birthday, $code_source, $annee_birthday);
     
     
        //Création de tableaux avec les différentes informations
        $user_list[] = $user[1][0];
        $mail_list[] = $mail[1][0];
        $next_birthday_greeting_list[] = $next_birthday_greeting[1][0];
        $signature_list[] = $signature[1][0];
        $annee_naissance_list[] = $annee_naissance[1][0];
        $localisation_list[] = $localisation[1][0];
     
        $jour_birthday_list[] = $jour_birthday[1][0];
        $mois_birthday_list[] = $mois_birthday[1][0];
        $annee_birthday_list[] = $annee_birthday[1][0];
     
     
    }
     
    print_r($annee_birthday_list);
    echo "<br><br>";
    print_r($mois_birthday_list);
     
    ?>
    Le code source ($code_source) représente une partie d'un formulaire HTML qui contient des données d'un client. Pour mettre ici sur le forum, je l'ai coupé un peu, donc, par exemple, la boucle for, ici ne sert à rien.

    La grande partie du code fonctionne à part pour récupérer le mois de naissance !! Et je ne comprends absolument pas pourquoi !!!

    Est-ce que quelqu'un a une idée ?

    Encore une autre chose que je n'arrive pas à comprendre : Lorsque pour la regex $regex_jour_birthday, je mets .* au lieu de {0,2}, il ne trouve rien. Pourtant {0,2} est plus restrictif que .* !!!

    Est-ce que quelqu'un arrive à m'expliquer ?

  2. #2
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    mais c'est un vrai bazar ce code :p

    déjà, pourquoi y-a-t'il un fichier SQL ?

    bon, sinon, l'idée est bonne, grosso modo, mais les expressions régulières
    que tu utilises me semble erronées pour la plupart. quels résultats obtiens-tu
    à l'heure actuelle et peux-tu mettre l'intégralité du script STP ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Par défaut
    Merci pour ta réponse !!

    Moi je m'en sort parfaitement en tout cas.... Comment tu veux faire mieux ??

    Le fichier SQL, c'est pour pouvoir ensuite faire du code SQL grâce aux données recueillies. Mais ça pour l'instant, on peut laisser tomber.

    J'obtiens ce résultat :

    Notice: Undefined offset: 0 in C:\wamp\www\migration\temp.php on line 65
    Array ( [0] => 1991 )

    Array ( [0] => )
    L'erreur, c'est parce qu'il ne trouve rien avec ma regex pour trouver le mois.

    Pour tester les autres, si tu veux, tu rajoutes juste à la fin, ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    echo "<br><br>";
    print_r($user_list);
    echo "<br><br>";
    print_r($mail_list);
    etc...

    Et là j'ai quasi l'intégralité du script. Juste quelques trucs que j'ai supprimé comme mon nom dans les commentaires, etc... Mais le resultat est exactement le même. Je ne veux pas donner +...

    Merci d'avance !

  4. #4
    Membre chevronné
    Avatar de bricecol
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2007
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 364
    Par défaut
    dans ce cas, le problème vient de tes expressions régulières. essaie de
    les rendre plus génériques.

    aussi, met les REGEX dans des simple quotes " ' " au lieu des doubles car
    sinon tu te retrouves avec des double quotes que tu échappes avec un '\'.
    ce symbole peut avoir des répercutions dans le REGEX.

    je te conseille, dans un premier temps, de simplifier le XHTML a parser afin
    de comprendre petit à petit d'où viennent les erreurs. sinon, tu peux tester
    tes REGEX directement en ligne pour chacun de tes cas (encore une fois
    le but est d'isoler les erreurs peu à peu => http://www.quanetic.com/Regex)

    je n'ai pas trop le temps de tester tout çà mais je pense que tu vas vite
    trouvé en cherchant avec méthode.

Discussions similaires

  1. Problème expressions régulières
    Par cottcott dans le forum Langage
    Réponses: 7
    Dernier message: 09/05/2007, 15h29
  2. Réponses: 3
    Dernier message: 20/04/2007, 15h47
  3. Problème expression régulières
    Par LEK dans le forum C#
    Réponses: 2
    Dernier message: 18/04/2007, 12h40
  4. [RegEx] problème expression régulière
    Par H-bil dans le forum Langage
    Réponses: 4
    Dernier message: 13/02/2007, 16h38
  5. Problème expressions régulières
    Par sozie9372 dans le forum Langage
    Réponses: 3
    Dernier message: 07/06/2006, 16h13

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