probablement un cas de cuisson une expression régulière appropriée avec des captures.
Celui-ci semble fonctionner pour l'exemple que vous donnez.
<property name="prefix" value="this " />
<replaceregexp flags="s" match="^(${prefix})?(.*)" replace="${prefix}\2">
<fileset dir="files" />
</replaceregexp>
- Les fichiers sont spécifiés à l'aide d'un ensemble de fichiers - ici tous les fichiers du répertoire
files
.
- Le préfixe que nous voulons éventuellement ajouter est
this
, qui est stocké dans une propriété, car nous devons le mentionner à deux endroits.
- Le paramètre
flags="s"
garantit que nous traitons le fichier comme une seule chaîne à des fins de correspondance (plutôt que de correspondance à chaque ligne).
- L'expression régulière recherche la chaîne de préfixe dans le fichier et la stocke dans la capture
\1
- qui est ignorée.
- Le reste de la chaîne est en capture
\2
.
- Remplacez par la chaîne de préfixe, suivie de la capture
\2
.
Vous pourriez penser comme toujours ajouter le préfixe, mais après avoir pris le préfixe loin si elle est déjà là ... sauf que la tâche ne replaceregexp
pas écrire le fichier, sauf si diffère de l'existant .
Wow, solution très élégante, merci! J'ai trouvé quelque chose de similaire en regardant autour et regarder en avant, mais c'est plus simple! – Robert
Avez-vous une idée pour échapper des caractères spéciaux regex dans la valeur de la propriété prefix? – Robert