如何从正则表达式中获取值/参数?

时间:2011-11-01 18:08:59

标签: php regex

我的URI路由如下:

/dir/:dir1/:val1-:val2

我需要一个正则表达式:

  1. 知道路线是否与真实的URI匹配(es。/ category / cars / ferrari-10)
  2. 获取以下参数和值:

    dir1 =>汽车

    val1 =>法拉利

    val2 => 10

  3. 如何做这份工作?

    感谢你!

2 个答案:

答案 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;