OK, let me replay what I understnad and then give you a pattern that does that.
You want to find a specific character sequence (in your examples you have used "&", "re" and "ä") as long as that character is between "<string>" and "</string>" tags that are themselves between "<member><name>" and "</member>" tags.
I think you want to perform some form of string replacement on the located character sequences and so you only want to locate the target strings themselves and not the tags on either side.
If that is so, then try:
(?<=<member><name>.*?<string>[^<>]*?)ä(?=[^<>]*?</string>.*?</member>)
This locates the "ä" character and checks that it is preceded by the "<member><name>" character sequence, some random characters (including none) and the "<string>" tag, and then any other characters except "<" and ">" which would indicate another tag between the "<string>" and the target character(s). On the other side of the target character(s) it performs a similar check to make sure that there follows some random characters that do not form a tag, the "</string>" tags, more characters and then the "</member>" tag.
Note that the '.*?' sequences work in the example you have provided but I can imagine strings that may confuse this pattern into identifying the target characters incorrectly. Also, this pattern checks both the "before" and "after" conditions, just to be sure.
You say that you want to make this flexible in terms of being able to change the various character sequences that are used within various parts of the pattern. Using this as the basis, I hope that you can see where you can make the necessary substitutions to build the pattern string in the way you need.
Susan