2012-11-15 46 views
2

我有一個正則表達式我試圖用來重寫傳入的REST URL,並且在URL的一部分被排除時陷入一個用例中。當字符串部分排除時的正則表達式反向引用

這是我目前使用正則表達式:

^(/[^/]+/(?:books))/([^/]+?)(?:/(?:(?!page).+?))?(?:/page/(\\d+))?$ 

作爲例子中,我使用爲部分在編寫新的URL中使用 「$ 1 - $ 3 - $ 2」

這裏是正在正常工作的例子...

"/mySite/books/topic1/page/2" results in "/mySite/books - topic1 - 2" 
"/mySite/books/topic1/subtopic1/page/2" results in "/mySite/books - topic1 - 2" 

全部按預期上述工作。問題是當URL排除URL的「topic1」部分時,那麼結果不是我所需要的。例如:

"/mySite/books/page/2" results in "/mySite/books - page - " 

我需要的是$ 2是空白,因爲沒有主題,頁號仍然港幣$ 24。我需要作爲輸出...

"/mySite/books/page/2" results in "/mySite/books - - 2" 

我能在我的正則表達式改變,以滿足該場景不破壞現有的那些正常工作?這是在Java中完成的。

回答

1

你可以嘗試使用正則表達式

^(/[^/]+/books)/(?:(?!page/)([^/]+)/)?page/(\\d+)$ 
+0

這正是我需要的感謝!我做了一些小改動,使頁面/#可選,最後以^(/ [^ /] +/books)/(?:(?/ page +)([^ /] +)/)?(?: page/(\\ d +))?$ –

1

它應該足以讓你的第二組不合格。然後引擎將首先嚐試找到一個匹配而不使用它(只改爲嘗試/page/\\d+)。如果失敗,它會嘗試以包括第二組:

^(/[^/]+/(?:books))/([^/]+?)(?:/(?:(?!page).+?))??(?:/page/(\\d+))?$ 

前面附加任何形式的量詞(+*?{..}?)使得ungreedy。