Du behöver inte använda regexp för det. Det är onödigt resurskrävande i just det här fallet. Pröva
$url = "www.wn.se";
if( strpos( $url, "http://" ) === 0 ) {
// Strängen börjar på
http://, gör inget
}
else
{
$url = "http://" . $url;
}
Kanske kan vara värt att lägga en trim($url); för att få bort eventuella mellanrum ibörjan.
Edit: Visst kan if-satsen göras kortare men ibland kan det vara snyggt med tydlighet
Edit2: Läste inte ditt inlägg ordentligt. Mitt i en text var det alltså. Är lite osäker på den här typen av regexp, lookbehinds osv, men prova något i stil med:
$text = preg_replace("#(?<=http://)www.#s", "http://www.", $text);