Détection de smiley avec une expression régulière [Résolu]

Détection de smiley avec une expression régulière [Résolu] - Java - Programmation

Marsh Posté le 27-06-2004 à 13:41:46    

Bonjour,
 
Je souhaite remplacer toutes les occurences des smileys se trouvant dans un texte (style ": )" ) avec la methode replaceAll
 
Or, je n'arrive pas à detecter les caractères parenthèse ouvrante ou fermante. ReplaceAll les detecte comme partie inégrante de l'expression régulière et non comme caractères a trouver.
 
Si vous avez une solution, je suis preneur  ;)  
 
merci d'avance


Message édité par Mudknot le 29-06-2004 à 19:07:20
Reply

Marsh Posté le 27-06-2004 à 13:41:46   

Reply

Marsh Posté le 28-06-2004 à 17:34:42    

il faut les échaper car ce sont des caractères particuliers comme tu le soulignes. \ devrait t'aider


---------------
A straight line is a special case of a curve. It's a curve which is uncurved. -- Susskind.
Reply

Marsh Posté le 28-06-2004 à 17:48:48    

un smiley c'est aussi ca peut etre \W{2,3}  
cad une suite de 2 ou 3 caractères alphanumériques...
 
:) passe
8-) passe aussi
<8-) passe pas :D ...
 
g testé ça passe... avec une regexp..
 
sinon il faut effectivement échaper les caractères...
 
PS : c pas top, :p passe pas...je cherche


Message édité par Jubijub le 28-06-2004 à 17:55:33

---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 28-06-2004 à 17:56:01    

ce qui est chiant c que y'a trop de combinaisons possibles....j'étais pas loin mais g du mal pour spécifier qu'on accepte les caractères alphanumérique que si il en a pas plus de 2 de suite...


Message édité par Jubijub le 28-06-2004 à 17:59:44

---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 28-06-2004 à 23:30:31    

tu peux utiliser ca:

Code :
  1. public static String replaceAll(String msg)
  2.  {
  3.  StringBuffer result=new StringBuffer();
  4.  int cpt=0;
  5.  for(int i=0;i<msg.length();i++)
  6.  {
  7.   char c=msg.charAt(i);
  8.   result.append(c);
  9.   switch(c)
  10.   {
  11.    case '[':
  12.    case ']':
  13.    case '\'':
  14.    case '\\':
  15.    case '(':
  16.    case '-':
  17.    case ')':
  18.    case '|':
  19.    case '+':
  20.    case '.':
  21.    case '{':
  22.    case '*':
  23.    case '$':
  24.    case '?':result.insert(i+cpt,'\\'); cpt++;break;
  25.   }
  26.  }
  27.  return result.toString();
  28.  }


 
ca doit pouvoir etre complété
 

Reply

Marsh Posté le 29-06-2004 à 01:55:01    

Merci de vos réponses
 
J'ai reussi a faire ce que je voulais avec une fonction perso, mais j'arrive toujours pas a les détecter avec une expression reguliere et replaceAll, meme en mettant '\' devant ca ne marche pas


Message édité par Mudknot le 29-06-2004 à 02:10:32
Reply

Marsh Posté le 29-06-2004 à 01:57:09    

Sinon je ne veux pas retrouver tous les smiley du fichier texte mais une seul genre ": )" car j'ai une liste des codes de smiley et je souhaitais les remplacer un par un en bouclant sur cette liste

Reply

Marsh Posté le 29-06-2004 à 11:13:25    

be donne la liste, on doit pouvoir te sortir la regexp qui détecte cette liste...


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 29-06-2004 à 15:30:44    

Nan c'est pas ca
 
J'ai une liste avec tous les code de mes smileys, genre :

