wie gehe ich mit preg_replace vor?
Das würde ein unfassbar komplexer Ausdruck werden, falls es überhaupt möglich ist.
Ich würde mit den DOM-Methoden nach Text-Knoten suchen und dann ihren Wert ersetzen.
Vorallem stellt sich mir aber die Frage nach dem Sinn, alle Leerzeichen durch Non-Breaking-Spaces ersetzen zu wollen. Reichen die CSS-Möglichkeiten um ungewollte Umbrüche zu verhindern in deinem Fall nicht aus?