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 Java Discussion :

supprimer toutes les balises d'un code html (regex?)


Sujet :

Langage Java

  1. #1
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut supprimer toutes les balises d'un code html (regex?)
    Salut à tous,

    J'ai un JTextField contenant du texte formatté en html que je voudrais copier dans le presse papier.
    Le probleme est que le texte que je recupère du JTextField est de la forme :

    <html><head><body><font color="#0000FF">texte bleu</font> <font color="#FF0000">test rouge</font></body></html>

    alors que je ne veus mettre dans le presse papier que : texte bleu texte rouge

    Mon probleme est donc de supprimer les balises html, j'ai pensé à utiliser la méthode replace(), malheureusement je ne maitrise pas trop (en fait pas du tout ) les expressions régulières et je ne trouve pas celle qui me conviendrait.

    Ma question est donc (... suspense) quelle est l'expression regulière (si elle existe) qui me permettrait de supprimer toutes les balises ?

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	String text = html.replaceAll("<[^>]*>", "");
    Explication :
    • <[^>]*>
      [list:8d31654830]
    • < Le caractère '<'
    • [^>] Tous les caractères sauf '>'
      * on répère l'élément précédent une ou plusieurs fois.
    • > Le caractère '>'
    [/list:u:8d31654830]

    Tu trouveras plus de détail dans la javadoc de la classe Pattern...

    a++

  3. #3
    Membre expérimenté
    Avatar de zekey
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 036
    Points : 1 403
    Points
    1 403
    Par défaut
    Il y a eu un post recemment concernant ce sujet:
    http://www.developpez.net/forums/vie...light=#2452535

  4. #4
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Citation Envoyé par adiGuba
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	String text = html.replaceAll("<[^>]*>", "");
    Explication :
    • <[^>]*>
      [list:82fe4ad517]
    • < Le caractère '<'
    • [^>] Tous les caractères sauf '>'
      * on répère l'élément précédent une ou plusieurs fois.
    • > Le caractère '>'
    [/list:u:82fe4ad517]

    Tu trouveras plus de détail dans la javadoc de la classe Pattern...

    a++
    La solution qui marche au poil et les explications qui vont avec , ya rien à dire sinon un mega enorme super beaucoup.

  5. #5
    Membre éclairé
    Avatar de divxdede
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    525
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 525
    Points : 844
    Points
    844
    Par défaut Meme problème... en poussant plus loin
    Bonjour,

    Me voici confronté à la même problèmatique lors du developpement d'un de mes projets perso: Transformer une chaine HTML en texte-brute....
    Premierement, merci pour les solutions proposées qui m'ont permis de me donner des axes de reflexion.
    La solution apportée sur ce message bien qu'efficace est rapidement apparue insatisfaisante aprés quelques essai au sein de mon projet.

    Bien que la solution élimine tous les tags HTML, elle n'en tient absolument pas compte (alors qu'au minimum <br> et <p> méritent d'être interpretés)
    Alors qu'au contraire elle conserve la mise en forme de la chaine source (whitespaces/retour a la ligne brut) alors qu'on ne le devrait pas.
    Dans la même lignée elle ne gére pas les &amp; et autre qu'il faut convertir adéquatement.
    Bref, l'utilisation des regexp ne permet pas d'effectuer une transformation allant dans ce sens...

    Aprés avoir chercher les objets sachant manipuler de l'HTML dans l'API Java, je me suis amusé a lire le code source de JEditorPane et JTextPane afin de savoir comment ils faisaient pour presenter un texte HTML.

    Solution proposée:
    Utiliser un Document (particulierement un HTMLDocument). Un document n'est qu'un conteneur de texte (contents) pour lequel on lui associe des styles. Si on arrive a initialiser correctement le Document (c'est a dire effectuer la séparation entre le contenu et le style), il devient facile de recuperer que le contenu (brut).
    A la lecture du code source de JTexPane, l'utilisation d'un EditorKit s'impose d'elle même. En effet HTMLEditorKit alimente un HTMLDocument permettant ainsi de separer les styles.

    Voici le code d'exemple:

    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
     
    /**
     * Util class allowing to convert an Html string into a simple-text without any tags.
     * This conversion manage specials html sequences like &amp;   and as well some basic layout information as <p>
     * 
     * This tools require a well-formed html string...
     * 
     * @author André Sébastien
     */
    public class HTMLUtils {
     
        // private members
        private HTMLEditorKit kit = new HTMLEditorKit();
        private HTMLDocument  doc = new HTMLDocument();
     
        // Default instance
        private static final HTMLUtils instance = new HTMLUtils();
     
     
        /** Create a new instance */
        public HTMLUtils()
        { /* do nothing */ }
     
        /** Return a default shared-instance
         *  @return default shared-instance
         */
        public static HTMLUtils getDefault()
        { return instance; }
     
     
        /** Convert an HTML String to a simple-text (without tag)
         *  @param html well-formed html string
         *  @return simple-text resulting
         */
        public synchronized String getAsText(String html)
        {
            try
            {
                // clear our document's contents
                doc.remove(0, doc.getLength());
                if(html == null || html.equals("") ) return html;
     
                // change <br> tags to <p> since the kit doesn't convert by a new line
                html = html.replaceAll("<[bB][rR][\\s]*[/]?>","<p>");
     
                // use the editorKit for separate "attributes set" to "text-contents" by managing the document
                Reader    r   = new StringReader(html);
                kit.read(r, doc, 0);
     
                // return only "text-contents" part from the document ignoring this way all "attributes set"
                return doc.getText(0, doc.getLength() ).trim();
            }
            catch(Exception e){ e.printStackTrace(); return null; }
        }
     
        /**
         * TEST PURPOSE ONLY
         */
        public static void main(String[] args) {
            String html = "Hello  \n     How are <b>you</b>?,<p>Me &amp; Lilly are fine<b>";
     
            try
            {
               System.out.println(  HTMLUtils.getDefault().getAsText( html ) );
     
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    Remarque: Il semblerait que le <br> soit interpreté par un espace et non par un retour a la ligne, alors que le <p> effectue bien un retour a la ligne... Je n'ai pas pousser plus loin pour le moment...

    Voila, je voulais vous faire part de mes recherches.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Works fine
    Merci beaucoup ça marche nikel

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

Discussions similaires

  1. Supprimer toutes les balises html
    Par kaayna dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2011, 18h23
  2. Réponses: 2
    Dernier message: 11/06/2008, 09h32
  3. [RegEx] Enlever toutes les balise html
    Par cerede2000 dans le forum Langage
    Réponses: 1
    Dernier message: 26/05/2007, 10h20
  4. Réponses: 5
    Dernier message: 16/12/2006, 22h29
  5. [RegEx] Supprimer toutes les balises script et ce qu'elles contiennent
    Par Christophe Charron dans le forum Langage
    Réponses: 3
    Dernier message: 04/05/2006, 14h59

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