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 :

Parenthèses dans une expression régulière


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut Parenthèses dans une expression régulière
    Bonjour à tous,

    Je travaille sur un portail en J2EE pour lequel je dois réaliser un chat. L'une des exigences fonctionnelles est d'avoir des smileys dans les messages échangés. Pour cela j'ai créer une classe utilitaire contenant les codes des smileys ainsi que les images associées:
    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
    public class ChatUtil {
        public static final String[] STRING_SMILEY_CODE =
        {
              ":/",
              ":-/",
              ":'(",
              ":$",
              ":)",
              ":-)",
              ":|",
              ":(",
              ":-(",
              ":o",
              ":O",
              ":p",
              ":P",
              ":d",
              ":D",
              ";)",
              ";-)"
          };
        public static final String[] STRING_SMILEY_ICON =
        {
              "confused.gif",
              "confused.gif",
              "cry.gif",
              "embarassed.gif",
              "happy.gif",
              "happy.gif",
              "neutral.gif",
              "sad.gif",
              "sad.gif",
              "surprised.gif",
              "surprised.gif",
              "tong.gif",
              "tong.gif",
              "very_happy.gif",
              "very_happy.gif",
              "wink.gif",
              "wink.gif"
          };
    }
    Dans ma classe métier, j'ai créé une méthode qui doit permettre de remplacer les codes des smileys par la balise HTML correspondante:
    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
    private List replaceSmileys(List someMessages) {
        for(int cptMsg = 0; cptMsg < someMessages.size(); cptMsg++) {
            Message messageObj = (Message) someMessages.get(cptMsg);
            String  message    = messageObj.getMessage();
     
            for(int cptSmiley = 0; cptSmiley < ChatUtil.STRING_SMILEY_CODE.length; cptSmiley++) {
                Pattern smileyPattern = Pattern.compile(ChatUtil.STRING_SMILEY_CODE[cptSmiley]);
                Matcher smileyMatcher = smileyPattern.matcher(message);
     
                message = smileyMatcher.replaceAll("<img src=\"" + ChatUtil.STRING_SMILEY_ICON[cptSmiley] + "\" />");
            }
     
            // ...
        }
     
     
        return someMessages;
    }
    Le problème est qu'à l'éxécution, une exception est remontée me disant qu'un bloc capturant n'est pas correctement fermé... En effet, certains smileys se terminent par une parenthèse ouvrante ou fermante. Je n'ai pas le code de l'exception sous la main, désolé ...
    Pour remédier à cela, j'ai tenté d'escaper ces parenthèses par \\ mais bien que des smileys soient présents dans les messages récupérés, aucun match n'est trouvé... Sur ma page, c'est toujours le code du smiley qui est affiché et non son image associée

    Quelqu'un aurait une solution SVP ?

  2. #2
    Membre expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Points : 3 080
    Points
    3 080
    Par défaut
    Quel est l'intérêt d'un pattern matching ici vu que les expressions régulières que tu donnes sont les smileys, donc des chaînes caractères fixes...

    Un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replaceAll(smileyCode,"<img src=\"...\">");
    suffit

  3. #3
    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,


    Bizarre car normalement avec un \\ devant les parenthèses cela devrait fonctionner...

    Sinon plus globalement, puisque aucun des caractères de tes smileys ne doivent être interprété comme des caractères spéciaux des regexps, la meilleure solution serait de protéger toute la chaine avec Pattern.quote() (Java 5.0 minimum).
    Si tu n'es pas sous Java 5.0 tu as l'équivalent de cette méthode dans la FAQ : Comment empêcher les expressions régulières d'interpréter une sous-chaînes ?

    a++

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Merci ®om pour cette méthode que je ne connaissais pas...

    Bon j'ai résolu mon problème, j'avais tout simplement oublié d'escaper un de mes smileys Désolé de vous avoir dérangé pour si peu

    Encore merci à vous deux pour vos réponses !!!

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

Discussions similaires

  1. Utilisation de variables dans une Expression régulière
    Par Bonjovi51 dans le forum Langage
    Réponses: 4
    Dernier message: 13/03/2008, 11h19
  2. Une date butoire dans une expression régulière
    Par zooffy dans le forum ASP.NET
    Réponses: 4
    Dernier message: 14/02/2008, 10h11
  3. Réponses: 5
    Dernier message: 31/08/2006, 13h34
  4. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17
  5. Réponses: 6
    Dernier message: 17/08/2005, 12h38

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