PHP / RegEx - Konwertuj adresy URL na łącza, wykrywając .com / .net / .org / .edu itp

Wiem, że było wiele pytań z prośbą o pomoc w konwersji adresów URL do klikalnych linków w łańcuchach, ale nie znalazłem całkiem tego, czego szukam.

Chcę być w stanie dopasować dowolny z poniższych przykładów i zamienić je w klikalne linki:

<code>http://www.domain.com
https://www.domain.net
http://subdomain.domain.org
www.domain.com/folder
subdomain.domain.net
subdomain.domain.edu/folder/subfolder
domain.net
domain.com/folder
</code>

Nie chcę dopasowywać random.stuff.separated.with.periods.

EDYTUJ: Pamiętaj, że te adresy URL muszą znajdować się w większych ciągach „normalnego” tekstu. Na przykład chcę dopasować „domain.net” w „Hello! Come check out domain.net!”.

Myślę, że można to osiągnąć za pomocą wyrażenia regularnego, które może określić, czy pasujący adres URL zawiera .com, .net, .org lub .edu, po którym następuje ukośnik lub białe znaki. Inaczej niż literówka użytkownika, nie wyobrażam sobie żadnego innego przypadku, w którym poprawny adres URL miałby jeden z tych, po których następuje cokolwiek innego.

Zdaję sobie sprawę, że istnieje wiele poprawnych rozszerzeń domen, ale nie muszę ich obsługiwać. Mogę po prostu zdecydować, która obsługa ma coś takiego (com | net | org | edu) w wyrażeniu regularnym. Niestety, nie mam wystarczających umiejętności w zakresie regex, aby wiedzieć, jak prawidłowo to wdrożyć.

Mam nadzieję, że ktoś może mi pomóc znaleźć wyrażenie regularne (do użycia z preg_replace PHP), które może dopasować adresy URL oparte na prawie każdym tekście połączonym przez jedną lub więcej kropek i kończącym się jednym z określonych rozszerzeń, po którym następuje białe znaki LUB zawierające jeden określonych rozszerzeń, po których następuje ukośnik i ewentualnie foldery.

Zrobiłem kilka wyszukiwań i jak dotąd nie znalazłem tego, czego szukam. Jeśli już istnieje post SO, który na to odpowiada, przepraszam.

Z góry dziękuję.

--- EDYCJA 3 ---

Po dniach prób i błędów i pomocy SO, oto co działa:

<code>preg_replace_callback('#(\s|^)((https?://)?(\w|-)+(\.(\w+|-)*)+(?<=\.net|org|edu|com|cc|br|jp|dk|gs|de)(\:[0-9]+)?(?:/[^\s]*)?)(?=\s|\b)#is',
                create_function('$m', 'if (!preg_match("#^(https?://)#", $m[2]))
                return $m[1]."<a href=\"http://".$m[2]."\">".$m[2]."</a>"; else return $m[1]."<a href=\"".$m[2]."\">".$m[2]."</a>";'),
                $event_desc);
</code>

To jest zmodyfikowana wersja kodu anubhava poniżej i jak dotąd wydaje się robić dokładnie to, czego chcę. Dzięki!

questionAnswers(3)

yourAnswerToTheQuestion