目录的动态路线

时间:2017-08-04 11:15:02

标签: regex zend-framework routes

我有这条路线

routes.catalog.type = "Zend_Controller_Router_Route_Regex"
routes.catalog.route = "(a|a-b|b|c|d|d-a|d-b)(.*)"
routes.catalog.defaults.controller = "category"
routes.catalog.defaults.action = "index"

这与以下内容正确匹配:

http://www.example.com/a
http://www.example.com/a/some-param/2

但很糟糕:

http://www.example.com/ab

哪种正则表达式路由排除了这种情况?

在whateever(。*)之前使用斜线的东西

"(a|a-b|b|c|d|d-a|d-b)(/)(.*)"

不起作用。

1 个答案:

答案 0 :(得分:1)

您可以使用

routes.catalog.route = "^(a|a-b|b|c|d|d-a|d-b)(/.*)?$"

(/.*)?部分匹配/字符的1或0次出现(即可选),后跟除了换行符之外的任何0 +字符。这意味着,在您进行替换后(aa-b等),必须有/(后跟任何内容)或字符串结尾($)。

为了使其更加紧凑和高效,您可以“收缩”它有点像

"^(d(?:-[ab])?|a(?:-b)?|[bc])(/.*)?$"

this regex demo。但是,如果您认为可读性受到很大影响,您仍可以使用上面的表达式。

<强>详情

  • ^ - 字符串开头
  • (d(?:-[ab])?| - d可选地跟随-a-b
  • a(?:-b)?| - a可选地跟随-b
  • [bc]) - bc
  • (/.*)? - 可选的第2组匹配/和任何0+字符
  • $ - 字符串结束。