Hallo,
preg_match_all("/\b%(\w+)%\b/", $string, $ausgabe);
\b%
eine Wort-Grenze gefolgt von einem % - für \b muß, da % kein Wort-Zeichen ist, das Zeichen vor dem \b% ein Wort-Zeichen sein.
Vor %test4% steht aber ein Leerzeichen, kein Word-Character. ==> \b matcht nicht.
Analog für das %\b - auch das ist keine Wort-Grenze, da sowohl das % als auch das folgende Leerzeichen keine Wortzeichen sind.
irgendwie verwirrst du mich mit deinen 2 Sätzen ;-)
ps. ohne \b funktioniert es zwar, findet aber bissel zu viel
mfg
Twilo