Auf Deine Art und Weise nur, in dem Du Deine Suche mit Hilfe einer Schleife immer wieder durchlaufen lässt, bis er keine Links mehr findet.
Du solltest Dir aber mal http://www.dclp-faq.de/ch/ch-regexp.html anschauen, da sind einige Beispiele in Deine Richtung, mit Regulären Ausdrücken macht das mehr Sinn, geht schneller und ist weniger Code.
Müsste dann in etwa so aussehen:
$replace = preg_replace("=[URLS](.*)[\\/URLS]=is","<a href='\\\\1' target='_blank'>\\\\1</a>",$replace);
[/php]
Sorry, nicht getestet und garantiert auch nicht richtig (schon lange nicht mehr gemacht), aber besser als Deine Lösung