Обрезать ссылку на корневой домен из макросов с помощью php regex (заглянуть внутрь) - PullRequest
0 голосов
/ 29 марта 2012

Мой php-скрипт содержит макросы === shortlink ===.Этот макрос находится в контейнере EOF

<?php
$gtemplate=<<<EOF
 ===shortlink===
EOF;
?>

=== shortlink === содержит URL, подобный этому http://site.com/2012/blog-post.html Когда я запускаю скрипт, он показывает результат из === shortlink ===.URL как http://site.com/2012/blog-post.html.Мне нужно обрезать URL из этого макроса, чтобы показать только доменное имя как site.com.Подскажите, как обрезать его в этих макросах с помощью php regex?

Похоже, эти макросы должны быть возвращены в специальный var, затем обрезаны и возвращены обратно в ==== shortlink ===.Эй, мастера, вы победили?

пробовал что-то вроде этого

$urlpage = '===shortlink===';
preg_match_all("/((?:[a-z][a-z\\.\\d\\-]+)\\.(?:[a-z][a-z\\-]+))(?![\\w\\.])/", $urlpage, $replurl, PREG_PATTERN_ORDER);

    $replurl= '===shortlink===';

, но это не работает.пожалуйста, помогите мне с этой простой заменой.

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Почему бы не использовать parse_url()?

<?php
    $url = "http://site.com/2012/blog-post.html";

    $parsed = parse_url($url);
    echo $parsed["host"];
0 голосов
/ 09 ноября 2013

Здесь вы можете увидеть полный рабочий код: ctrtard.com с особой благодарностью.

<?php
function trim_url_to_root_domain($target) {
/* Usage:
* echo trim_url_to_root_domain("http://mytarget.com");
* or
* echo ucfirst(trim_url_to_root_domain("http://mytarget.com")); // uppercase first letter
*/
    // trim http, https, and //
    $target = str_replace("http:", "", $target);
    $target = str_replace("https:", "", $target);
    $target = str_replace("//", "", $target);

    // check for dots
    $dots = substr_count($target, '.');
    if ($dots > 1) { // if there are more than 1 dots, we need to remove subdomain
        $first_dot = strpos ($target, ".");
        $target = substr($target, $first_dot+1, strlen($target));
    }

    // find the last slash, this should be the slash just before directory info
    $last_slash = strripos($target, "/");
    if ($last_slash > 0 ) {
        $target = substr($target, 0, $last_slash);
    }

    // find last slash one more time, to handle targets like /domain.com
    $last_slash = strripos($target, "/");
    if ($last_slash !== FALSE ) {
        $target = substr($target, 1, strlen($target));
    }

    // normalize target so it's all lower case
    $target = strtolower($target);

    return $target;
}


echo trim_url_to_root_domain("http://mytarget.com");

echo ucfirst(trim_url_to_root_domain("http://mytarget.com"));
?>
...