Regelmäßiger Ausdruck automatisch verknüpfen

8

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:

  • www.oakvillettransit.ca - Nicht sicher, aber angenommen, dass es wegen des zweibuchstabigen Ländercodes nicht übereinstimmt
  • www.grt.ca - Ein weiterer mit der .ca-Domain, der nicht funktioniert
  • Mehrere andere .ca Adressen
  • freepublictransports.com - Adressen ohne www. oder http: // vor ihnen. Ich möchte, dass das auch funktioniert.
  • www.222tips.com - Angenommen, es stimmt nicht mit den Zahlen am Anfang der Adresse überein.

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%     
Sherwin Flight 03.06.2012, 23:12
quelle

2 Antworten

5

Die folgende Regex wird URLs entsprechen:

  • (Optional) Mit http:// oder https://
  • (Optional) Mit einer Subdomain ( www.example.com , help.example.com , usw.)
  • Mit 1-3 Domainendungen, die jeweils 2-6 Zeichen lang sein müssen ( www.example.com.gu , www.example.com.au.museum , etc)
  • (Optional) Mit einem Schrägstrich am Ende
  • (Optional) Mit gültigen Zeichen nach dem Schrägstrich

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 http:// oder https:// am Anfang zu suchen:

%Vor%     
Litty 03.06.2012, 23:26
quelle
3

Ich hatte Probleme mit allen obigen Beispielen.

Hier ist einer, der funktioniert:

%Vor%     
boksiora 03.10.2013 12:05
quelle

Tags und Links