Salut,
C'est normal car le pattern .+ tentera de retrouver la chaine la plus grande possible correspondant au pattern global, ainsi cela donne dans ton cas (j'ai mis des couleurs pour montrer les relations entre le pattern et la requête) :
.+FROM\\s(.+)\\s+(WHERE|ORDER BY)\\s.+
SELECT * FROM Client WHERE Nom = 'Dupont' ORDER BY Nom
Et tu vois que ton pattern est bien respecté même s'il prend la chaine la plus grande possible et que ce n'est pas ce que tu attendais...
Il faut que tu utilises les quantifieurs réticents afin qu'il ne prennent que la chaine la plus petite possible avec .+? :
Pattern pattern = Pattern.compile(".+FROM\\s(.+?)\\s+(WHERE|ORDER BY)\\s.+", Pattern.CASE_INSENSITIVE);
a++
Partager