За последние 24 часа нас посетили 18729 программистов и 1706 роботов. Сейчас ищут 922 программиста ...

Помогите отыскать IP-адреса в строке

Тема в разделе "PHP для новичков", создана пользователем nikitOScher, 19 дек 2011.

  1. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    Здравствуйте! Помогите разобраться с проблемой.

    Задача: отыскать IP-адреса в строке, где куча мусора.

    Есть сервер shoutcast 1.9.8. Есть сайт в локальной сети класса A, где у пользователей статический IP. В БД сайта хранятся IP-адреса юзеров. Сервер радио не выдает информацию об IP слушателей в "чистом" виде. От шауткаста я могу получить что-то вроде этого:
    Код (Text):
    1. 10.58.101.44WinampMPEG/5.62, Ultravox/2.1010990467710.143.44.124MPEG OVERRIDE01814689
    Тут два слушателя с адресами: 10.58.101.44 и 10.143.44.124.
    Как мне вытащить эти IP в массив?
    Пробовал много чего, самое разумное, на мой непрофессиональный взгляд, было применить preg_match_all, но у меня не вышло, видимо неверно писал регулярное выражение.
    Код (Text):
    1. preg_match_all ('.*([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}.*', $listeners, $ips)
    А может и вовсе неуместно использовать здесь эту функцию.

    Мне пока не важна производительность, главное результат, пусть даже будет нагруженный гавнокод, т.е. возможны даже варианты типа:
    Код (Text):
    1. sql_query("SELECT ip FROM users WHERE ip != '');
    с последующим поиском в строке в цикле каждого IP-адреса из запроса.
    Вообщем, направьте меня в нужное русло =)
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Конкретно для твоего примера - такое работает:
    PHP:
    1. <?php
    2. $str = '10.58.101.44WinampMPEG/5.62, Ultravox/2.1010990467710.143.44.124MPEG OVERRIDE01814689';
    3. preg_match_all('/10\.\d{1,3}\.\d{1,3}\.\d{1,3}/', $str, $matches);
    4. print_r($matches);
    5. ?>
    IP-адреса же все с 10.*.*.* начинаются?

    Если после последней части IP адреса текст будет начинаться с цифры и при этом последняя часть состоит менее, чем из трёх цифр - то те 1 - 2 первые цифры, не являющаяся IP адресом - тоже будет захватываться.
     
  3. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    Да, все начинаются на 10.
    Вот и проблема, что при таком раскладе будут захватываться лишние символы. Уже не удастся верно сделать поиск в базе по IP.
     
  4. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Проверяешь по базе то, что получилось найти.
    Определяешь и отделяешь там в массив отдельный те, которых нету в базе.
    Откидываешь от них последнюю цифру, проверяешь снова.
    Мне кажется, так проще будет.
     
  5. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    П.С. Впередистоящие лишние цифры захватываться не будут, так как регулярка начинается с 10. , только если после ip есть цифры.
     
  6. nikitOScher

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

    С нами с:
    19 дек 2011
    Сообщения:
    38
    Симпатии:
    0
    ну это понятно дело)