Zur Navigation

Suche Regex für URL-Replacement

1 Jürgen.bcx

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

2 Jörg Kruse

Probier das mal so:

$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

3 Jürgen.bcx

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

09.08.2009 20:44

4 Jörg Kruse

"\\3" bezieht sich auf den dritten geklammerten Ausdruck:

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

5 Jürgen.bcx

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!

09.08.2009 22:19

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]