Es ist generell sehr schwierig, so was automatisch festzustellen, weil es einfach zu viele Möglichkeiten gibt.
Z.b. würdest du "forum.de.selfhtml.org" ohne ein http:// niemals als Link interpretieren können, da du nie sicher sein kannst, dass es sich bei dem Geschriebenen auch wirklich um eine URL handelt.
Das Thema geht übrigens schon sehr in Richtung AI, und läßt sich mit solch simplen Regular Expressions wie PCRE wohl kaum mehr machen.
Deshalb würde ich mir an deiner Stelle keine grauen Haare wegen einer "perfekten Erkennung" wachsen lassen und stattdessen lieber einfach ein RegExp wie das hier nutzen:
/((http://|ftp://|www.|ftp.)\S+?)\s/i
Alles ab dem Anfangskeywort bis zum nächsten Whitespace (Leerzeichen, Zeilenumbruch, etc) wird als URL-String interpretiert.
Übrigens enthält hier die 1. gematchte Gruppe den vollständigen URL-String, d.h. du kannst ihn später einfach abfragen.