2011-07-22 30 views
0

在網絡處理器路由的配置我有以下的正則表達式:調整一個Web處理正則表達式的路由配置

  • /post/HUIHUIGgS823SHUIH/this-is-the-slug
  • /post/HUIHUIGgS823SHUIH/
  • ('/post/(\w+)/.*', foo.app.WebHandlerFooClass) 
    

    這個表達式這幾樣的URL匹配

傳遞正確HUIHUIGgS823SHUIHId參數與由(\w+)組匹配的網頁處理程序。

我該如何修改上面的正則表達式來匹配這個url?

/post/HUIHUIGgS823SHUIH 

處理程序進行編碼以接受只有一個參數,以base64 ID,因此應該只有一個組,該ID匹配的正則表達式

所以,這些都是應該匹配的URL:

  • /post/HUIHUIGgS823SHUIH/this-is-the-slug
  • /post/HUIHUIGgS823SHUIH/
  • /post/HUIHUIGgS823SHUIH < - 嘿,我想這也
+0

含義ID和可選的斜線或ID +蛞蝓和可選的斜線? –

+0

ID和可選的斜線。在slu end末端的斜線現在不是問題,因爲它被''*'吞噬了。*' – systempuntoout

+0

您是否正在尋找* fix *,因爲它看起來像一個糟糕的實現?另外,這是一個單獨的路線還是相同的?也可以分享底層技術。 –

回答

3
'/post/(\w+_-)(?:/([\w-]+))?/?' 

此相匹配下列。

  • /post/HUIHUIGgS823SHUIH/this-is-the-slug
  • /post/HUIHUIGgS823SHUIH/this-is-the-slug/
  • /post/HUIHUIGgS823SHUIH/
  • /post/HUIHUIGgS823SHUIH

我認爲這是一個更好的實施因爲它僅捕獲你想要的作品,例如該子彈不會捕獲尾隨/。不過,你的規格對我來說還是有點不清楚,所以這可能不是你的意圖。

+0

處理程序編碼爲只接受一個參數,即Id,因此在正則表達式中應該只有一個與Id匹配的組。 – systempuntoout

+0

由於您沒有提供您的技術,我不知道這種限制。我提供的正則表達式適用於規範。 –

+1

如果您想將slu drop放在地板上,請將slu group組設爲非俘獲組;使用'(?:...)'而不是'(...)' – SingleNegationElimination

1

如果我猜得不錯你的真實意圖,那麼你的罰款與這一個:

'/post/(\w+)' 
+0

不,這與id和slug都匹配。 – systempuntoout

+0

不,它不,或給我countraexample。 \ w將不匹配正斜槓。如果你給/ post/HUIHUIGgS823SHUIH/this-is-the-slug /這比你在$ 1中獲得HUIHUIGgS823SHUIH這可能是你想要的。 – gorn

+1

很高興我可以幫助 – gorn

1

如果你不在乎在最後的數據,那麼爲什麼不使用呢?

'/post/(\w+).*' 

否則,您將不得不提供更多信息。

+0

這個工作太多了,我對它進行了一些改進。 – systempuntoout

1

我覺得你只是想:

'/post/([^/]+).*' 

,但似乎太簡單的答案:)

+0

這個工作tnx – systempuntoout