cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020
-
25 nov. 2011 à 16:22
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 juillet 2020
-
28 nov. 2011 à 08:26
Bonjour,
Je code actuelement un utilitaire qui permettra de remplacer des varaibles écrites en commandes dos par des variables en bash.
En gros, il faut sur une ligne remplacer tous les %variable% par $(variable). Le code fonctionne sauf que je perd le caractère qui précède ma variable : par exemple System.out.println(TraducteurVariables.getInstance().traduire("abc%var%")); me retourne ab${var} au lieu de abc${var}
Je ne comprend pas très bien mon erreur. Je vous laisse mon code, si vous avez une idée...
@Override
public String traduire(String texteDos) {
Pattern p = Pattern.compile("[^%]??%([^%]+?)%[^%]??");
Matcher m = p.matcher(texteDos);
return m.replaceAll("\\${$1}");
}
benmor
Messages postés49Date d'inscriptionjeudi 14 avril 2005StatutMembreDernière intervention27 novembre 20119 27 nov. 2011 à 21:38
Bonjour
Si j'ai bien compris, tu souhaiterais ne pas faire de remplacement dans les chaînes "abc%%def%" ou "abc%def%%". Dans ce cas, ton expression régulière est fausse.
Si au contraire elles doivent l'être, pas besoins de préfixe, ni de suffixe:
regexp : "%([^%]+?)%"
remplacement : "\\${$1}"
Ton erreur:
"[^%]??" est toujours vrai, puisqu'une chaîne vide la vérifie, donc dans "%%abc%", "%abc%" vérifie ton rexgexp et le remplacement donnera "%${abc}". Et s'il a un caractère autre que '%', il est remplacé avec le reste, dans "abc%def%", "c%def%" vérifie ton rexgexp et le remplacement donne "ab${def}".