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 pour nettoyer des requêtes SQL


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Par défaut [RegEx] problème avec groupe capturant
    Bonjour à tous,

    J'écris un module dans une application qui récupère des requêtes sql dans des fichiers existants, et les "nettoie" en supprimant diverses choses dedans, à l'aide d'expression régulières. Là je coince sur une expression avec laquelle je veux retirer la clause where de la requête si elle est vide, ç'est à dire si on a dans la chaine
    - where <des blancs> <fin de chaine>
    - where <des blancs> group by
    - where <des blancs> order by

    il faut retirer le mot clé where.

    Voici ce que j'ai écrit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Pattern noWhereClausePattern = Pattern.compile("where(\\s*\\z|\\s*group by|\\s*order by)",Pattern.MULTILINE);
    query = noWhereClausePattern.matcher(query).replaceAll("\1");
    lorsque j'essaye avec la chaine suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    /*requête de 
     test*/select  ' ;  '   *--tout sélectionner 
    	from table --table exemple
    --exemple commentaire
     
    where XXX 
         order by col       /*on veut
     
     champs; vaut zéro*/;
     
    /*test*/
    j'obtiens ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select ' ; ' * from table  col
    (je précise qu'il a d'autres regex qui sont appliquées sur la chaine d'entrée, d'où le fait qu'il n'y ait plus de retour à la ligne, ni de commentaire)

    En gros le order by a été remplacé par un caractère bizarre. Quelqu'un aurait il une idée de ce qui ne va pas dans ma regex?

    Merci d'avance.

  2. #2
    Membre confirmé Avatar de gaboo_bl
    Profil pro
    Inscrit en
    Août 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2006
    Messages : 67
    Par défaut
    Ok j'ai trouvé le problème, ma RegEx était bonne mais le caractère qui permet de signaler un groupe capturé est le $ et pas le \ comme j'ai pu le lire dans le tutorial que j'ai utilisé. il fallait donc écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query = noWhereClausePattern.matcher(query).replaceAll("$1");
    tout bêtement. Merci à ceux qui ont jeté un œil en tout cas.

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

Discussions similaires

  1. Vba pour simuler des requètes sql
    Par philippe6 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 01/02/2013, 10h07
  2. Regex pour filtrer une requête SQL
    Par selenar dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 04/02/2012, 16h07
  3. Réponses: 1
    Dernier message: 26/03/2008, 20h09
  4. Aide pour des requêtes SQL
    Par psgkiki dans le forum Langage SQL
    Réponses: 4
    Dernier message: 06/01/2008, 15h06
  5. Recherche ibrairie pour éxécuter des requêtes SQL via C++
    Par daemon dans le forum Choisir un environnement de développement
    Réponses: 5
    Dernier message: 14/06/2004, 10h28

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