LINUX.ORG.RU

Regexp -Регулярное выражение

 


1

1

Приветствую форумчане! Изучаю регулярные выражения, и не могу решить одну задачу. Есть диапазон IP адресов, и есть IP-адрес, каждый раз разный, нужно проверить вхождение IP адреса в диапазон адресов(min-max). Диапазон:

5.9.200.0-5.19.200.255
5.10.210.0-5.20.250.255
5.12.200.0-5.22.230.255
5.13.150.0-5.23.160.255

Входит ли мой IP(любой) в данный диапазон.



Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от kto_tama

Не то получается… Входит ли IP 5.16.208.177 в какой то диапазон из вышеперечисленных. То есть проверить чтобы данных IP был больше минимального и меньше максимального из диапазона.

Twix
() автор топика
Ответ на: комментарий от thesis

из-за объема данных не получается быстро найти то, что я хочу иными способами, точнее иными способами уходит в несколько раз больше времени, чем регулярными выражениями.

Twix
() автор топика
Ответ на: комментарий от Twix

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

То есть, ты уже успешно решил задачу регулярными выражениями, и твое решение работает быстрее других? Отлично.

thesis ★★★★★
()

Ты решаешь задачу не тем инструментом. Регулярки тут ненужны.

Anoxemian ★★★★★
()

Приветствую, форумчане! Мне лень разбираться, а вам явно нечего делать. Решите мою проблему.

perl5_guy ★★★★★
()
Ответ на: комментарий от perl5_guy

Евгений Ваганыч просто рыдает в уголку от остроумия твоего=)

Twix
() автор топика
Ответ на: комментарий от thesis

В моем случае приходится делать генератор регулярного выражения под IP :-( и не всегда корректно работает :(

Twix
() автор топика
Ответ на: комментарий от Twix

Всё наоборот. Регулярные выражения тут очень медленные. Они вообще всегда медленные.

Принадлежность адреса к диапазону делается целочисленным сравнением (unsigned int32). Айпи-адрес - это не строка, как думают веб-идиоты, а 32-битное целое число (занимает 4 байта). В виде строки его можно вывести, чтобы показать пользователю на мониторе, но не более того.

5.9.200.0-5.19.200.255

0x0509C800 .. 0x0509C8FF

Входит ли IP 5.16.208.177

0x0510D0B1

0x0510D0B1 > 0x0509C800

0x0510D0B1 > 0x0509C8FF

Значит оно не входит в диапазон.

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от Twix

В твоем случае надо выбросить регекспы нахрен совсем.
Пойми и прими простую вещь: регекспы - это для поиска и замены повторяющихся (regular) фрагментов в тексте. Это никаким образом не про сравнение чисел.

Ну то есть твоя главная задача сейчас это сконвертить базу диапазонов адресов в числа, или выгребать их откуда они там берутся сразу в виде чисел, а не в этом вот dotted decimal.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.