1

我正在使用代码点火器,并试图通过 $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';

这显然是相当冗长的。最终,我想在一个正则表达式中捕获所有段。

想法?

4

1 回答 1

0

在一个正则表达式中通常不可能有任意多个捕获组。从您自己的尝试中可以看出,如果您重复一个捕获组,您将获得最后一个匹配项。但是,您可以通过使额外的“目录”可选来解决一定数量的路径元素。说 3 是你的最大值:

$route['([\w-?]+)(/[\w-?]+(/[\w-?]+)?)?'] = 'my/method/$1$2$3';

您可以在末尾添加更多嵌套(/[\w-?]+)?以允许更深的路径。否则,您可以$route使用循环自动填充数组,但这也只能在固定深度内起作用。

于 2012-10-17T16:45:15.363 回答