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 :

ReplaceAll regex avec \


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut ReplaceAll regex avec \
    bonjour,
    J'ai toujours autant de mal avec les regex !
    je souhaite remplacer dans une chaîne tout les \ mais uniquement s'ils ne sont pas doublé.
    J'ai commencé a écrire quelque chose du genre (\\\\)[^\\\\] mais ca ne correspond pas à ce que je cherche.

    Merci d'avance
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    bon, j'ai besoin d'un eclairage !
    je me suis dis :
    pour avoir les \\ il faut ecrire \\\\\\\\
    donc j'ai voulu ecrire [^\\\\\\\\] pour dire tous sauf les \\

    cependant ca n'est pas vrai ! quelqu'un pourrais me dire pourquoi ?
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Les expression régulières, c'est toujours sympa

    Je pars du principe que tu souhaites remplacer '\' par '#' pour les exemples.

    J'ai ça à te proposer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String result = source.replaceAll("([^\\\\])\\\\", "$1#")
    L'inconvénient de cet exemple, c'est que si c'est le premier caractère, ça ne le remplacera pas.

    Bien sûr, tu peux inverser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String result = source.replaceAll("\\\\([^\\\\])", "#$1")
    Et là, c'est si c'est le dernier caractère, qu'il va pas le prendre

    Et autre soucis :
    s'il tu as 3 '\', tu comptes avoir quoi? "\\\", "#\" ou "\#" ?

  4. #4
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    merci pour ta réponse !

    Mais malheureusement cela ne résout pas le problème !
    prenons un exemple :
    \\ch1\ch2\\ch3\ch4\ch5\

    si effectivement je remplace par un # alors avec ton expression j'obtiens :
    \#ch1#ch2\#ch3#ch4#ch5#
    alors que je souhaite avoir
    \\ch1#ch2\\ch3#ch4#ch5#

    j'ai donc eu l'idée de faire :
    [\\\\&&[^\\\\\\\\]]

    pour dire : tout les \ qui ne sont pas des \\ mais comme je l'ai mis dans mon précédent post :
    \\\\\\\\ signifie bien tout les \\
    [^\\\\\\\\] ne veux pas dire "tout ce qui n'est pas \\"

    Voila donc mon problème
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    En effet, j'ai été un peu vite.

    Alors, avec ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replaceAll("([^\\\\])\\\\([^\\\\])", "$1#$2")
    tu devrais y parvenir, à l'exception d'un unique '\' en début ou en fin.

    Après, la solution est peut être un traitement en deux temps:
    1 - Tu découpes ta chaine avec les '\' doubles
    2 - Tu la reconstruit en remplaçant le caractère '\' via un simple replace(char, char), sans utiliser de regexp.

  6. #6
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Par défaut
    super, c'est ce qu'il me fallait !
    J'ai compété ton expression pour quel prenne aussi les extrémités et voila le résultat final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    replaceAll("(^|[^\\\\])\\\\([^\\\\]|$)", "$1#$2")
    Encore merci de ton aide !
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. regex avec javascript
    Par zabdaniel dans le forum Général JavaScript
    Réponses: 18
    Dernier message: 15/05/2008, 17h41
  2. Appliquer regex avec parenthèse capturantes sur SELECT
    Par vallica dans le forum Requêtes
    Réponses: 3
    Dernier message: 01/02/2008, 12h34
  3. [RegEx] Regex avec condition
    Par yudao dans le forum Langage
    Réponses: 6
    Dernier message: 29/05/2007, 15h08
  4. REGEX avec variable
    Par Mat_F dans le forum Langage
    Réponses: 3
    Dernier message: 21/07/2006, 19h24
  5. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26

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