2014-11-06 136 views
1

以下THIS问题,我设法创建正则表达式使用Zend_Controller_Route_Regex不仅可以匹配要求,但可选参数。Zend路由正则表达式 - 匹配路由与可选参数和加号

有联系,如:

fooroute,alles,p0000,1 
fooroute,alles,p0000 
fooroute,alles 
fooroute 

与开始:

fooroute,([\+\sa-zA-Z]+),([p0-9]+),(\d+) 

我结束了以下的正则表达式:上面的工作就好了上市

fooroute(?:\,|$)([\+a-zA-Z]+|$)(?:\,|$)([p0-9]+|$)(?:\,|$)([0-9]+|$) 

链接。

问题是\+在第一个参数似乎没有工作正常。 试图击中以下路线:

fooroute,This+Is+Test,p0000,1 

我结束了Page not found例外。

我使用regexr.com构建了我的模式,我的工作结果可以找到HERE

我失踪了什么?

UPDATE 代码:

$router->addRoute(
      'www-search-results',    
      new Zend_Controller_Router_Route_Regex(
        'fooroute(?:(?:,([a-z_]+))?(?:,(p\d+))?(?:,(\d+))?)?$', 
        array(
         'module'=>'www', 
         'controller'=>'index', 
         'action'=>'searchresults', 
         'city' => 'alles', 
         'searchParams' => 'p0000', 
         'page' => 1 

         ),    
        array(
          '1'=>'city', 
          '2'=>'searchParams', 
          '3'=>'page' 

         )     
        , 'fooroute,%s,%s,%d'      
       ) 
    ); 

回答

1

你不需要逃避+设置里面的人物。你也不需要逃脱,

而且,使用i忽略大小写)标志会让你的格局小,因为你将不必使用a-zA-Z每次。请使用以下模式:

^fooroute(?:(?:,([a-z+]+))?(?:,(p\d+))?(?:,(\d+))?)?$ 

Regular expression visualization

+0

谢谢!会尝试一下。顺便说一句,哪个软件能产生这么漂亮的图像;) – ex3v 2014-11-06 08:31:55

+0

不幸的是,这是行不通的。虽然事实证明'Zend_Controller_Route_Regex'默认添加了'/ i',但它仍然不会得到'+'符号。 – ex3v 2014-11-06 08:36:56

+0

@ ex3v你可以把你正在使用的实际代码放在你的问题中吗?该网站是https://www.debuggex.com – hjpotter92 2014-11-06 08:39:36