我的URI路由如下:
/dir/:dir1/:val1-:val2
我需要一个正则表达式:
获取以下参数和值:
dir1 =>汽车
val1 =>法拉利
val2 => 10
如何做这份工作?
感谢你!
答案 0 :(得分:3)
使用正则表达式命名组和preg-match
:
$test = "/category/cars/ferrari-10";
$result = preg_match("/^\/[^\/]+\/(?P<dir1>[^\/]+)\/(?P<val1>[^-]+)-(?P<val2>[^\/]+)$/", $test, $matches);
print_r($matches);
上面的result将在以下数组中出现:
Array
(
[0] => /category/cars/ferrari-10
[dir1] => cars
[1] => cars
[val1] => ferrari
[2] => ferrari
[val2] => 10
[3] => 10
)
此外,如果要删除未命名的组,可以使用以下命令:
for ($i = 0; $i < count($matches); $i++) {
unset($matches[$i]);
}
答案 1 :(得分:1)
正则表达式可能有点矫枉过正。如果您按/
分隔所有值而不是将/
与-
混合,可能会更容易。
然后你可以使用简单的爆炸。
$param_array = explode('/', $original_uri);
然后,您可以从数组的开头取消每个值,以获取用于测试路径的各个值。
$controller = array_unshift($param_array);
$action = array_unshift($param_array);
$args = $param_array;