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

Collection et Stream Java Discussion :

[REGEXP] Suppression de tous les liens et les spans dans un code HTML


Sujet :

Collection et Stream Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut [REGEXP] Suppression de tous les liens et les spans dans un code HTML
    Bonjour à tous,
    Je souhaite supprimer dans un code HTML tous les liens, mais aussi tous les spans.
    Ma méthode fonctionnait plutot pas mal avec l'expression régulière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (.*?)(<a.*?>)(.*?)</a>(.*)
    Je pensais tout simplement rajouter à mon expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (.*?)(<span.*?>)(.*?)</span>(.*)
    entouré par des [ ] ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [(.*?)(<a.*?>)(.*?)</a>(.*)][(.*?)(<span.*?>)(.*?)</span>(.*)]
    L'idée était donc de créer un OU entre les deux expressions ...
    Malheureusement cela ne semble pas fonctionner aussi simplement que cela ...
    Avez-vous une idée ? merci à tous
    jb


    La méthode :
    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
     
    public static String removeBadsHtmlTags(final String text) {
    		Pattern patternA = Pattern.compile(REGEX_A);
    		StringBuilder toReturn = new StringBuilder();
    		if (text != null) {
    			Matcher matcherA = patternA.matcher(text);
    			String group4A = text;
    			while (matcherA.matches()) {
    				toReturn.append(matcherA.group(1));
    				toReturn.append(matcherA.group(3));
    				group4A = matcherA.group(4);
    				matcherA = matcherA.reset(group4A);
    			}
    			toReturn.append(group4A);
    		}
    		return toReturn.toString();
    	}

  2. #2
    Membre actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2002
    Messages
    192
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 192
    Points : 252
    Points
    252
    Par défaut
    Salut,

    en résolvant mon propre problème de REGEXP, j'ai trouvé pour le tien.

    Je te poste un petit bout de 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
    package test;
     
    public class RegexpTest {
        private static String LS = System.getProperty("line.separator");
        private static String html = "<html>" + LS +
        "  <body>" + LS +
        "    <div>" + LS +
        "      <p>Du texte : <a href=\"htpp://www.google.fr\">google</a></p><p>Du texte : <a href=\"htpp://www.google.fr\">google</a></p>" + LS +
        "      <p>Encore du texte</p>" + LS +
        "      <span>toujours du texte <a href=\"htpp://www.google.fr\">google</a></span>       <span>toujours du texte</span>" + LS +
        "      <span>toujours du texte</span>" + LS +
        "    </div>" + LS +
        "  </body>" + LS +
        "</html>";
     
        public static void main(String[] args) {
            String str = html.replaceAll("(?:<a.+?>)(.+?)(?:</a>)", "$1");
            System.out.println("deleting ANCHORS");
            System.out.println(str);
            str = str.replaceAll("(?:<span>)(.+?)(?:</span>)", "$1");
            System.out.println("deleting SPANS");
            System.out.println(str);
            System.out.println("deleting both ANCHORS & SPANS");
            System.out.println(html.replaceAll("(?:<a.+?>)(.+?)(?:</a>)|(?:<span>)(.+?)(?:</span>)", "$1$2"));
        }
    }
    dont le résultat d'exécution est :
    Code html : 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
    deleting ANCHORS
    <html>
      <body>
        <div>
          <p>Du texte : google</p><p>Du texte : google</p>
          <p>Encore du texte</p>
          <span>toujours du texte google</span>       <span>toujours du texte</span>
          <span>toujours du texte</span>
        </div>
      </body>
    </html>
    deleting SPANS
    <html>
      <body>
        <div>
          <p>Du texte : google</p><p>Du texte : google</p>
          <p>Encore du texte</p>
          toujours du texte google       toujours du texte
          toujours du texte
        </div>
      </body>
    </html>
    deleting both ANCHORS & SPANS
    <html>
      <body>
        <div>
          <p>Du texte : google</p><p>Du texte : google</p>
          <p>Encore du texte</p>
          toujours du texte <a href="htpp://www.google.fr">google</a>       toujours du texte
          toujours du texte
        </div>
      </body>
    </html>
    On voit que la troisième solution ne fonctionne que s'il n'y a pas d'imbrication de tags à supprimer.

    Bon courage pour la suite.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    290
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 290
    Points : 137
    Points
    137
    Par défaut
    J'ai testé rapidement en intégrant ce bout de code et je me retrouve avec une java.lang.NullPointerException
    ...

    edition : forcément, si je suis un boulet ... j'appelais replaceAll avec une chaine vide

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

Discussions similaires

  1. [Mail] Récupérer tous les liens et les titres d'une page
    Par dragon noir dans le forum Langage
    Réponses: 12
    Dernier message: 03/07/2006, 16h09
  2. Réponses: 4
    Dernier message: 21/04/2006, 14h37
  3. [DAO] Comment gérer les liens avec la bdd dans mes classes?
    Par Wormus dans le forum Autres
    Réponses: 6
    Dernier message: 22/02/2006, 16h14
  4. [DAO] Faire le lien entre les VO et les Objets Métiers
    Par mauvais_karma dans le forum Hibernate
    Réponses: 12
    Dernier message: 25/11/2005, 15h19

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