2017-08-04 121 views
1

動態路由我有這條路線用於目錄

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)(/)(.*)" 

不工作。

+0

(a | ab | ab | b | c | d | da | db)(。*) – Sergej

+0

我想你需要''^(a | ab | b | c | d | da | db)( /.*)?$「'或類似的東西。 –

+0

@WiktorStribiżew是的,它是正確的。如果你會回答,我會標記它。 – tomasr

回答

1

你可以使用

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

(/.*)?部分相匹配的1點或0的出現(即它是可選的)的/炭,接着以比換行符字符以外的任何字符0+。這意味着,在您的更改(a,a-b等)之後,必須有/(後跟所有內容)或字符串末尾($)。

爲了使其更加緊湊和有效的,你可能會「縮水」這有點像

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

this regex demo。但是,如果您認爲可讀性受到很大影響,您仍然可以使用上述表達式。

詳細

  • ^ - 字符串的開始
  • (d(?:-[ab])?| - d任選隨後用-a-b
  • a(?:-b)?| - a任選隨後與-b
  • [bc]) - bc
  • (/.*)? - 任選的第2組匹配/和任何0+字符到
  • $ - 字符串的結尾。