Как я могу сопоставить доменную часть URL в PHP? - PullRequest
0 голосов
/ 11 октября 2009

Я так плохо разбираюсь в регулярных выражениях, но я пытаюсь получить some/path/image.jpg из http://somepage.com/some/...etc и пробую этот метод:

function removeDomain($string) {

    return preg_replace("/http:\/\/.*\//", "", $string);

}

Это не работает - насколько я могу судить, это просто возвращает пустую строку. Как мне написать это регулярное выражение?

Ответы [ 4 ]

5 голосов
/ 11 октября 2009

вы должны использовать parse_url

2 голосов
/ 11 октября 2009

вы можете использовать это, а не регулярное выражение: http://cz2.php.net/manual/en/function.parse-url.php это разобьет URL для вас, поэтому вы просто читаете результирующий массив для доменного имени

1 голос
/ 11 октября 2009

Несмотря на то, что SilentGhost прав, причина, по которой ваше регулярное выражение терпит неудачу, заключается в том, что. * Является жадным и будет съедать все до тех пор, пока есть /.

Если вы ставите ? знак после .*, он будет совпадать только до первого /

function removeDomain($string) {

    return preg_replace("/http:\/\/.*?\//", "", $string);

}
1 голос
/ 11 октября 2009

Используйте parse_url, как уже говорили другие люди.

Но чтобы ответить на ваш вопрос о том, почему ваше регулярное выражение не работает, оно будет соответствовать всему URL, потому что .* соответствует чему угодно, и это действительно так. Он соответствует URL-адресу whole и заменяет его пустой строкой, отсюда и ваши результаты. Вместо этого попробуйте следующее, которое будет соответствовать только имени хоста (что угодно, вплоть до первого '/'):

function removeDomain($string) {
    return preg_replace("@^https?://[^/]+/@", "", $string);
}
...