Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Regex do preg_match - odróżnienie "uk" od "co.uk"
warder
post
Post #1





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 12.12.2010

Ostrzeżenie: (0%)
-----


Cześć

próbuje wyciągnąć nazwę domeny, jednak mam problem z odróżnieniem np. "uk" od "co.uk"

W jaki sposób mogę ustawić, by brany był pod uwagę największy znaleziony string, gdy robię normalnego preg_matcha i używam do tego (co.uk|uk) to zawsze wybiera uk, nie ważne czy jest pierwsze, czy drugie na liście...

Jest na to jakiś sposób?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
warder
post
Post #2





Grupa: Zarejestrowani
Postów: 27
Pomógł: 0
Dołączył: 12.12.2010

Ostrzeżenie: (0%)
-----


Próbowałem już tak, jednak nie potrafię wyciągnąć poprawnie całego rozszerzenia gdy występuje co.uk


Przykład dla domeny z samym .uk:
Kod
<?php
function parseUrl($url) {
    $r  = "^(?:(?<start>\w+)://)?";
    $r .= "(?<host>(?:(?P<subdomena>[\w\.]+)\.)?" . "(?<domena>\w+)\.(?<extension>(co\.)?uk))";
    $r .= "(?::(?<port>\d+))?";
    $r .= "(?<path>[\w/]*/(?<file>\w+(?:\.\w+)?)?)?";
    $r .= "(?:\?(?<arg>[\w=&]+))?";
    $r .= "(?:#(?<anchor>\w+))?";
    $r = "!$r!";                                                // Delimiters

    preg_match ( $r, $url, $out );

    return $out;
}
echo "<pre>";
print_r ( parseUrl ( 'https://www.test.domeny.uk' ) );
echo "</pre>";
?>


można sprawdzić tutaj: http://sandbox.onlinephpfunctions.com/code...6b541a55b2a07ad - działa ok


ale.. przy co.uk już się sypie: http://sandbox.onlinephpfunctions.com/code...01082c63696331e

Można jakoś ustawic, by wybierał dłuższego stringa jeśli taki istnieje?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 05:04