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 :

Utiliser Regex pour remplacement


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut Utiliser Regex pour remplacement
    Comment peut-on utiliser des regex pour remplacer des morceux de texte.

    Voici l'exemple sur lequel je travaille:

    Dans un ensemble des fichiers, je dois remplacer les occurences
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <html:link * url= * > * </html:link>
    * - signifie un texte quelconque

    C'est à dire qu'il faut remplacer la balise 'a' par 'html:link' et 'href' par 'url' sans modifier le texte qui se trouve entre ces éléments.

  2. #2
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    Je travaille avec Eclipse, mais je pense que dans les autres IDE ça devrait se faire pareille.

  3. #3
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    je sais pas si tu sais utiliser les stylesheet XML, en tout cas c'est la solution immédiate à ce probleme. XSL, XML stylesheet language sauf erreur.

  4. #4
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    Je ne vois pas comment est-ce qu'on peut utiliser les transformation xsl dans ce cas.

    Ce que j'ai à faire, c'est de remplacer dans des fichiers JSP existants les balises <a> par <html:link>.

  5. #5
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    si ça doit fonctionner, mais je n'ai pas d exemple avec moi.
    pour ce qui est de java et regex il existe java.util.Formatter avec toutes les possbilités regular expressions.

  6. #6
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    Est-ce que tu pourrais me donner un petit example d'utilisation?
    Même s'il ne sera pas précis, ça me donnerait des idées.

  7. #7
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406

  8. #8
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    J'ai accédé le lien.

    La bas est décrit un problème semblable, mais toujours pas de soution

    C'est des solutions, que j'ai besoin

  9. #9
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    ah je pense que j'ai peut-etre le code qu'il te faut, j'ai developpe un petit utitaire qui inclut les RegEx pour les fichiers: WebSite Installer tu peux le trouver sur mon site web avec les sources.
    Je vais publier un extrait des regexpressions dans le post suivant.

  10. #10
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut remplacer des occurences RegExpression
    c'est la methode courante avec des Strings de comparaison.
    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
    try{ bos.close(); } catch (IOException e) {} finally {
    	for(int j = 0; j < regText.length; j++) {
                      try{	
                         JTextField field = (JTextField)regText[j];
    	         if(!field.getText().equals("") && !field.getText().equals(regTextDefault))
    		buffer = new String(buffer).replaceAll(field.getText(),((JTextField)adjText[j]).getText()).getBytes();
    	     } catch (ClassCastException e) { break; }
    	}
    	log.pushNewLog("making the replacement file of " + files[i].getName() + ":");
    	preparedFiles[i] = new File(files[i].getPath()); // + ".rdy");
    	bos = new Out(new FileOutputStream(preparedFiles[i].getPath()));
    						
    	off = 0;
    	try {
    		while(true) {
    		            bos.write(buffer,off++,buffer.length);
    		}
    						
    	} catch (AsynchronousCloseException e) { throw e; } catch(IndexOutOfBoundsException e) {
    		log.pushNewLog(".");
    	} finally {
    		try{ bos.close(); } catch (IOException e){} finally {
    			log.pushNewLog("done.");
    			continue;
    		}
    	}
    }
    la deuxieme methode, moins evidente, peut-etre meconnue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      sw_printStrings.addActionListener(new ActionListener() {      
               public void actionPerformed(ActionEvent e) {
                    Formatter formatter = new Formatter(sw_log); // la classe Formatter prend en argument du contructeur un composant Appendable de sortie, le formatage s'imprime sur celle-ci                for(int i = 0; i < Strings.length; i++) { 
                       if(Strings[i] != null) 
                           formatter.format(sw_formatPrintStrings.getText(), Strings[i], i); 
    /* les agruments peuvent varier en nombre, ici le premier est le formatage RegularExpression avec les arguments qui suivent: ici l'objet du tableau Strings[i] et le nombre i */                }
               }});
    La deuxieme methode est la plus puissante en terme de modularite (c.f. format javadoc), car elle permet de mettre en forme du texte à l'aide d'une simple fonction vers une sortie Appendable évidente. Toutefois il est certain que la première solution (c.f. replaceAll javadoc)est la plus simple, car il n'est pas necessaire de connaitre le formatage Regular Expression du texte, cela dit assez complexe.

  11. #11
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    Aparament,

    ce code ne fait qu'un simple remplacement 'd'un texte' dans un 'autre text'.

    Le probleme dans mon cas c'est un peu different.
    Presentement j'ai des texte comme ça:
    <a href="some link" onclick="some click"> Click this link</a>

    et je dois obtenir ça:

    <html:link url="some link" onclick="some click"> Click this link</html:link>

  12. #12
    Membre chevronné Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Par défaut
    no tu n'as pas bien fait attention: il remplace les occurences d'un texte donnees par une chaine String par une autre chaine de caracteres. pour toi ce serait new String(<a href ...></a>).replaceAll("<a ", "<html:link "); et ainsi de suite.

  13. #13
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    C'est une très bonne idée.

    Merci

  14. #14
    Membre confirmé
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    58
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 58
    Par défaut
    Il y a un problème avec le replaceAll.

    L'attribute href, peut contenir des caractères spéciaux (par exemple '$'), ce qui fait planter le remplacement, car str.replaceAll utilise des regex.

Discussions similaires

  1. Regex pour remplacer une chaine par un lien
    Par lerorodu51 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 28/03/2014, 15h52
  2. [RegEx] utilisation regex pour pagination articles
    Par peaulisse dans le forum Langage
    Réponses: 2
    Dernier message: 19/03/2010, 21h37
  3. [RegEx] regex pour remplacer bbcode et img
    Par gwena54 dans le forum Langage
    Réponses: 6
    Dernier message: 16/08/2007, 14h42
  4. Fonction à utiliser pour remplacer les accents et autres caractères
    Par Christophe Charron dans le forum Langage
    Réponses: 2
    Dernier message: 05/08/2007, 12h50
  5. [Notepad++] utiliser regex pour remplacer des caractères
    Par ilood dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 04/02/2007, 04h06

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