PHP / RegEx - Konvertieren Sie URLs in Links, indem Sie .com / .net / .org / .edu etc. Erkennen

Ich weiß, dass es viele Fragen gab, die nach Hilfe beim Konvertieren von URLs in anklickbare Links in Zeichenfolgen fragten, aber ich habe nicht ganz das gefunden, wonach ich suche.

Ich möchte in der Lage sein, mit den folgenden Beispielen übereinzustimmen und sie in anklickbare Links umzuwandeln:

<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>

Ich möchte keine zufälligen.Materialien.trennen.mit.Perioden.

BEARBEITEN: Bitte beachten Sie, dass diese URLs in größeren Textabschnitten enthalten sein müssen. Zum Beispiel möchte ich "domain.net" in "Hallo! Schauen Sie sich domain.net an!"

Ich denke, dass dies mit einem regulären Ausdruck erreicht werden könnte, der bestimmen kann, ob die übereinstimmende URL .com, .net, .org oder .edu enthält, gefolgt von einem Schrägstrich oder einem Leerzeichen. Abgesehen von einem Benutzertipp kann ich mir keinen anderen Fall vorstellen, in dem eine gültige URL eine solche hat, auf die etwas anderes folgt.

Mir ist klar, dass es viele gültige Domain-Endungen gibt, aber ich muss sie nicht alle unterstützen. Ich kann einfach auswählen, was mit etwas wie (com | net | org | edu) in der Regex unterstützt werden soll. Leider bin ich noch nicht in der Lage, Regex richtig zu implementieren.

Ich hoffe, jemand kann mir helfen, einen regulären Ausdruck zu finden (zur Verwendung mit preg_replace von PHP), der mit URLs übereinstimmt, die auf nahezu jedem Text basieren, der durch einen oder mehrere Punkte verbunden ist und entweder mit einer der angegebenen Erweiterungen endet, gefolgt von einem Leerzeichen ODER einer solchen der angegebenen Erweiterungen, gefolgt von einem Schrägstrich und möglicherweise Ordnern.

Ich habe mehrere Suchen durchgeführt und bisher nicht gefunden, wonach ich suche. Wenn es bereits einen SO-Beitrag gibt, der dies beantwortet, entschuldige ich mich.

Danke im Voraus.

--- EDIT 3 ---

Nach Tagen des Versuchs und der Hilfe von SO funktioniert Folgendes:

<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>

Dies ist eine modifizierte Version von Anubhavas Code unten und bisher scheint sie genau das zu tun, was ich will. Vielen Dank!

Antworten auf die Frage(3)

Ihre Antwort auf die Frage