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.