Codeigniter Regex用于URL路由问题

时间:2016-09-24 17:05:54

标签: php codeigniter

我在abc控制器中有函数调用main

public function abc($value = NULL)
{
    if ($value == 10) {
         echo "value is 10";
    } else {
        echo "value is not TEN";
    } 
}

当我使用URL路由功能abc时,如下所示

http://localhost/males/7

$route['(males|female)']            = 'main/abc'; //working
$route['(males|female)/([0-9]+)']   = 'main/abc/$1'; //not working

但是当我单独使用时,它有效。为什么呢?

$route['(males|female)']    = 'main/abc';
$route['males/([1-7]+)']    = 'main/abc/$1';
$route['female/([1-7]+)']   = 'main/abc/$1';

1 个答案:

答案 0 :(得分:0)

尝试使用$ 2

$route['(males|female)/([0-9]+)']   = 'main/abc/$2';

我认为$ 1匹配(males|female)而不是数字

它适用于你的第二种情况,因为你已经删除了第一个捕获组,现在$ 1引用了你想要的东西。

根据评论更新;

根据URI routing和正则表达式。 $ 1 $ 2 $ 3是从正则表达式捕获组捕获的数据的变量。它们按从左到右的顺序排列。所以在上面的路由规则中有两个捕获组; 1美元为(male|female),$ 2为([0-9]+)

当您更改为$route['males/([1-7]+)'] = 'main/abc/$1';时,现在只有一个捕获组; $ 1是([1-7]+)

捕获组(或子模式)在()括号内是什么。更多info here

注意:在正则表达式中,这些“变量”可以在“反向引用”中引用。更多info here。您可以在组内拥有组,排除模式等,但codeigniter可能限制它允许URI路由