- RU.PHP ------------------------------------------------------------- RU.PHP -
Msg : #1048 [1443]
От : val khokhlov 2:550/180 26 июня 03, 11:57
Кому : Konstantin Boyandin 26 июня 03, 22:23
Тема : Почемy нe фypычит фyнкция
-------------------------------------------------------------------------------
Greetings, Konstantin!
26 Jun 03 04:32, Konstantin Boyandin wrote to val khokhlov:
vk>> насчет сложные re мое мнение - это ни к чему. проверять
vk>> валидность ай-пи через re как-то несерьезно. лучше (и, может, быстрее)
vk>> сделать /(\d+)\.(\d+)\.(\d+)\.(\d+)/, а потом проверить числа в
vk>> результатах.
KB> Hесерьёзно? Сравни производительность обоих вариантов и положи сюда
KB> итоги...
имелось в виду именно проверка сложных регэкспов, как в том примере;
мое имхо - лучше было бы разбить его на несколько более простых
если делать простую проверку одного адреса, то результаты получаются
примерно одинаковы - 11 секунд на 100 тыс. адресов. только для простой проверки
в аналоге я делал сплит по точке и раскрывал цикл, там re не обязательно гонять
но здесь весьма простой re:
function test1($s) {
$p = '(\d{1,2}|[01]\d\d|2[0-4]\d|25[0-5])';
return preg_match("/^$p\.$p\.$p\.$p$/", $s);
}
imho, при увеличении сложности (как в том примере - одним re проверить
весь url), скорость _сильно_ уменьшается (ну, проверять тот re я не буду -
долго писать аналог).
KB> - для компонент доменного имени не подходит (подчёркивание недопустимо)
угу, но в ряде случаев оно как раз подходит по назначению
KB> - точное значение \w привязано к локали и *не* является, строго говоря,
KB> синонимом [a-zA-Z0-9_]
да, согласен - нужно учитывать локаль. вот с этим, в общем случае, хуже
- нужно устанавливать локаль (точнее, ее C_TYPE часть), т.к. модификатор /i
тоже с ней работает, а это не сразу очевидно
KB> Ресурсоёмкая - это всегда по отношению к.
по отношению к обычным strstr, strpos, str_replace, explode и т.п.
Good luck!
val
--- 2*3.1415926535897932384626433832795028841971693993751058 ways to eternity
* Origin: I noore uu alasseo (2:550/180)
При переходе по баннеру - скидка 25% на первый месяц обслуживания! При переходе по баннеру - скидка 25% на первый месяц обслуживания!