Code :
  1. :)
  2. :(
  3. :/
  4. :D
  5. :p
  6. ...


 
Et ma boucle ressemble à ca :
 

Code :
  1. String texteATester = ...;
  2. for(int i;i<tailleListe;i++){
  3.      texteATester = texteATester.replaceAll(liste[i],texteATester);
  4. }


 
Que dois-je mettre dans ma liste à la place de ": )" par exemple, pour que le replaceAll fonctionne?

Reply

Marsh Posté le 29-06-2004 à 16:32:38    

\ , bordel


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-06-2004 à 16:32:38   

Reply

Marsh Posté le 29-06-2004 à 16:33:27    

":\\)"

Reply

Marsh Posté le 29-06-2004 à 16:36:01    

oui en java il faut escaper les back slashs pour qu'ils escapent bien dans une regexp, parce qu'ils sont eux mêmes des caractères d'échapement au niveau des fichiers source java


Message édité par schnapsmann le 29-06-2004 à 16:36:40

---------------
From now on, you will speak only when spoken to, and the first and last words out of your filthy sewers will be "Sir!"
Reply

Marsh Posté le 29-06-2004 à 18:42:12    

Merci lorill et schnapsmann, il faut bien faire un double escape  :jap:  
 
Merci 'the real moins moins' pour ta réponse sympathique mais néanmoins incomplète http://www.forum-auto.com/smileys/fleur.gif

Reply

Marsh Posté le 29-06-2004 à 19:37:21    

[:icon12]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 29-06-2004 à 22:08:57    

Code :
  1. static {
  2.         putSmiley(":-)", "http://forum.hardware.fr/images/smile.gif" );
  3.         putSmiley(":)", "http://forum.hardware.fr/images/smile.gif" );
  4.         putSmiley("(:", "http://forum.hardware.fr/images/smile.gif" );
  5.         putSmiley(":o", "http://forum.hardware.fr/images/redface.gif" );
  6.         putSmiley(":(", "http://forum.hardware.fr/images/frown.gif" );
  7.         putSmiley(":-(", "http://forum.hardware.fr/images/frown.gif" );
  8.         putSmiley(" ):", "http://forum.hardware.fr/images/frown.gif" );
  9.         putSmiley(";-)", "http://forum.hardware.fr/images/wink.gif" );
  10.         putSmiley(";)", "http://forum.hardware.fr/images/wink.gif" );
  11.         putSmiley(":'(", "http://forum.hardware.fr/images/ohill.gif" );
  12.         putSmiley(":p", "http://forum.hardware.fr/images/tongue.gif" );
  13.         putSmiley(":-p", "http://forum.hardware.fr/images/tongue.gif" );
  14.         putSmiley(":P", "http://forum.hardware.fr/images/tongue.gif" );
  15.         putSmiley(":-P", "http://forum.hardware.fr/images/tongue.gif" );
  16.         putSmiley(":D", "http://forum.hardware.fr/images/biggrin.gif" );
  17.         putSmiley(":-D", "http://forum.hardware.fr/images/biggrin.gif" );
  18.     }


Code :
  1. public DecoratedText filter(DecoratedText message) {
  2.         string = message.getText();
  3.         index = 0;
  4.         Decoration deco = message.getToplevelDecoration();
  5.         try {
  6.             for (String[] pair = nextSmiley(); pair != null; pair = nextSmiley()) {
  7.                 //System.out.println("recognized : " + pair[0] + " length : " +
  8.                 // lengthSmiley);
  9.                 deco.insertDecoration(SmileyDecoration.getFactory(pair[0],
  10.                         pair[1]), startSmiley, lengthSmiley);
  11.             }
  12.             return message;
  13.         } catch (InvalidPositionException e) {
  14.             return message;
  15.         }
  16.     }
  17.     public String[] nextSmiley() {
  18.         LexicalTree.Seeker seeker = nativeSmilies.getSeeker();
  19.         for (; index < string.length(); index++) {
  20.             seeker.nextChar(string.charAt(index));
  21.             String[] pair = (String[]) seeker.getValue();
  22.             if (pair != null) {
  23.                 lengthSmiley = pair[0].length();
  24.                 startSmiley = index - lengthSmiley + 1;
  25.                 return pair;
  26.             }
  27.         }
  28.         return null;
  29.     }


Message édité par nraynaud le 29-06-2004 à 22:09:58

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 30-06-2004 à 00:58:11    

Merci :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed