2012-02-04 17 views
1

我有以下的正則表達式中刪除整個查詢字符串,但如何可以刪除查詢字符串完全如果存在:使用正則表達式

^~/(.*)/restaurant/(.*) 

例如。網址

/seattle/restaurant/sushi?page=2 

/seattle/restaurant/sushi?somethingelse=something 

/seatthe/restaurant/sushi 

應該只返回seattlerestaurantsushi並刪除任何查詢字符串,如果它存在。

(對於重新發布類似的問題感到抱歉,但我無法得到在我以前的問題中工作的答案)。

感謝

托馬斯

回答

4

此正則表達式:

(/[^?]+).*

應該匹配您的URL的初始部分並將其放入一個組中。

所以它會匹配/seattle/restaurant/sushi並將該值放在一個組中。

如果您想要處理僅字符作爲斜線之間的第二個單詞的URL,您可以使用如下所示:(/.*?/restaurant[^?]+).*

編輯:像這樣的東西應該產生3組:/(.*?)/(restaurant)/([^?]+).*。組1爲seatthe,組2爲restaurant,組3爲sushi。如果在最後的/之後有?,正則表達式會丟棄?以及後面的所有內容。

+0

我想匹配「西雅圖」和「壽司」作爲單獨的比賽。此外,如果「壽司」由查詢字符串進行。在這種情況下,我想匹配「壽司」,並刪除?之後的一切。謝謝 – ThomasD 2012-02-04 10:57:28

+0

@ThomasD:我編輯了我的回覆。 – npinti 2012-02-04 11:21:02

+0

非常好。這樣可行!我嘗試刪除最後兩組(餐廳)和([^?] +)之間的斜線*,因爲我想以與/ seattle/restaurant/sushi相同的方式匹配/ seattle/restaurant?page = 2。頁= 2。但我無法實現它的工作。由於我有很多其他URL,例如/ seattle/restaurant-michelangelo,這些URL不應該被捕獲,所以我想我需要對應該被捕獲的2.級別的值進行硬編碼(例如餐廳,咖啡廳,外賣)。在第三級(/西雅圖/餐廳/壽司),我沒有問題,所以你的建議在這裏工作。謝謝 – ThomasD 2012-02-04 11:59:28

1

你應該改變你的最終/./匹配 「什麼,但一個問號」 像這樣

^~/(.*)/restaurant/([^?]*) 
+0

剛剛嘗試過,它部分工作:-)即使「壽司」可能後面跟着一個查詢字符串,我仍然希望它返回「壽司」。因此,例如,像/ seattle/restaurant/sushi?page = 2這樣的查詢將匹配「西雅圖」和「壽司」。現在看起來它不符合「壽司」,如果它是由querystring進行的。謝謝 – ThomasD 2012-02-04 10:47:36