2014-02-06 70 views
1

我試圖讓分組從以下URI匹配:PHP preg_match_all問題

route: "/user/{user}/{action}" 
input: "/user/someone/news" 

什麼是適當的正則表達式嗎?我一直在尋找自己的酸味在過去的幾個小時......

我已經試過這樣的事情,但沒有結果:(

~\/app\/user\/(?P<user>[.*]+)\/(?P<action>[.*]+)~ 

我得到的組重新比賽陣中,但沒有結果基於所述組內的輸入

所需的輸出:

Array 
(
    [0] => Array 
     (
      [0] => "someone" 
     ) 

    [user] => Array 
     (
      [0] => "someone" 
     ) 

    [1] => Array 
     (
      [0] => "news" 
     ) 

    [action] => Array 
     (
      [0] => "news" 
     ) 
) 

爲了用一個例子闡明

我的控制器有以下途徑:/app/user/{username}/{action} 來自瀏覽器的請求URI是:/app/user/john/news

如何匹配請求URI反對使用正則表達式圖案而醒目的括號中的變量路線?

+0

問題不明確 – zerkms

+0

你究竟想要匹配什麼(給出確切的例子)以及期望的結果是什麼。 (舉例)。 – MElliott

+0

對不起。我試圖使用正則表達式匹配上面提到的輸入到路線,並捕獲括號內的棋子。 route:/ user/{username} 輸入:/ user/john-smith 正則表達式:? – Harold

回答

5
/user/(?P<user>[^/]+)/(?P<action>[^/]+) 

http://regex101.com/r/gL1aS2

只是解釋了幾個問題,你原來的正則表達式:

  • [.*]+意味着一個點的出現的正數和一個星號而已,例如:*.*.*.......; [^/]+描述了任意字符的正數,但斜槓。
  • 無需轉義斜槓,因爲當您使用~作爲分隔符時,它們不是特殊字符。
  • 你的正則表達式在開始時也需要/app,它不在你的字符串中。
+3

就是這樣;然而,我會使用'[^ ​​/] +'而不是'。+'(即使兩者都有效)。另外,應該注意的是,由於OP使用'〜'作爲分隔符,所以正斜線不會被轉義。 – Sam

+1

耶,它的作品!非常感謝:)結果比我嘗試做的事情要輕很多:p – Harold

+0

@SamSullivan好點。我已經更新了答案。哈羅德,我很高興能夠幫到你。 – Bugs