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:
lorsque j'essaye avec la chaine suivante:
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");
j'obtiens ceci:
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*/
(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)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2select ' ; ' * from table col
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.
Partager