За последние 24 часа нас посетили 76709 программистов и 1668 роботов. Сейчас ищут 919 программистов ...

распарсить урл отбросив лишние http[s] и www

Тема в разделе "Регулярные выражения", создана пользователем cheshie, 26 ноя 2010.

  1. cheshie

    cheshie Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    3
    Симпатии:
    0
    есть урлы видов:
    http://www.example.ru/
    http://example.ru/
    http://www.st.example.ru/
    http://st.example.ru/

    http://(http://)+www.st.example.ru/ (то же самое с остальными примерами)

    нужно в итоге получить http://example.ru (или же http://st.example.ru).
     
  2. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    PHP:
    1. foreach( $urls as $url)
    2.     if( strstr( $url, 'www') === false)
    3.          echo $url ."<br />\r\n";
     
  3. cheshie

    cheshie Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    3
    Симпатии:
    0
    в строке может быть больше одного http-a.
    в любом случае, нужно оставить только протокол, доменная зона, домен второго уровня и домен третьего, если он не www
     
  4. neverlose

    neverlose Активный пользователь

    С нами с:
    27 авг 2008
    Сообщения:
    1.112
    Симпатии:
    20
    PHP:
    1.  
    2. <?php
    3. $text = '.....'; // Ваши URL-ы
    4.  
    5. $pattern = '/^(https?\:\/\/(?:[a-z-]+\.)?[a-z-]+\.[a-z]+)$/';
    6. preg_match_all( $pattern, $text, $matches);
    7. if( !empty($matches[1]))
    8. {
    9.     foreach( $matches[1] as $url)
    10.         if( strstr( $url, '/www.') === false)
    11.             echo $url ."<br />\r\n";
    12. }
    13. ?>
    14.  
    Можно как-то так попробовать. regex'ом лучше не злоупотреблять.
     
  5. cheshie

    cheshie Активный пользователь

    С нами с:
    26 ноя 2010
    Сообщения:
    3
    Симпатии:
    0
    спасибо за помощь, но это не помогло. совсем ниаких совпадений.
    я, наверное, неправильно описал.
    есть урлы любого вида, с произвольным количеством http-а спереди и www. нужно взять только протокол и, собственно, домен.

    для упрощения случая, допустим у меня одна переменная и в ней хранится одно урл.
     
  6. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
  7. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Так в столбик

    PHP:
    1. <?php
    2. ini_set('display_errors',1);
    3.  
    4. $m='http[s]://www.example.ru/
    5. http[s]://example.ru/
    6. http[s]://www.st.example.ru/
    7. http[s]://st.example.ru/';
    8.  
    9. $poisk='|http\[s\]:\/\/(www.)?|si';
    10. $zamena='http://';
    11.  
    12. $new=preg_replace($poisk,$zamena,$m);
    13.  
    14. $new2=explode(' ', $new);
    15.  
    16. $i=0;
    17. while($i<count($new2))
    18. {
    19. echo $new2[$i];
    20. echo '<br>';
    21. $i++;
    22. }
    23.  
    24. ?>