За последние 24 часа нас посетили 21228 программистов и 1637 роботов. Сейчас ищут 1563 программиста ...

Ищем ссылки

Тема в разделе "Регулярные выражения", создана пользователем Nazorei, 17 июн 2011.

  1. Nazorei

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

    С нами с:
    1 фев 2007
    Сообщения:
    228
    Симпатии:
    0
    Есть несколько ссылок такого вида:

    Код (Text):
    1. <a href="http://user1.site.ru/data7">
    2. <a href="http://user7.site.ru/data5">
    3. <a href="http://user3.site.ru/data4">
    4. <a href="http://user2.site.ru/data3">
    Надо получить массив
    =[user1][data7]
    =[user7][data5]
    =[user3][data4]
    =[user2][data3]

    Пробовал так:

    Код (Text):
    1. $arr = array();
    2. if (preg_match_all("!<a href=\"http://(.*?).site.ru/(.*?)\"!sui",$data,$ok))
    3. {
    4.    foreach ($ok as $v)
    5.    {
    6.      $arr[] = array($v[0],$v[1]);
    7.    }
    8. }
    не выходит.
    Скорее всего регулярка не верно составлена. Помогите, кто знает, как надо? Благодарю заранее.
     
  2. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    PHP:
    1. <?php
    2. $text = "<a href=\"http://user1.site.ru/data7\">
    3. <a href=\"http://user7.site.ru/data5\">
    4. <a href=\"http://user3.site.ru/data4\">
    5. <a href=\"http://user2.site.ru/data3\">";
    6.  
    7. preg_match_all('#<a\s+href="http://([^.]+)\.site\.ru/([^"/]+)"#sUi', $text, $matches);
    8.  
    9. echo '<pre>'.htmlspecialchars(print_r($matches, true)).'</pre>';
    output:
     
  3. Mad_Man

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

    С нами с:
    17 июн 2011
    Сообщения:
    2
    Симпатии:
    0
    Добрый-добрый вечер. Надеюсь топикстартер не против соседства, попробую задать вопрос по ссылкам в этом же топике.

    Есть небольшой парсер, сохраняет исходный код страницы в отдельную папку, оттуда нужно вытянуть все ссылки по маске.
    Маска указывается в виде переменной $site = 'site.ru';

    Теперь в чём проблема:
    не могу составить запрос, который проверит каждый файл в папке /cache/ на наличие внутри урлов $site и выведет их списком.

    Внутри файлов:

    site.ru шепгеп
    site.ru/1 щгз9лзщ
    рнннн site.ru/2
    site.ru/3 шзщо
    sertdft
    site.ru/тратата хзозохощш щлщл
    site.ru/пыщ-пыщ-пыщ пыщ-пыщ
    gyyguyg
    site.ru/?????? ????
    site.ru/PROFIT! !!

    ======================

    В итоге нужно получить списком:

    site.ru
    site.ru/1
    site.ru/2
    site.ru/3
    site.ru/тратата
    site.ru/пыщ-пыщ-пыщ
    site.ru/??????
    site.ru/PROFIT!

    Заранее спасибо.
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    Mad_Man
    не совсем ясна задача, но список файлов можно получить к примеру функцией glob
    затем получать содержимое каждого файла через file_get_contents
    и парсить это содержимое с помощью регулярки preg_match_all('#site\.ru[^ ]*#sUi', $file_text, $matches)
    в итоге получить все ссылки в массиве $matches.

    стоит иметь в виду, что внутри регулярки точку необходимо экранировать обратным слешом, т.е. site.ru станет site\.ru