За последние 24 часа нас посетили 18119 программистов и 1628 роботов. Сейчас ищут 1457 программистов ...

Проверка наличия IP-адреса в строке.

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

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет. я уже давно не выбираю тот, который шустрее. я выбираю тот, который удобнее.
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    И правильно делаешь)))
    Потому, что это будет шустрее и удобнее)

    И меньше хлопот, а результаты при величинах в миллионы, как фейсбук, тебе даст хорошие результаты и скорость работы.

    И тут еще все от компа зависит...
     
  3. Gold Dragon

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

    С нами с:
    30 сен 2012
    Сообщения:
    306
    Симпатии:
    2
    Адрес:
    Тамбов
    А если оба одинаково удобны? :)

    вот придёт runcore, подправит регулярку (я не настолько силён в них) и можно закрывать тему, ответов больше чем достаточно набралось, на любой цвет и вкус :)
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Массивы могут быть с разными названиями и разной длины.

    Например проверка на "1000" элементов с ключами массива и значений "текст и цифры в перемешку" и с выводом на страницу:
    $a as $k => $v дало результат 0.00482

    А вот:

    $a as $k дало результат 0.00584


    У меня всегда быстрее 1 вариант, также как и sizeof() быстрее count() если массивы с выше 50.000 элементов.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я не меряю вобще производительность, пока проект не выйдет на финальную стадию =) ташто я выберу случайным образом.
     
  6. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    просто раз парсим текст где может быть что попало, то нуждо сделать её строже на краях, типа:
    Код (Text):
    1. (?:^|\D)((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)(?:\D|$)
    Perl вон, является лидером по эффективности обработки текстов, а там ВСЕ завязано на регулярки.
    так что они МОГУТ работать очень быстро, если уметь их готовить. конечно, это не значит что нужно применять их вообще везде. голову никто не отменял
     
  7. Gold Dragon

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

    С нами с:
    30 сен 2012
    Сообщения:
    306
    Симпатии:
    2
    Адрес:
    Тамбов
    Я так понимаю, это окончательный вариант решения? ;)
    Код (PHP):
    1.     <?php
    2.     $str = "kkk265.355.255.255aaa127.5.3.5sss222.222.33.44skds132.123.1.1w";
    3.     $pattern = '#(?:^|\D)((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)(?:\D|$)#';
    4.     preg_match_all($pattern, $str, $rows);
    5.     foreach ($rows[0] as $row) {
    6.             echo $row;
    7.     } 
     
  8. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    еще надо правильно считать затраты. Допустим один скрипт обрабатывает 50000 адресов за 1 секунду, второй для ровного счёта за шесть секунд. И того 1000 на секунду разницы. Если мы потратили на умный скрипт 20 минут с отладкой и проверками, а на глупый 5 минут, то чтобы окупить его, он должен оттарабанить 900000 адресов.
    На сайте с посещаемостью 300 человек в сутки, если данная проверка вызывается на каждой странице, а человек просматривает в среднем 3 страницы, то выгода от написания этого кода ощутится только через 1000 дней. =)
     
  10. Gold Dragon

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

    С нами с:
    30 сен 2012
    Сообщения:
    306
    Симпатии:
    2
    Адрес:
    Тамбов
    igordata, слишком упрощено. Затраты времени должны сводить к конечной экономической выгоде самого ресурса. Т.е. в расчёт должны браться ещё такие показатели, как трафик сайта, время ожидания пользователя (в том числе индексация поисковыми пауками). Если пользователь вынужден дольше ожидать отклика сайта, то потенциально мы теряем посетителя при условии что существует подобный ресурс (конкурент), но с более быстрой обработкой запросов. Скорости может и маленькие, но все мы сталкивались с этим "мне кажется что-то сайт притормаживает"... Потеря потенциального пользователя для коммерческого проекта не выгодна, да же не сама потеря, а возможность потери как экономической составляющей.

    И разговор идёт о конкретном скрипте. В расчёт нужно брать все скрипты проекта, 1000 секунд могут превратиться в реальные задержки. Так же мы не берём в расчёт тот факт, что программист имеет опыт работы, а значит уже знает или потенциально должен знать какой скрипт будет оптимальнее. По этому "20 минут на умный код" он будет тратить единожды.

    Дополнительно можно отметить тот факт, что (если рассматривать именно эту тему) человек задавший этот вопрос, не знал на него ответ. Но при этом получил труд нескольких человек, которые постарались максимально решить проблему. А значит человек потратил не своё время и следовательно данный расчёт секунд-часов не применим.

    С другой стороны, мы тратим своё время на форуме, а значит оно у нас есть. Мы делимся решениями, значит у нас уже есть практика. И теперь если мне понадобится решить подобную задачу, то я конечно же возьму это уже готовое решение.

    В конечном итоге получается, что мы всё же пишем код опираясь на свои знания, а время на умный код тратят другие, чем мы и пользуемся
    ;)
     
  11. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Почему окончательный вариант пишет такую ерунду?
    Это не ошибка а наоборот все правильно, ошибка в той функции, которая как раз не может найти в 265.22.22.22 корректного IP.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    это если вы яндекс, и ваш сервак на нужной точке живёт. Если как у меня в hetzner.de то потери на глаз не заметить никак, т.к. пинг ~60мс сжирает всю оптимизацию к чертям.

    Добавлено спустя 5 минут 49 секунд:
    в остальном согласен.

    Добавлено спустя 1 минуту 12 секунд:
    265.22.22.22
    Это не айпи =)
     
  13. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Но ведь 65.22.22.22 - это же ip. Регулярка правльно его нашла в строке. А первая двойка - это просто типо часть строки. Такая же, как и буквы там всякие и прочие символы.
     
  14. Gold Dragon

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

    С нами с:
    30 сен 2012
    Сообщения:
    306
    Симпатии:
    2
    Адрес:
    Тамбов
    это неправильный IP.
    А может это окончание предложения: "Я живу в доме 265.07.09.76 это дата моего рождения". Перед "07" просто нет пробела )))))
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    В задаче не уточняется формат строки, в которой надо искать IP. Поэтому наверное корректнее всего предлагать вариант, который находит больше всего адресов.