[PHP] Pobranie danych z URL - wyrażenia regularne

Hej!

Chcę pobrać z adresu URL 3 dane: domena, domena najwyższego poziomu i dane po domenie najwyżeszego poziomu (nazwa pliku np.). Mam narazie tyle:

$sUrl="http://google.pl/webhp?hl=pl";

    $pPattern = '#http://(.*?)\.(.*?)/(.*?)#si';

    preg_match($pPattern,$sUrl,$aData);

    print_r $aData;

I to zwraca mi domene i domene najwyższego poziomu. A jak pobrać to po domenie?

Proszę o pomoc i pozdrawiam

Do wyciągnięcia tego co jest po znaku ‘?’ możesz użyć czegoś takiego:

$sUrl="http://google.pl/webhp?hl=pl&num=30"; 

$b=explode('?', $sUrl);

print_r($b); // Array ( [0] => http://google.pl/webhp [1] => hl=pl&num=30 ) 

parse_str($b[1], $output);

print_r($output); // Array ( [hl] => pl [num] => 30 )

A co do całości to:

$sUrl="http://google.pl/webhp?hl=pl&num=30";

$pPattern = '/http:\/\/(.*)\.(.*)\/(.*)\?(.*)/si';

preg_match_all($pPattern,$sUrl,$aData,PREG_SET_ORDER);

print_r ($aData); 

// Array ( [0] => Array ( [0] => http://google.pl/webhp?hl=pl&num=30 [1] => google [2] => pl [3] => webhp [4] => hl=pl&num=30 ) )

Ok dzięki, działa :]

Dodane 11.07.2009 (So) 19:54

Kurcze, jednak nie wszystko działa :confused:

Powiedzmy że mam taki adres:

$sUrl=“http://google.pl/buu/aaa”;

Skrypt mi zwróci w $aData[2]:

pl/buu/

a chcę żeby mi ucieło do pierwszego /

Pozdrawiam i proszę o pomoc

Jedyne co udało mi się wykombinować to

$sUrl="http://google.com.pl/buu/aaa?abc=33&ffs=44";

$pPattern = '/(http:\/\/)([a-z0-9-_.]*)\/([a-z0-9,-_\/]*)\?(.*)/si';

i wychodzi

Array ( [0] => Array ( [0] => http://google.com.pl/buu/aaa?abc=33&ffs=44 [1] => http:// [2] => google.com.pl [3] => buu/aaa [4] => abc=33&ffs=44 ) )

póżniej np

$arr = array_merge(explode('.', $aData[0][2]),explode('/', $aData[0][3]) );

a dla końcówki parse_str.

Jeśli Ci się uda z samym wyr.reg daj znać.

SyntaxError , a nie wystarczy Ci http://pl.php.net/manual/pl/function.parse-url.php ?