more general replace() implementation