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

  1. #1
    Membre confirmé
    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
    Points : 486
    Points
    486
    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 à l'essai
    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
    Points : 24
    Points
    24
    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 confirmé
    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
    Points : 486
    Points
    486
    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 confirmé
    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
    Points : 486
    Points
    486
    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 éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    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
    Points : 7 762
    Points
    7 762
    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 éprouvé
    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
    Points : 1 220
    Points
    1 220
    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

  8. #8
    Membre confirmé
    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
    Points : 486
    Points
    486
    Par défaut
    Mais à quoi ça peut bien servir ?
    En faite je dois récup le html venant d'un wisiwyg et le transformer en pdf avec html2pdf. Le blem c'est que y'a un mec pour un test il a fait un copier coller d'un article et ça du coup pris les balises html mais ça commençait par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <strong>blabla</strong></p>
    Du coup html2pdf planté. Je fais cette vérif comme ça si je vois un problème de balises ouvrante ou fermante je renvois un message.

    Là j'ai du passer sur autre choses mais dès que j'ai un peu plus de temps je regarderez vos parseur xml.

    Merci beaucoup en tout cas

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