我正在使用代码点火器,并试图通过$ routes数组捕获多个url段。
例如,我的网址将如下所示:
/segment-1/segment-2/keyword/
我一直试图使用这个正则表达式:
$route['([\w-?]+){1,3}'] = "my/method";
但只返回此子组匹配:
segment-1
然后当我尝试这条路线时:
(\/[\w-?]+){1,3}
它以子组匹配的方式返回:
/keyword
所以我一直在明确地设置我想要的确切路线以确保捕获所有实例:
$route['([\w-?]+)'] = 'my/method/$1';
$route['([\w-?]+)/([\w-?]+)'] = 'my/method/$1/$2';
$route['([\w-?]+)/([\w-?]+)/([\w-?]+)'] = 'my/method/$1/$2/$3';
显然相当冗长。 最终,我想在一个正则表达式中捕获所有段。
想法?
答案 0 :(得分:0)
在一个正则表达式中通常不可能有任意多个捕获组。从您自己的尝试中可以看出,如果您重复一个捕获组,您将获得最后一个匹配。但是,您可以通过使其他“目录”可选来解决一定数量的路径元素。说3是你的最大值:
$route['([\w-?]+)(/[\w-?]+(/[\w-?]+)?)?'] = 'my/method/$1$2$3';
您可以在末尾添加一些嵌套的(/[\w-?]+)?
以允许更深的路径。否则,您可以使用循环自动填充$route
数组,但这也仅适用于固定深度。