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 :

Récupérer une chaine dans un source HTML [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 142
    Points : 185
    Points
    185
    Par défaut Récupérer une chaine dans un source HTML
    Bonjour à tous,

    j'aimerais récuperer dans mon script PHP une chaine de caractères qui se situe dans un fichier HTML et qui est toujours entourée des balises et éléments suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xxx</b></a>(Chaîne_à_récupérer)<br>xxx
    J'ai donc tout bêtement essayé la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine = ereg("</b></a>\((.*)\)<br>", $str, $reg);
    Mais ereg ne trouve rien :/
    Evidemment, pour récupérer la chaine avec les parentheses autour, il n'y a aucun problème, mais j'aimerais la récupérer sans.

    J'ai également essayé de remplacer ereg par preg_match, mais j'obtiens alors le message d'erreur:
    Warning: preg_match() [function.preg-match]: Unknown modifier '<' in C:\wamp\www\site\index.php on line 90
    Pourtant, d'après la doc, les 2 fonctions s'utilisent de manière identique ?!?
    La non plus, je ne comprends pas...

    Si une âme charitable pouvait me venir en aide, merci d'avance.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Citation Envoyé par Lawyer666
    Pourtant, d'après la doc, les 2 fonctions s'utilisent de manière identique ?!?
    Non pas tout à fait : il y a notamment les délimiteurs de l'expression régulière en plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    $string = "xxx</b></a>(Chaîne_à_récupérer)<br>xxx";
    if (preg_match('#</b></a>\((.*)\)<br>#', $string, $m)) {
        echo $m[1];
    }
    ?>
    Semble fonctionner

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 142
    Points : 185
    Points
    185
    Par défaut
    En effet, ça fonctionne, merci beaucoup.
    C'est moi qui avais mal analysé mon fichier HTML, il y avait en fait un espace entre la balise et la parenthèse ouvrante... hmm désolé :/

    Par contre, je n'ai rien trouvé sur les délimiteurs et leur signification dans la doc de preg_match, si tu pouvais me dire ou trouver de la doc pour savoir à quoi correspondent les # ...

    En tout cas, merci pour ton aide.

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Les délimiteurs servent à spécifier où commence et finit le masque ou motif puisqu'à la fin de celui-ci on peut notamment ajouter des options. Les caractères délimitant l'expression régulière peuvent être quelconques (ici # mais j'aurais très bien pu utiliser £ ou autres). Cependant, s'il vient à paraître dans le masque il faudra l'échapper (le faire précéder d'un backslash) c'est pourquoi on choisit, par bon sens, un caractère dont on sait qu'il n'apparaîtra pas. Par ailleurs, tous les caractères couplés (parenthèses, accolades, crochets, < et >) peuvent délimiter l'expression (le caractère ouvrant marquant son début et le caractère fermant, sa fin).

    Attention : sauf cas volontaires, n'utilisez pas un métacaractère (caractère possédant une signification dans une expression : +, *, ?, (), {}, [], ., etc) comme délimiteurs.

    En savoir plus sur les expressions régulières :

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 142
    Points : 185
    Points
    185
    Par défaut
    Un grand merci pour l'explication (on ne peut plus clair) et les liens, fort intéressants (notamment sur les options, bien pratiques, en particulier l'Ungreedy !)

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 07/11/2013, 12h18
  2. Récupérer une chaine avec apostrophe dans un TEdit
    Par Orc_Fayeh dans le forum Delphi
    Réponses: 6
    Dernier message: 22/06/2007, 13h25
  3. Réponses: 10
    Dernier message: 25/03/2007, 21h39
  4. Récupérer une chaine de caractère dans une page
    Par BrunS dans le forum Langage
    Réponses: 3
    Dernier message: 15/11/2005, 14h28
  5. [IO]Récupérer une chaine texte dans un flux HTTP
    Par elitost dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/03/2005, 10h39

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