regex URL => Subdomain und SLD

rernanded

Erfahrenes Mitglied
Hallo

habe eine regex die mir aus einer URL die Subdomain und Second Level Domain filtert.

Wenn es keine Subdomain gibt funktioniert die regex leider nicht, was muß geändert werden?
MONI

PHP:
$str = $_POST["url"];
$pattern = "/^(?:https?:\/\/)(?:w{3}\.)?.*?([^.\r\n\/]+\.)([^.\r\n\/]+\.[^.\r\n\/]{2,20}(?:\.[^.\r\n\/]{2,20})?).*$/";
preg_match($pattern, $str, $matches);
//echo "<pre>";
//print_r($matches);
//echo "</pre>";
foreach ($matches as $match){
    echo $match."<br />";
}
 

Andreas-B

Mitglied
Meinst du mit nicht funktionieren, die Tatsache, dass wenn es keine Subdomain gibt, "www" als subdomain gefunden wird?
(strukturell gesehen ist das ja auch eine Subdomain)

ansonsten funktioniert alles bei mir:
1616698953013.png
 

rernanded

Erfahrenes Mitglied
Hi
das regex erzeugt ein array mit drei Werten.
Die Ausgangsurl.
Die Subdomain.
Die SecondLeveldomain.
Fehlt in der Ausgangsurls die(eine) Subdomain gibt es keinerlei Ausgabe.
Ansonsten wird jede Subdomain ausgegeben, egal ob w, ww, www oder furzegalschnurzpiepe
MONI
 

Andreas-B

Mitglied
Ja, jetzt versteh' ich.

versuch mal das:
PHP:
"/^(?:https?:\/\/)(?:w{3}\.)?.*?([^.\r\n\/]+\.)?([^.\r\n\/]+\.[^.\r\n\/]{2,20}(?:\.[^.\r\n\/]{2,20})?).*$/"

edit: ich sehe gerade, dass das auch noch nicht passt.
 
Zuletzt bearbeitet:

Andreas-B

Mitglied
Ich denke so geht's:
PHP:
"^(?:https?:\/\/)([^.\r\n\/]+\.)*([^.\r\n\/]+\.[^.\r\n\/]{2,20}(?:\.[^.\r\n\/]{2,20})?).*$"

was soll denn passieren, wenn es mehrere subdomains gibt?