Ich verwende eine PHP-Funktion, um URLs in einer Textzeichenfolge automatisch in einen tatsächlichen Link umzuwandeln, auf den die Leute klicken können. Es scheint in den meisten Fällen zu funktionieren, jedoch habe ich einige Fälle gefunden, in denen dies nicht der Fall ist.
Ich verstehe die regulären Ausdrücke überhaupt nicht, also hoffte ich, dass mir jemand dabei helfen könnte.
Hier ist das Muster, das ich momentan verwende:
%Vor%Aber hier sind einige Links, die ich gefunden habe, dass dieses Muster nicht übereinstimmt:
Weiß jemand, wie ich dieses Regex-Muster auch an diese Fälle anpassen kann?
BEARBEITEN - Es sollte auch URLs entsprechen, die am Ende möglicherweise einen Punkt haben. Wenn eine URL der letzte Teil eines Satzes ist, kann am Ende ein Punkt liegen, der nicht in den tatsächlichen Link aufgenommen werden sollte. Derzeit berücksichtigt dieses Muster auch dies.
EDIT 2 - Ich verwende das Muster wie folgt:
%Vor%Die folgende Regex wird URLs entsprechen:
http://
oder https://
www.example.com
, help.example.com
, usw.) www.example.com.gu
, www.example.com.au.museum
, etc) Das /i
am Ende bewirkt, dass es unempfindlich ist.
/((http|https):\/\/)?([a-z0-9-]+\.)?[a-z0-9-]+(\.[a-z]{2,6}){1,3}(\/[a-z0-9.,_\/~#&=;%+?-]*)?/is
Bearbeiten: Dies entspricht keinen "hängenden" Punkten am Ende (wie zum Beispiel dem Ende eines Satzes), da es nicht Teil der URL ist und nicht in% enthalten sein sollte. co_de% Attribut Ihres Links.
Bearbeiten 2: Ändere in deinem ersten href
preg_replace()
in . Dadurch wird die gesamte übereinstimmende Zeichenfolge anstelle eines einzelnen Teils eingefügt.
Bearbeiten 3: ( Update 2 ) Hier ist eine bessere Möglichkeit, nach einem
oder http://
https://
am Anfang zu suchen: