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

Langage Java Discussion :

ReplaceFirst et expressions régulières


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Par défaut ReplaceFirst et expressions régulières
    Bonjour à tous.
    Je bloque sur un problème d'expression régulière avec Java...

    Il s'agit de remplacer une chaine de caractère qui contient \\cellx345\\ (ou 345 peut être un nombre quelconque).
    Cette chaine est contenue dans un fichier et je souhaite appliquer la méthode replacefirst de java.lang.String dessus.

    J'ai essayé les expressions régulières :
    chainedecaracteres.replaceFisrt("\\\\cellx.*\\\\",chaineàremplacer).
    et
    chainedecaracteres.replaceFisrt("\\\\\\\\cellx.*\\\\\\\\",chaineàremplacer).

    Mais impossible de faire fonctionner ce code...

    Je fais une erreur ?

    Merci d'avance.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Chez moi la deuxième marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static void main(String[] args) {
      String chainedecaracteres = "\\\\cellx842\\\\ Java";
      System.out.println(chainedecaracteres);
     
      String chaineàremplacer = "Brillant !";
     
      String transfomee = chainedecaracteres.replaceAll("\\\\\\\\cellx.*\\\\\\\\", chaineàremplacer);
      System.out.println(transfomee);
    }
    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    \\cellx842\\ Java
    Brillant ! Java
    Ce n'est pas le cas chez toi ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    281
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 281
    Par défaut
    c'est le . et * qui ne sont pas comme tu l'entends.
    Regarde la classe pattern sur la doc java, il y a une explication sur les expressions régulière
    pour dire n'importe quel nombre, c'est [0-9]+

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2010
    Messages : 9
    Par défaut
    Bon j'ai remplacé le . par [0-9] et j'ai réussi à trouver l'expression régulière qui collait bien à mon problème:

    ligne = ligne.replaceFirst("\\\\cellx[0-9]+\\\\", "\\\\cellx3500\\\\");

    Je trouve ce résultat assez étonnant puisque les paramètres de replaceFirst sont pourtant replaceFirst(String regexp, String str) et la ligne dans mon fichier contient \cellx345\.

    Quoiqu'il en soit le code fonctionne et mon fichier rtf en sortie est parfait !

    Merci pour votre aide.
    A bientôt !

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Citation Envoyé par beeeeeennnnnn Voir le message
    Je trouve ce résultat assez étonnant puisque les paramètres de replaceFirst sont pourtant replaceFirst(String regexp, String str) et la ligne dans mon fichier contient \cellx345\.
    C'est parce que la notation .* est ce qu'on appelle "greedy" : elle essaie de ramasser la plus longue chaîne possible, au contraire de 'reluctant' qui essaie de ramasser la plus courte possible.

    Donc, comme le . indique qu'elle peut ramasser n'importe quoi, elle ne va pas s'arrêter au premier \ parce qu'il est admissible dans le .*

    Elle va s'arrêter au dernier \
    Utiliser [0-9]* résout le problème parce que \ n'est pas admissible dedans.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [RegEx] Expression régulières : Balises <SCRIPT>
    Par Gwipi dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2006, 23h25
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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