Suche Regex für URL-Replacement
Moin,
ich habe letztens in einem Forum gesehen, dass dort links einfach auf den Domainnamen + .tld im Text ersetzt wurden, sodass z.B. aus
"google.de" geworden ist und der vollständige Link nur im href-Attribut zu finden war. Funktionieren soll das Ganze auch mit beliebig vielen Subdomains, sodass z.B. eine Ausgabe wie "data.maps.google.de". entsteht.
Die URL's auf die 2nd- und .Topleveldomain umschreiben geht schon ganz gut, nur das mit den Subs bekomme ich nicht hin.
Über einen Lösungsansatz würde ich mich freuen.
ich habe letztens in einem Forum gesehen, dass dort links einfach auf den Domainnamen + .tld im Text ersetzt wurden, sodass z.B. aus
http://www.google.de/search?hl=de&q=joerg+kruse+forum&btnG=Google-Suche&meta=&aq=f&oq=
"google.de" geworden ist und der vollständige Link nur im href-Attribut zu finden war. Funktionieren soll das Ganze auch mit beliebig vielen Subdomains, sodass z.B. eine Ausgabe wie "data.maps.google.de". entsteht.
Die URL's auf die 2nd- und .Topleveldomain umschreiben geht schon ganz gut, nur das mit den Subs bekomme ich nicht hin.
Über einen Lösungsansatz würde ich mich freuen.
08.08.2009 12:09 | geändert: 08.08.2009 12:09
Probier das mal so:
Sollte mit Subdomains und auch mit IP-Adressen funktionieren
$pattern = "/^((http|https):\/\/)(([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((\/|\?)[a-zA-Z0-9~#%&'_\+=:\?\.-]*)$/";
$host = preg_replace($pattern, '\\3', $url);
Sollte mit Subdomains und auch mit IP-Adressen funktionieren
08.08.2009 12:29
Vielen Dank Jörg,
ein erster Test zeigt, dass es so funktioniert, wie es soll. Ich verstehe nur die Backreference "\\3" nicht, könntest du das nochmal erläutern?
Danke
ein erster Test zeigt, dass es so funktioniert, wie es soll. Ich verstehe nur die Backreference "\\3" nicht, könntest du das nochmal erläutern?
Danke
09.08.2009 20:44
"\\3" bezieht sich auf den dritten geklammerten Ausdruck:
Dieser ist ein Pattern für eine Domain oder eine IP-Adresse
(([a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))
Dieser ist ein Pattern für eine Domain oder eine IP-Adresse
09.08.2009 21:20
Ja ist mir dann auch klar geworden, habe vor lauter Klammern den regex schon nicht mehr gesehen ;)
Ich habe ihn aber noch dahingehend modifiziert, als dass Links auch im Textfluss erkannt werden (also ^ und $ weggelassen), der Slash bzw. Query direkt nach der Domain optional ist, ein Slash auch nach der TLD vorkommen darf und per i-Modifier nicht mehr zwischen Groß- und Kleinschreibung unterschieden wird (außerdem habe ich noch ftp und ftps hinzugefügt).
Viele Grüße und nochmals danke!
Ich habe ihn aber noch dahingehend modifiziert, als dass Links auch im Textfluss erkannt werden (also ^ und $ weggelassen), der Slash bzw. Query direkt nach der Domain optional ist, ein Slash auch nach der TLD vorkommen darf und per i-Modifier nicht mehr zwischen Groß- und Kleinschreibung unterschieden wird (außerdem habe ich noch ftp und ftps hinzugefügt).
Viele Grüße und nochmals danke!
09.08.2009 22:19
Beitrag schreiben (als Gast)
Beim Verfassen des Beitrages bitte die Forenregeln beachten.
