regexp. нужно проверить число

vinslave

Новичок
regexp. нужно проверить число

Подскажите, можно ли regexp'ом проверить присутствие в строке числа от 1 до 32, стоящего после "/"
Т.е /12 , /29.
/33 уже неправильно

-~{}~ 20.12.05 14:19:

на ум приходит только такое
echo preg_match('/\/([1-9]{1}$)|([1-2][0-9])|([3][0-2])/', '/32');
 

Gas

может по одной?
как один из вариантов

PHP:
  $text = "asdsdf/31asddsf/33sdadfasd/2asdf/1/8/12";
  $matches = array();
  preg_replace('~/(\d{1,2})(?!\d)~e', '(\1 <= 32) ? $matches[]=\1 : "";', $text);
  print_r($matches);
 

Сергей123

Новичок
прогнал, думаю дальше...

-~{}~ 20.12.05 14:03:

vinslave,
похоже, то, что предложено тобою
( только я бы написал '~/([1-9]|(?:[12]\d)|(?:3[0-2]))~' ), - самое оно.
 

vinslave

Новичок
Автор оригинала: Бресь Сергей
/(
([12]\d?)
|
(3[012])
)
в твоем варианте не проходят однозначные числа до десяти

-~{}~ 20.12.05 15:07:

Автор оригинала: Бресь Сергей
прогнал, думаю дальше...

-~{}~ 20.12.05 14:03:

vinslave,
похоже, то, что предложено тобою
( только я бы написал '~/([1-9]|(?:[12]\d)|(?:3[0-2]))~' ), - самое оно.
что-то не пашет твой пример
 

white phoenix

Новичок
Как вариант: можно получить через preg_match_all "/([0-9]*)", а потом foreach($matches...
 

Сергей123

Новичок
в твоем варианте не проходят однозначные числа до десяти
да, я написал, что мой первый вариант - гон

что-то не пашет твой пример
да, снова ошибся
вот так можно
'~/([1-9]|(?:[12]\d)|(?:3[0-2]))\D~'

а в твоём варианте, кстати, в строке test/132test находит /13

-~{}~ 20.12.05 14:26:

хы...
я опять прогнал...
если строка dsfsew/1 (т.е. последовательность в конце строки), то не идёт, надо переписывать...

кстати, "присутствие в строке" или всё-таки ^ляляля$ ?
 

white phoenix

Новичок
Бресь Сергей
Ну если только как "идея"
vinslave
PHP:
function test($string)
{
 $e = explode("/",$string);
 foreach($e as $v) {$d = substr(intval($v),0,2); if (($d > 1) and ($d < 33)) {return TRUE;}}
 return FALSE;
}
Первая мысль которая пришла в голову после прочтения первого поста, без регулярных выражений, но работает.
 

white phoenix

Новичок
Gas
> для варианта /123 верёт true;
А почему не должно быть TRUE? '3' это уже избыточная строка.
 
Сверху