def target = 'How now brown ${animal}. The ${role} has oddly-shaped ${bodyPart}.'
println target.replaceAll(/\$\{([^{}]*)\}/, '?')
def lst = new ArrayList<>();
def m = target =~ /\$\{([^{}]*)\}/
(0..<m.count).each { lst.add(m[it][1]) }
println lst
ZGVmIHRhcmdldCA9ICdIb3cgbm93IGJyb3duICR7YW5pbWFsfS4gVGhlICR7cm9sZX0gaGFzIG9kZGx5LXNoYXBlZCAke2JvZHlQYXJ0fS4nCnByaW50bG4gdGFyZ2V0LnJlcGxhY2VBbGwoL1wkXHsoW157fV0qKVx9LywgJz8nKQoKZGVmIGxzdCA9IG5ldyBBcnJheUxpc3Q8PigpOwpkZWYgbSA9IHRhcmdldCA9fiAvXCRceyhbXnt9XSopXH0vCigwLi48bS5jb3VudCkuZWFjaCB7IGxzdC5hZGQobVtpdF1bMV0pIH0KcHJpbnRsbiBsc3QKCgoK