Переопределение переменных

serega86

Новичок
Переопределение переменных

есть строка q2/e3/r2 ( из REQUEST_URI )

надо переопределить переменные

$q=2
$e=3
$r=2

как это сделать грамотно ?

у меня получилось так :

preg_match_all("([A-z]+[0-9]+)", "q2/e3/r2",$match);

потом поочереди обходим массив $match

preg_match("([A-z]+)", $match[0],$prname);
preg_match("([0-9]+)", $match[0],$prvalue);
$_GET[$prname[0]]=$prvalue[0];

но что то мне подсказывает что это очень извращенно ...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
как вариант
mod_rewrite
 

Фанат

oncle terrible
Команда форума
Mr_Max
ваще-то, из модреврайта он это и получает.
"Ужасы нашего ЧПУ"
 

serega86

Новичок
Автор оригинала: Андрейка
serega86
"([A-z]+[0-9]+)"
а че сия запись значит? расскажите плиз, посимвольно
ищем подстроку в которой некоторое количество букв за которыми следует не которое количество цифр .......
 

bgm

 
serega86
PHP:
<pre><?

$p = "aa23/dsf222/dsgfs444";

preg_match_all( "/([A-z]+)([0-9]+)/", $p, $out, PREG_PATTERN_ORDER);

var_dump($out);

?></pre>
 

Igor aka TiGR

Новичок
Это не самое страшное. В массив [A-z] входит помимо ожидаемых A-Z и a-z и ряд символов: [ ^ | \ ] _ `
 

serega86

Новичок
bgm, Спасибо !

Igor aka TiGR интересное замечание ... никогда раньше не задумавался
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Пока программисты решают задачу разделения строки на подстроки через регулярные выражения - спрос на производительные сервера гарантирован :)
Просто explode по "/" с лимитом 3, с дальшей проверкой значений ... я конечно знаю, что не подходит, но интересна Ваша версия причины? :)
 

bgm

&nbsp;
grigori
Пушкой-то сподручней, однако, будет по воробьям-то.
 

bgm

&nbsp;
Без регулярных выражений и без explode ))
PHP:
$p = "aaz23/dsf222/abcde223df444";
$out = array(); $b = '';
for ($x=0; $x<strlen($p); $x++) {
    $c = $p{$x};
    if ($c=='/') {    $b = '';    }
    elseif ( ($c<='z') and ($c>='a') ) {    $b .= $c;    }
    elseif ( $c<=9 and $c>=0 and $b) {
        $out[$b] = isset($out[$b]) ? $out[$b].$c : $c; 
    }
}
var_dump($out);
 
Сверху