Domain auslesen mit RegEx

L

LogicalLimit

Eroberer
Heyho!
Ich bekomms irgendwie nicht hin... :(
Habe einige Strings in denen URLs stehen. Von diesen Strings möchte ich nur die Domain haben! Zur Zeit mache ich das so:
PHP:
$HostHelp = split("http:\/\/.*/", $URL);
      if($Horst[1]<> "")
      {
          $Host = substr($URL, 0, strpos($URL, $HorstHelp[1]));
      }
      else
      {
          $Host = "http://localhost/";
      }
1) Wenn jemand ne elegantere Lösung weiß, immer her damit :D
ansonsten 2) als Beispiel die domain http://domain.de wird nach dem Suchmuster oben nicht erkannt und als domain wird der localhost angegeben.
Anderes Beispiel: http://www.seite.de/info/index.htm
Da wird bis zum letzten / eingelesen, also http://www.seite.de/info/!

Kann mir jemand helfen den RegEx so zu schreiben dass es so funktioniert, wie ich mir das wünsche? :D
Wär echt nett...

Gruß, LogicalLimit
 
Eine Möglichkeit wäre:

Code:
($Host) = $URL=~m!(http://.*?)(/|$)!;

Gruss, Xanti
 
Hi! Danke schonmal für die Antwort, aber da kommt leider n Fehler :(

Parse error: syntax error, unexpected '=' in /generate.php on line 31

Gruß, LogicalLimit
 
Hmm, also gehts um php. Probier mal

Code:
$URL=~m!(http://.*?)(/|$)!; $Host=$1;
 
Zuletzt bearbeitet:
Oh, sorry! Ganz vergessen dazu zu schreiben :D
Ja, es ist PHP und die beiden neuen codes funktionieren auch nicht :(

Parse error: syntax error, unexpected '!' in /generate.php on line 32

Habe auch ehrlich gesagt noch nie etwas von diesen ~s! und ~m! für PHP gelesen... Was sind das für Befehle?

Gruß, LogicalLimit
 
m/ und s/ sind matchen und ersetzen in Perl (den zweiten Befehl hab ich wieder gelöscht, da er nicht richtig funktionierte). Dabei ist das Zeichen nach m oder s frei wählbar, zumindest in Perl. Da es in php wahrscheinlich nicht so ist, probier mal:

Code:
$URL=~/(http:\/\/.*?)(\/|$)/; $Host=$1;

Wenn das nicht funktioniert, muss jemand mit php-Kenntnissen einspringen, denn die hab ich nicht :D

Zumindest den regulären Ausdruck könntest Du verwenden.
 
Hi!
Hat leider auch nicht geklappt :D
Aber dennoch vielen Dank für deine Bemühungen! Wenn ich den Ausdruck benutze meldet PHP immer etwas von einem ungültigen Regulären Ausdruck...
Warning: split() [function.split]: REG_BADRPT in /generate.php on line 21
Habe allerdings bei meinem Ausdruck noch n Fehler gefunden, aber auch dessen Behebung hat nicht den gewünschten Erfolg gebracht :(

Nochmals vielen Dank und Gruß,
LogicalLimit
 
Hallo

Ja php kennt leider nicht so einen lässigen sed-ähnlichen Umgang mit regulären Ausdrücken wie perl.
Deshalb suchst du eventuell nach eingebauten php-Funktionen wie preg_replace oder ereg_replace.
Nun bin ich auch jemand, der seine WEB oder Shell Probleme mit Perl statt php löst, deshalb nur diesen Tipp ohne direkte Lösung.

<?php
$zeichenkette = 'http://www.domain.de/path/';
$suchmuster = '/http:\/\/(w*\.([^/]+)\//i';
$ersetzung = '$1';
echo preg_replace($suchmuster, $ersetzung, $zeichenkette);
?>
Ungetestet müsste dabei die Domain ohne www herauskommen.
Allerdings liefert preg_replace den gesamten String zurück, wenn nicht gematcht wurde.
Dafür gibt es IMHO in php ereg bzw eregi.

<?php
if (eregi("^http:\/\/(w*)\.([^/]+)\/", $URL, $referenc)) {
$hoatname=""$referenc[2]";
} else {
echo "kein Regexp hat gematcht";
}
?>

Ungetestet, da hier kein PHP läuft und ich PHP nur sehr rudimentär behandle weil ich es nicht brauche.
Die von mir verwendete Regexp-syntax ist perlkompatibel, ob es deine PHP-Version so kennt weiss ich nicht.
Hoffe es hilft trotzdem weiter, wenn du dein PHP-Handbuch zu Hilfe nimmst.


Gruß Wolfgang
 
Vielen Dank!
Hat allerdings nicht so ganz geklappt. Zumal die Seiten nicht immer ein www. beinhalten.
Aber ich habe jetzt die Lösung gefunden: "http:\/\/[^\/]*\/".
Damit geht es genau so wie ich es mir vorgestellt habe :)
Vielen Dank nochmal an alle beteiligten!

Gruß,
LogicalLimit
 

Ähnliche Themen

Samba 4.1.11 Domänen anbindung funktioniert nicht !!!

Ubuntu 14.4: Samba v3 => v4, Kein Zugriff

Samba 4 Gast Zugang unter Ubuntu funktioniert nicht

Aura for PHP Konfigurationsproblem

dovecot und postfix Konfiguration Problem

Zurück
Oben