2014-11-06 114 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