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

Java Discussion :

Expressions régulières en Java,Pattern et Matcher


Sujet :

Java

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Points : 74
    Points
    74
    Par défaut Expressions régulières en Java,Pattern et Matcher
    Bonjour chère membres,

    Je code en Java :
    J’explique mon problème :
    J’ai une String contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    contenu =<U> blablabla à&nbsp;&nbsp;&nbsp;&nbsp</U>; 12h45 Un car de la mairie vient nous prendre. Blablabla &nbsp; <img alt="" style="width: 300px; border: 0px solid rgb(0, 0, 0); margin: 5px;" 
    src="[id-image]F1272555539432[/id-image]" align="left">
    Dans cette String je veux juste remplacer les Balise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    src =  [id-image]F1272555539432[/id-image]
    par la nouvelle Url que j’ai.
    J’ai donc fait un petit bout de code qui remplace cette url :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    maChaine= "[id-image]"+copiUrlImage[i]+"[/id-image]";
    contenu = contenu.replaceAll(maChaine, newUrl);
    Le problème quand je fais ce bout de code et qu’il ne me remplace pas ma chaine et pas d’erreur non plus j’affiche ma chaine et rien na changer. J’ai essayer de remplacer avec un contenu = contenu.replace(" [" , "t" ) ;
    La ca marche il me remplace bien mes balise "[" par "t" .
    J’aimerais juste pouvoir remplacer les balises [id-image]F1272555539432[/id-image] même si je dois utilisé un replace.
    Le problème c’est qu’il y a du texte avant et je ne peut pas remplacer tout les caractère i,d,-,m,a,g,e avec un replace.
    J’ai déjà regardé les Matcher et les Pattern mais la aussi déjà essayer le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Pattern p = Pattern.compile(« [id-image] ») ;
    Matcher m = p.matcher(contenu);
    While(m.find())
    {	System.out.println(“”+m.group + “’trouvé à’” + m.start() +”fin à”+ m.end ) ;
     
    }
    Et la pareille il me sort :
    a ‘trouvé à ’ 4 fin à 5
    e’trouvé à’ 7fin à 8


    Et pourtant :
    Pattern : permet d'obtenir une version compilée d'une expression régulière.
    Matcher : permet d'analyser une chaîne en entrée à partir d'un Pattern.
    Donc bon la non plus je ne comprends pas trop

    Quelqu’un aurait-il une solution à mon problème ?

    Merci de m’avoir lu.

    Cordialement.

  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,


    Ton expression régulière n'est pas bonne ! Ou plutôt elle ne correspond pas à ce que tu attends.

    Dans le expression régulière, la chaine "[id-image]" signifie : un caractère parmi i, d, e, f, g, h, i, m, a, g, e.

    Si tu n'as pas besoin d'utiliser les expressions régulières, tu peux très bien utiliser replace() (je ne vois pas le problème à cela). Sinon il faut protéger les caractères spéciaux, par exemple avec Pattern.quote() et Matcher.quoteReplacement()...


    a++

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Points : 74
    Points
    74
    Par défaut
    Bonjour, et merci de ta réponse.
    Si tu n'as pas besoin d'utiliser les expressions régulières, tu peux très bien utiliser replace() (je ne vois pas le problème à cela).
    Le problème si j'utilise replace(), est que je vais changer tout les caractères [,i,d,m,a,g,e,] de ma String et non pas juste la String dans src =
    Car dans la fonction replace, il n'y a pas de int début de chaine ou int find de chaine.
    Je ne sais pas si je suis très claire.
    La solution serait peut être de prendre tout le texte qu'il y a dans ma chaine sans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     <img alt="" style="width: 300px; border: 0px solid rgb(0, 0, 0); margin: 5px;" 
    src="[id-image]F1272555539432[/id-image]" align="left">
    et de rajouter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <img alt="" style="width: 300px; border: 0px solid rgb(0, 0, 0); margin: 5px;" 
    src="nouvelleUrl" align="left">

  4. #4
    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
    Il n'y a pas de notion d'index non plus dans replaceAll()

    replace() se contente d'appeler replaceAll() en gérant proprement la protection des caractères spéciaux...

    a++

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Points : 74
    Points
    74
    Par défaut
    Oui j'ai bien compris, sauf que avec replaceAll() tu change toute ta chaine en l'occurence "[id-image]F1272555539432[/id-image]".

    Alors que avec replace(), on change le caractère A par le caractère B si tu a plusieurs caractères "i" dans la String on va changer tout les caractères et non pas seulement le caractère qui nous interesse.

    C'est surtout ca mon problème .

    En tout cas merci de tes réponses si je trouve une solution je l'indiquerais.

    Cordialement.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Malatok Voir le message
    Alors que avec replace(), on change le caractère A par le caractère B si tu a plusieurs caractères "i" dans la String on va changer tout les caractères et non pas seulement le caractère qui nous interesse.
    T'es sûr que tu confonds pas avec un autre langage ? Tu as testé ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Points : 74
    Points
    74
    Par défaut
    Oh que oui, je suis sûr NetBeans6.8 est ouvert juste a coté de moi.

  8. #8
    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
    Et pourtant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        String text = "bla bla bla [id-image]F1272555539432[/id-image] bla bla bla";
        text = text.replace("[id-image]F1272555539432[/id-image]", "XXXXXXXX");
        System.out.println(text); // affiche : bla bla bla XXXXXXXX bla bla bla
    a++

  9. #9
    Membre régulier
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Points : 74
    Points
    74
    Par défaut
    Et pourtant avec replace(charSequence target, CharSequence replacement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String text = "bla bla bla<img = [id-image]F1272555539432[/id-image] > bla bla bla";
        text = text.replace("[id-image]F1272555539432[/id-image]", "XXXXXXXX");
        System.out.println(text); // affiche : bla bla bla<img = [id-image]F1272555539432[/id-image]>bla bla bla

    Mais avec replace(char oldChar, char newchar) Cela Marche.
    Merci BEAUCOUP !!!
    Cordialement

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

Discussions similaires

  1. Les expressions régulières en java
    Par blackhock dans le forum Général Java
    Réponses: 2
    Dernier message: 21/04/2009, 13h05
  2. Expression régulière avec java
    Par mouvma dans le forum Général Java
    Réponses: 2
    Dernier message: 18/01/2008, 17h00
  3. expression régulière en java
    Par shirya dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 21/09/2007, 16h10
  4. expression régulière en java
    Par Karine2007 dans le forum Langage
    Réponses: 9
    Dernier message: 07/07/2007, 12h35
  5. Expressions régulières en Java
    Par jason69 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 04/07/2007, 10h50

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