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 :

Regex : Problème sur sa construction


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Par défaut Regex : Problème sur sa construction
    Bonjour tout le monde

    Voila, actuellement j'ai un problème pour constuire ma regex, je prend en source le String suivant :
    [R_RECEVABLE] = '' OR ([R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = '') OR ([R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = 'S' AND [AFF_K_PREV_FRN] = '')
    Et je souhaiterais avoir un résultat du genre :
    -> [R_RECEVABLE] = ''
    -> OR
    -> [R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = ''
    -> OR
    -> [R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = 'S' AND [AFF_K_PREV_FRN] = ''
    Or j'utilise la regex suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String  rBloc      = "([^\\(\\)]+)";
    Et j'obtient le résultat suivant :
    -> [R_RECEVABLE] = '' OR
    -> [R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = ''
    -> OR
    -> [R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = 'S' AND [AFF_K_PREV_FRN] = ''
    Merci d'avance

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    J'ai du mal à comprendre la logique de ton découpage et encore plus la logique de la chaine que tu essaie de découper (guillements en nombre impair qui se chevauchent avec les parenthèses)

    Pourrais tu l'expliciter?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Par défaut
    Le découpage de ma chaine se fait par bloc, c'est comme un if/else normal avec les parenthèses, et le contenu entre les crochets, sa serait une variable

    Et donc, j'aurais besoin de découper la chaine, pour savoir si je dois prendre en compte toute les variables, ou si c'est juste un enchainements de OR et donc je m'arrète dès que la première est bonne.

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    OK je n'avais pas compris car j'avais cru que les deux apostrophes a la suite étaient des guillemets double. Maintenant ca me parait beaucoup plus clair. Mieux vaut mettre le code entre balise [CODE ], même si ce n'est pas vraiment du java.

    Donc si j'ai bien compris, tu veux découper en bouts qui sont soit :
    - une comparaison : [xxx] = 'y'
    - un groupe entre parenthèse : ( zzzzzzzzzzz )
    - un opérateur AND ou OR

    Ça pourrait ce faire avec l'expression régulière (\[.*?\] = '.*?')|(\(.*?\))|(OR|AND)

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Par défaut
    Vraiment un super merci, ça marche parfaitement la regex

    Mais j'ai juste un petit problème, lorsque je récupère un bloc, j'aimerai bien éviter d'avoir les parenthèses autour, donc au lieu d'avoir un résultat comme ça :
    [R_RECEVABLE] = ''
    OR
    ([R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = '')
    AND
    ([R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = 'S' AND [AFF_K_PREV_FRN] = '')
    Avoir un résultat qui ressemble à ça :
    [R_RECEVABLE] = ''
    OR
    [R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = ''
    AND
    [R_RECEVABLE] = 'O' AND [R_PDL_ETAT] = 'S' AND [AFF_K_PREV_FRN] = ''
    J'ai essayé de modifier un peut la regex, mais je n'arrive pas à voir quel parenthèse il faut que je "sorte" pour avoir le résultat attendu.

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Pour ne pas capturer les parenthèses il faudrait faire: (\[.*?\] = '.*?')|\((.*?)\)|(OR|AND) ainsi a chaque find on capturerait 3 groupes dont un seul ne serait pas null:
    - le groupe 1 si on a à faire à une comparaison : [xxx] = 'y'
    - le groupe 2 si on a à faire à un groupe entre parenthèse : ( zzzzzzzzzzz )
    - le groupe 3 si on a à faire à un opérateur AND ou OR

    Le groupe 2 contenant le résultat sans parenthèses

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

Discussions similaires

  1. Problème sur une construction de requête
    Par Slayes dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/07/2013, 13h15
  2. [RegEx] Problème sur une Regex
    Par Fanel dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2011, 09h17
  3. Problème sur split avec regex
    Par fr1man dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/05/2009, 13h46
  4. Problème sur les Regexs
    Par Elendhil dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 14/01/2008, 18h45
  5. [RegEx] Problème sur une regex
    Par Nious99 dans le forum Langage
    Réponses: 2
    Dernier message: 13/09/2006, 14h31

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