Da hab ich aber dann immer nur Teile, wie bekomm ich denn dann wieder alles vor, in, und nach den Klammern?
Das brauchst Du nicht, weil sich die Ersetzung nur auf die gefunden Teile beschränkt.
Was soll Dein Code
=> $string = "Dies ist ein 'Test'-String";
gesucht soll dann nach dem reg. Ausdruck "!'(.*)'!U" werden, ersetzt solln sie durch '"'.[vorheriges (.*)].'"' werden.
bewirken? Eine Suche nach .*? findet in Deinem Beispiel alles. Ist das wirklich so gedacht? Vermutlich nicht. Wenn doch, reichen einfache Stringoperationen.