cs_MrT
Messages postés4Date d'inscriptionjeudi 14 mars 2002StatutMembreDernière intervention17 mars 2005
-
17 mars 2005 à 18:02
frban
Messages postés1Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention18 mars 2005
-
18 mars 2005 à 16:59
Bonjour,
Voici ma problématique :
En entrée j'ai un début de requête SQL qui commence par "SELECT * from Matable1 alias, Matable2 alias 2"
Je voudrais grâce à l'API regex (donc par expression régulière) du sdk1.4.2 transformer cette requête en "SELECT alias.* from Matable alias"
J'ai un début :
// compilation de la regex avec le motif.
Pattern p = Pattern.compile("SELECT \\* FROM [A-Za-z]+ [A-Za-z]+");
// création du moteur associé à la regex sur la chaîne passée en paramètre.
Matcher m = p.matcher("SELECT * FROM Matable1 alias1, Matble2 alias2");
// remplacement de toutes les occurrences du motif
String s = m.replaceAll(???); // ou replaceFirst...
Comment remplir le ???
Je suis parti un moment donné sur les groupes de capture (utilisation des parenthèses pour former des groupes) mais je ne m'en sors pas.
frban
Messages postés1Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention18 mars 2005 18 mars 2005 à 16:59
Tu vas avoir un souci, la commande replaceAll() sert à remplacer toute les séquences trouvées par la chaîne fournie en argument.
Exemple :
Pattern p = Pattern.compile("abcd");
Matcher m = p.matcher("abcdefabcdgh");
String s = m.replaceAll("ZZZ");
tu obtiens ZZZefZZZgh
Donc avec ta formule, c'est tout le "select ... " que tu remplaces
Tu devrais essayer de passer en deux temps, d'abord idenfier la position du *
Pattern p0 = Pattern.compile("\\*");
Matcher m0 = p0.matcher("SELECT * FROM Matable1 alias1, Matble2 alias2");
if (m0.find()) {
int k =m.start();
//ici tu a obtenu la position du * dans la chaîne,
//réalise une seconde recherche, cette fois ci sur
//les éléments finaux,
//et injecte-les par replaceFirst()
}
Ceci dit, et à mon humble avis, tu gagneras ton temps avec des modestes StringTokenizer et StringBuffer ...