Php 代码点火器与我的[a-z]路线不匹配

Php 代码点火器与我的[a-z]路线不匹配,php,codeigniter,Php,Codeigniter,我有一个显示产品列表的url,由一个名为category_listing的控制器管理: http://localhost:8888/shop/mens/trainers/ 我已使用uri段4将分页添加到此页面,因此url最终看起来如下所示: http://localhost:8888/shop/mens/trainers/2 我还希望有一个允许用户通过访问以下url查看产品的路径: http://localhost:8888/shop/mens/trainers/a-trainer-prod

我有一个显示产品列表的url,由一个名为category_listing的控制器管理:

http://localhost:8888/shop/mens/trainers/
我已使用uri段4将分页添加到此页面,因此url最终看起来如下所示:

http://localhost:8888/shop/mens/trainers/2
我还希望有一个允许用户通过访问以下url查看产品的路径:

http://localhost:8888/shop/mens/trainers/a-trainer-product-here
这是由一个名为product_listing的控制器管理的

所以我创建了一条路线:

$route['shop/(:any)/(:any)/[a-z]'] = 'product/product_listing/$1/$2/$3';
我希望这将允许我匹配所有产品URL,同时忽略其中包含分页索引的URL。不幸的是,它似乎不起作用。当我访问url中带有产品的链接时,页面(应该使用产品列表控制器)仍在尝试调用类别列表控制器


有什么想法吗?我想知道url中产品名称部分(a-trainer-product-here)中的连字符是否会导致匹配的[a-z]部分出现问题?

您使用的正则表达式只能匹配从a到z的字母,并且只匹配一次,不会匹配“-” 因此,不是:

 $route['shop/(:any)/(:any)/[a-z]'] 
你可以试试:

 $route['shop/(:any)/(:any)/([a-z-]*)'] 

希望这能有所帮助。

您使用的正则表达式只能匹配从a到z的字母,而且只匹配一次,不会匹配“-” 因此,不是:

 $route['shop/(:any)/(:any)/[a-z]'] 
你可以试试:

 $route['shop/(:any)/(:any)/([a-z-]*)'] 

希望这有帮助。

[a-z]
就只能匹配一个字符。您可能希望为一个或多个添加类似于
+
的修饰符,或为零个或多个添加类似于
*
的修饰符。您的模式还表明您也希望捕获最后一段(您的替换中有
$3
),并且您的示例段塞中有
-
s,因此纯
[a-z]
将只匹配前面的“a”

结合所有这些,我想你会想写:

$route['shop/(:any)/(:any)/([-a-z]*)'] = 'product/product_listing/$1/$2/$3';
这将匹配零个或多个长度段塞,捕获它们以获得
$3
,并允许
-
s。
我也会考虑简单地使用一个第三代码>(任何),这取决于你如何创建这些蛞蝓。

< P> >代码> [AZ] < /C> >仅匹配一个字符。您可能希望为一个或多个添加类似于
+
的修饰符,或为零个或多个添加类似于
*
的修饰符。您的模式还表明您也希望捕获最后一段(您的替换中有
$3
),并且您的示例段塞中有
-
s,因此纯
[a-z]
将只匹配前面的“a”

结合所有这些,我想你会想写:

$route['shop/(:any)/(:any)/([-a-z]*)'] = 'product/product_listing/$1/$2/$3';
这将匹配零个或多个长度段塞,捕获它们以获得
$3
,并允许
-
s。
我也会考虑简单地使用第三代码>(任何)<代码>,这取决于你如何创建这些蛞蝓。

([-AZ+])这将不匹配上面的第一个URL。哦,MeaCulp。谢谢,已修复。([-a-z]+)这与上面的第一个url不匹配。哦,我错了。谢谢,修好了。