Задать числовой диапазон при пом. регулярного выражения

oksale

Новичок
Задать числовой диапазон при пом. регулярного выражения

Здравствуйте.
Подскажите, как при помощи регулярного выражения выбрать числа в опр. диапазоне, напр. от 15 до 40.
 

StUV

Rotaredom
oksale
приведи пример строки, из которой хочешь дергать числа
 

oksale

Новичок
Необходимо вытащить ip адреса определенного диапазона. Отбор по последнему разряду - он д.б. в определенном диапазоне.
 

AmdY

Пью пиво
Команда форума
oksale
так тебе нужно вытащить часть ip, затем проверить попадает ли это число в диапозон.
так сказать, разбивай и действую.
 

Фанат

oncle terrible
Команда форума
хохо
StUV, 5 баллов за стопроцентное попадание =)

oksale
поскольку ip адрес - это, по сути, четырехбайтный int, то лучше бы и перевести его в числовую форму, и работать уже с ней.

-~{}~ 31.01.07 12:45:

oksale
м о ж н о без "например"?
мы здесь не школьники на экзамене, а ты не учительница.
и не надо высасывать задачки из пальца.
 

oksale

Новичок
Фанат, ок.

Задача - вытащить из файла строки, которые содержат ip адрес определенного диапазона.

PHP:
grep -a "[0-9] 192.168.1." file1 > file2
Т.о. я вытаскиваю строки с ip, но без задания диапазона. Вот как это сделать, не знаю.
 

Фанат

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

а диапазон нужен все время один и тот же - меняться не будет?
 

oksale

Новичок
Автор оригинала: Фанат
охохох. ну почему ж нельзя было сразу написать, в Оффтопик, про то, что ты грепаешь логи?

а диапазон нужен все время один и тот же - меняться не будет?
Разве есть принципиальная разница, что я разбираю?
Да, диапазон фиксированный.
 

Фанат

oncle terrible
Команда форума
А ЧТО - ДО СИХ ПОР НЕПОНЯТНО? Что принципиальная разница есть?
А что - в правилах не написано, что задачу надо описывать подробно и конкретно? А не в стиле пересказа любимого сериала подружке по телефону, болтая пальчиками после маникюра.

-~{}~ 31.01.07 13:35:

диапазон задать можно.
вот только захочется ли тебе это делать
к примеру диапазон 28-31 задаётся, соответственно, выражением (2[89])|3[01]
можно, кстати, ещё так: (28|29|30|31). тоже диапазон.

-~{}~ 31.01.07 13:36:

поэтому, если существует возможность перевести в число, то лучше это сделать и сравнивать числа.
поэтому ЕСТЬ разница, что ты разбираешь, и ЧЕМ.
 

WP

^_^
:) Подумалось.
PHP:
function getexpr_callback($m)
{
 $s = min($m[1],$m[2]);
 $e = max($m[1],$m[2]);
 $a = array();
 for ($i = $s; $i <= $e; $i++)
 {
  $a[] = $i;
 }
 return '(?:'.implode('|',$a).')';
}
function getexpr($mask)
{
 $e = explode('.',$mask);
 for ($i = 0,$s = sizeof($e); $i < $s; $i++)
 {
  $x = explode(',',$e[$i]);
  for ($j = 0,$d = sizeof($x); $j < $d; $j++)
  {
   $x[$j] = preg_replace_callback('~(\d+)\-(\d+)~','getexpr_callback',$x[$j]);
  }
  if (sizeof($x) > 1) {$e[$i] = '(?:'.implode('|',$x).')';}
  else {$e[$i] = $x[0];}
 }
 return implode('\.',$e);
}
echo getexpr('192.168.1.1-40');
 

hermit_refined

Отшельник
зависит от того, что нужно. да и по-разному записать можно. например, так
awk -F. ' /^192\.168\.1\./ && int($4) >= 1 && int($4) <= 40 ' infile > outfile
 
Сверху