Was ist der beste Weg, um eine URL aus einer Textzeichenfolge zu extrahieren?

Obwohl meine Antwort nicht PHP-spezifisch ist, könnte sie hilfreich sein. Das Problem selbst ist ein Balanceakt zwischen dem RFC und der Art und Weise, wie Menschen schreiben. Einige Fallstricke:

  • Der RFC erlaubt “.” aber “http://example.com/.” ist wahrscheinlich nur eine Periode, die einen Satz beendet
  • Der RFC erlaubt “(” und “)”, aber “mein Text (http://example.com/)” sollte die Endung “)” nicht verknüpfen.
  • Das Ignorieren der obigen Eckfälle: Sprachen, in denen keine Leerzeichen zwischen Wörtern stehen, sind sehr problematisch (wie Japanisch, achten Sie auf: \S ).

Ich habe an diesem Problem bei Twitter gearbeitet, um das automatische Verknüpfen von Tweet-Text zu handhaben. Möglicherweise möchten Sie die Bibliotheken (https://github.com/twitter/twitt…, https://github.com/twitter/twitt…, https://github.com/twitter/twitt…) und die Geteilte Testdateien (https://github.com/twitter/twitt…) verwenden wir, um die verschiedenen Testfälle auszudrücken. Einige davon sind Twitter-spezifisch, da sie Benutzer und Hashtags unterstützen müssen, aber es sollte Ihnen eine Vorstellung von der Komplexität geben.

Dies ist der reguläre Ausdruck, den ich in der Taschenreferenz für reguläre Ausdrücke angegeben habe. Wie die meisten Regex ist es nicht perfekt. Es wurde entwickelt, um auf Kosten einiger falscher Positivmeldungen alles einzufangen. Es wird wahrscheinlich auch eine abschließende Periode erfassen, die in URLs im Text üblich ist.

/(https?):\/\/([0-9a-zA-Z‹[-\w‹*[0-9a-zA-Z‹\.)+[a-zA-Z‹{2,9 }) (: \ d {1,4})? ([- \ w \ / # ~:.? + = &% @ ~] *) /

Hier ist auch die URI-Kategorie in RegexLib. Es gibt eine lange Liste möglicher regulärer Ausdrücke sowie Beispiele für Übereinstimmungen und Nichtübereinstimmungen: http://regexlib.com/DisplayPatte…

Sie könnten John Grubers regulären Ausdruck ausprobieren. Ich weiß nicht, wie es mit den anderen hier vorgeschlagenen verglichen wird, aber er hat es allmählich verbessert. Seine neueste Version: http://daringfireball.net/2010/0…

More Interesting

Welcher Weg ist besser, um PHP zu lernen: Standalone oder mit Framework wie CodeIgniter?

Welche Tools verwendet ein PHP-Entwickler, um schnelle, intelligente und sichere Codes zu erstellen?

Welches ist die beste SEO-freundliche Plattform - PHP oder .NET?

Was sind die Einschränkungen der PHP-Sprache?

Was ist die beste Vorgehensweise für die Versionskontrolle in PHP / MySQL-Projekten mit Git?

Was ist derzeit die am häufigsten nachgefragte Sprache für Webserver unter Java, C #, PHP und Node?

Was sind die möglichen Testfragen, die einem PHP-Webentwickler während eines Interviews gestellt werden?

Die Liste der PHP-basierten CMS ist lang. Lohnt es sich, mein eigenes CMS (Closed Source) zu schreiben und es nur für meine Projekte und meine Kunden zu verwenden, indem es schnell und einfach zu bedienen ist?

Was sind einige der Vorteile von PHP gegenüber anderen Programmiersprachen?

Was ist HipHop für PHP?

Was sind die Vorteile des Codierens in Python gegenüber PHP und umgekehrt?

Gibt es einen bedeutenden Unterschied zwischen dem Zugriff auf eine API (z. B. Twitter) mit einer serverseitigen Sprache wie PHP oder einer clientseitigen Sprache mit Javascript?

Wie lange würde es dauern, um ein leitender Programmierer in PHP zu werden? Genauer gesagt in der objektorientierten Programmierung.

Wie kann ein PHP-Entwickler mit 4,5 Jahren Erfahrung von PHP zu Python / Android wechseln?

Aus Java, .NET und PHP, was wird am meisten bevorzugt, um eine Website zu entwickeln?