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 :

Regex pour capter les balises html


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Par défaut Regex pour capter les balises html
    Bonjour,

    Je viens chercher un peu d'aide ici parce qu'avec l'ami Google et les tuto j'ai essayé mais je suis un peu perdu.
    Je m'y connais pas du tout dans le Regex donc je rame pas mal.
    Je préviens déjà c'est possible que je me trompe dans l'approche du sujet ^^.

    En faite je dois dans une chaîne compter le nombre de balises html ouvrantes et le nombre de balises html fermantes.
    Vu que je veux pas partir direct dans du complexe, j'ai essayé de faire une regex pour capter les balises ouvrantes sans qu'il y ai de classes ou autres défini.
    Par exemple capter un simple <div>. J'ai donc écrit ce Regex

    Si je me trompe pas, je devrai capter dans ma chaine une sous chaine qui commence par "<" suivit de plusieurs caractères compris entre a et z et A et Z, puis qui se termine par >

    Mon test complet représente ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $test = "<div>
                aa
                <p>zefiomf </p>
            </div>";
    $out = array();
    preg_match_all("#<([a-z A-Z]+)>#", $test, $out,PREG_SET_ORDER);
    echo"<pre>";print_r($out);echo"</pre>";
    J'ai bien un tableau qui me sort div et p.
    Par contre j'arrive pas à trouver ce que je dois ajouter pour pouvoir prendre en compte les balises du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div class="blabla"></div>
    ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://test.com"></a>
    Et le dernier point sur lequel j'aurai besoin d'un peu d'aide.
    Je comptais utilisais le retour de ce tableau et faire un count pour connaitre le nombre de balises ouvrantes, mais les balises comme img vont être compté dans les balises ouvrantes non? Si c'est le cas il est possible de faire en sorte que les balises comme img qui n'ont pas besoin d'être fermée ne soient pas prises en compte?

  2. #2
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 19
    Par défaut
    Voilà une possibilité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $test = '<div class="blabla"></div>
                aa
                <p>zefiomf </p>
            </div>
            <a href="http://test.com"></a>';
    $out = array();
    preg_match_all("#<([a-zA-Z]+)(?:\s*.*?)>#", $test, $out,PREG_SET_ORDER);
    echo"<pre>";print_r($out);echo"</pre>";
    cette exemple affiche:
    Array
    (
    [0] => Array
    (
    [0] => <div class="blabla">
    [1] => div
    )

    [1] => Array
    (
    [0] => <p>
    [1] => p
    )

    [2] => Array
    (
    [0] => <a href="http://test.com">
    [1] => a
    )

    )

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu trouveras une formule expliquée ici : Fonctions de troncature de texte : "Résumé html"

  4. #4
    Membre chevronné
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Par défaut
    Salut,

    Merci pour ta réponse.
    Juste tu pourrai m'expliquer la deuxième partie que tu as ajouté, j'arrive pas bien à la comprendre?
    En bidouillant un peu le temps d'avoir une réponse j'ai écrit cette expression
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<([a-z A-Z ^br ^img]+)>#
    En faite le code html je le récupèrerai d'un wisiwyg qui n'accepte pas les liens, et je dois pas prendre en compte les balises img, br ... qui n'ont pas de balises fermantes. De plus il sera pas possible à l'utilisateur d'afficher le code source et de le modifier donc de rajouter des classes, du coup ça me simplifie un peu la chose (et désolé de t'avoir fait pondre un truc qui peut être me servira pas pour ce cas, mais en tout cas servira à ma culture ^^)
    Le code que j'ai fait si je me trompe pas exclue les balises qui contiennent "br" et "img"?

    EDIT: merci jreaux62je vais voir ça =)

  5. #5
    Membre chevronné
    Homme Profil pro
    IUT Informatique
    Inscrit en
    Mars 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : IUT Informatique

    Informations forums :
    Inscription : Mars 2011
    Messages : 412
    Par défaut
    J'ai lu le doc jreaux62je mais j'arrive toujours pas à exclure les balises br et img

    Edit: En cherchant un peu plus de partout j'ai trouvé un truc qui marche, mais je comprend pas la signification et ça j'aime pas lol

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #<((?!br|BR|hr|HR|img|IMG)[a-z A-Z =" ]+)>#
    Si quelqu'un peut m'expliquer pourquoi au début il me faut "?!" pour que ça marche ça serai cool ^^

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    En faite je dois dans une chaîne compter le nombre de balises html ouvrantes et le nombre de balises html fermantes.
    Mais à quoi ça peut bien servir ?

    Ah et au fait, parser du HTML à grand coups de regexp est extrêmement complexe contrairement à ce que tu dis:
    Vu que je veux pas partir direct dans du complexe, j'ai essayé de faire une regex pour capter les balises ouvrantes
    Tu veux pas faire un lexeur si ?

    Bref, avec la librairie XML tu y arrivera mieux.

  7. #7
    Membre Expert
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Par défaut
    c'est un parseur XML qu'il te faut pour pouvoir détecter les tags ouvrantes, les tags fermantes, les attributs, le text... Il existe une bibliothèque SAX (sax4PHP) en PHP qui permet de parser de manière événementielle(ouverture de tag,...) un document XML.

    http://sax4php.sourceforge.net/sax4php/Sax4PHP.html

Discussions similaires

  1. treplace regex pour enlever les balises html
    Par briceg dans le forum Développement de jobs
    Réponses: 3
    Dernier message: 23/10/2009, 10h47
  2. [RegEx] probleme de reference arrière pour supprimer les balises html
    Par Galeenet dans le forum Langage
    Réponses: 1
    Dernier message: 16/10/2007, 23h02
  3. Regex pour enlever les comments HTML
    Par pongping dans le forum Langage
    Réponses: 2
    Dernier message: 02/09/2007, 20h00
  4. [HTML] Outil pour vérifier les balises html
    Par Dsphinx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/12/2006, 10h17
  5. Script pour enlever les balises html
    Par Scratch48 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 02/11/2005, 17h16

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