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 - rajouter des englobants


Sujet :

Collection et Stream Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut Regexp - rajouter des englobants
    Bonjour, je viens de commencer à jouer avec les regexp mais je n'arrive pas à faire un truc qui ne parait pourtant pas si compliqué :

    j'ai un String qui contient de l'html avec des balises h1. je veux juste mettre un div qui englobe d'un titre à l'autre:

    j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aaa<h1>premier titre</h1> du texte <h1>deuxième titre </h1> bla bla
    et je voudrais que ça devienne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div>aaa<h1>premier titre</h1> du texte </div><div><h1>deuxième titre </h1> bla bla</div>
    j'ai essayé un truc du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Matcher m = Pattern.compile("(<h1>.*)(<h1>|$)").matcher(html); StringBuffer myStringBuffer = new StringBuffer();
     
    while (m.find()) {
                m.appendReplacement(myStringBuffer,"<div>"+m.group(1)+"</div>"+m.group(2));
    }
    m.appendTail(myStringBuffer);
    je pensais mettre un div autour d'un bloc commençant par h1 et qui se termine lorsque commence un h1 ou la fin du texte ($) ... mais ça ne marche pas.

    Est ce que vous auriez une piste car là je sèche

  2. #2
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Je pense que ton pb vient du ".*" de ta regexp, qui capture toute la ligne. Tu pourrais essayer de remplacer par ".*" par "[^<]*" (tout sauf "<").

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    Hello et merci pour cette réponse rapide.

    "[^<]*" ne marche pas : il ne capture que ce qu'il y a entre <h1> et </h1> ...

    je suis en train de m'embrouiller avec cette histoire à chercher des trucs bizzares je sens

  4. #4
    Membre Expert

    Homme Profil pro
    Responsable des études
    Inscrit en
    Mars 2009
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2009
    Messages : 553
    Par défaut
    Désolé, je n'avais pas bien compris ce que tu voulais faire.
    En admettant que ton html est dans une String, tu pourrais faire:
    pour trouver la première balise <h1> et ensuite faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    html.lastIndexOf("</h1>");
    pour trouver la dernière balise </h1>.

  5. #5
    Membre confirmé Avatar de CORTEZ
    Profil pro
    Dev : Java/J2EE
    Inscrit en
    Juillet 2007
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Dev : Java/J2EE
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2007
    Messages : 59
    Par défaut
    bonjour à tous,

    une autre solution avec split très simple.

    tu divise la chaine en tableau puis tu ajoute le Div

    aaa<h1>premier titre</h1> du texte <h1>deuxième titre </h1> bla bla

    le Split va se faire sur le motif suivant <h1>

    => le tableau va contenir
    - aaaa
    - premier titre </h1> du text
    - deuxième titre </h1> bla bla

    ==>
    tu fait un compteur si le nombre est paire alors tu ajoute div au debut
    sinon tu ajoute /div a la fin de la chaîne.

    - n'oublie pas d'ajouter /div dans la dernière case.

    voici le 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
    public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String str = "aaa<h1>premier titre</h1> du texte <h1>deuxième titre </h1> bla bla";
    		String[] tab = str.split("<h1>"); // mettre 
    		for(int i=0;i<tab.length;i++){
    			if(i%2 == 0) // si c'est un nombre paire alors ajout <div>
    				tab[i]= "<div>"+tab[i];
    			else // 
    			{
    				tab[i]=tab[i].concat("</div>");
    			}
    			if(i==tab.length-1) // ajouter </div> à la fin de traitement
    				tab[i]=tab[i].concat("</div>");
    		}
    		String strGoal="";
    		for(int i=0;i<tab.length;i++){
    			if(i%2 != 0){
    				strGoal +="<h1>"+tab[i];
    			}
    			else
    				strGoal += tab[i];
    		}
    		System.out.println(strGoal);
    	}
    cordialement

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 6
    Par défaut
    J'ai effectivement abandonné mon idée de regexp, là je m'embrouille plus qu'autre chose

    Très bonne idée pour le split, plutôt que d'utiliser et de me coder un equivalent avec des indexOf et des substring dans tous les sens.

    Merci à tous

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

Discussions similaires

  1. Bug IE si je rajoute des sauts de lignes dans le CS
    Par Invité dans le forum Balisage (X)HTML et validation W3C
    Réponses: 11
    Dernier message: 14/06/2006, 20h07
  2. [Jboss][Log4j] Rajouter des regles automatiquement
    Par Hikage dans le forum Wildfly/JBoss
    Réponses: 1
    Dernier message: 12/04/2006, 19h04
  3. Organisation pour rajouter des tables
    Par thufir hawat dans le forum Access
    Réponses: 4
    Dernier message: 14/10/2005, 11h09
  4. RegExp : gestion des noms accentués
    Par lord_paco dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/06/2005, 09h42
  5. [langage] Comment rajouter des champs dans une liste
    Par toto_titi dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2003, 14h09

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