0
Julia, 62 59 bytes
f(s,p,r)=(i=0;try s[[i=findnext(s,c,i+1)for c=p]']=r end;s)
I/O is in form of character arrays.
Verification
julia> f(s,p,r)=(i=0;try s[[i=findnext(s,c,i+1)for c=p]']=r end;s)
f (generic function with 1 method)
julia> F(s,p,r)=join(f([s...],[p...],[r...])) # string/char a...