Всем привет! Возникла вот такая задача - вытащить все параметры из адресной строки, разделенные слешем. Вытащить все это в массив. Например: mysite.ru/param1/param2/param3/param4/../param999. У меня есть кусок кода:
$term = '([a-z/]+)';
preg_match('@^' . $term . '$@Uu', $uri, $match);
Сколько не пробовал прописывать $term - не выходит у меня сгрупировать слова. Получается только одна группа, которая содержит слова вместе со слешами. Я конечно могу разбить всё это через
explode, но думаю, что можно и регуляркой. И да, нужно чтобы замыкали регулярку @^ и $, как в примере..
<?php
$GLOBALS['sitemap'] = array(
'_404' => 'page404.php',
'/' => 'mainpage.php',
'/ads(/[a-z/]+)' => 'adspage.php',
'/news[/]?' => 'newspage.php',
'/(login|signup)[/]?' => 'userspage.php',
'/users(/(companies|experts))?[/]?' => 'userspage.php',
'/about(/(feedback|advertising|license|logos))?[/]?' => 'aboutpage.php',
'/[a-z0-9-]+' => 'personalpage.php'
);
class route
{
public $params = null;
public $classname = '';
public $data = null;
public $request_uri = '';
public $url_info = array();
public $found = false;
function __construct()
{
$this->mapClassName();
}
function mapClassName()
{
$this->classname = '';
$this->params = null;
$map = &$GLOBALS['sitemap'];
$this->request_uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$this->url_info = parse_url($this->request_uri);
$uri = urldecode($this->url_info['path']);
$data = false;
foreach ($map as $term => $dd) {
$match = array();
$i = preg_match('@' . $term . '$@Uu', $uri, $match);
if ($i > 0) {
$m = explode(',', $dd);
$data = array(
'classname' => isset($m[0]) ? strtolower(trim($m[0])) : '',
'params' => $match,
);
break;
}
}
if ($data === false) {
if (isset($map['_404'])) {
$dd = $map['_404'];
$m = explode(',', $dd);
$this->classname = strtolower(trim($m[0]));
$this->params = array();
}
$this->found = false;
} else {
$this->classname = $data['classname'];
$this->params = $data['params'];
$this->found = true;
}
return $this->classname;
}
}
Скажите, всё это плохо? А то я уже подумываю, как бы ВООБЩЕ избавиться от регулярок.. тем более в роутере.. почитал, что они висяки дают, и что можно сделать через эксплоуд..