Perte d'un caractere suite à un replaceAll sur un Matcher

Résolu
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 25 nov. 2011 à 16:22
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 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}");
}

4 réponses

cs_laurent1024 Messages postés 987 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 30 août 2012 24
25 nov. 2011 à 17:24
Bonjour.
Essaye avec ce pattern :
Pattern p = Pattern.compile("%([^%]+?)%[^%]??");
3
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
25 nov. 2011 à 16:27
Si vous répondez, je ne pourrai pas vous répondre avant lundi, mais je le ferai, soyez en certain
0
benmor Messages postés 49 Date d'inscription jeudi 14 avril 2005 Statut Membre Dernière intervention 27 novembre 2011 9
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.

Celle-ci devrait fonctionner:
regexp : "([^%]|^)%([^%]+?)%([^%]|$)"
remplacement : "$1\\${$2}$3"

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}".

Benoit.
0
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 367
28 nov. 2011 à 08:26
Super ca marche !

Merci
0