2012-04-23 45 views
2

我正在嘗試在IIS7中編寫URL重寫器規則。 我現在reg表達式是^(policy|pricing|contact|gallery)/(.*) 我重寫規則是:/{R:1}.aspx?cat={R:2}使用正則表達式如何刪除某個字符是否在最後?

政策/(保持斜線在這種情況下,WORKS)

畫廊/足球(沒有提供斜線所以此工程)

庫/足球/(需要去掉最後一個斜線)

畫廊/足球/女孩/(需要去掉最後一個斜線)

任何想法將是巨大的,我知道我將如何用.Net等語言來處理這個問題,但我需要嚴格執行此操作作爲IIS中的正則表達式規則。

回答

1

我認爲有以下應該工作:

^(policy|pricing|contact|gallery)/(.*?)/?$ 

/?末的意思是「匹配/一個或零時間」,或者換句話說,它是可選的。只是將此添加到結尾將不起作用,因爲/仍然會被.*消耗,所以我們需要將.*更改爲.*?,以便它不再貪婪。

$錨是必要的,以便比賽不會結束得太早。

請注意尾部/仍然是匹配的一部分,但它不會成爲第二個捕獲組的一部分,因此您的重寫規則應該正常工作。

看到它的工作:http://www.rubular.com/r/s8IqIlaqoz

+0

這工作過,感謝您的解決方案! – NYTom 2012-04-23 17:32:45

+0

@NYTom - 沒問題,您應該[接受答案](http://meta.stackexchange.com/a/5235/155356),您認爲最好是通過點擊答案旁邊複選標記的大綱。 – 2012-04-23 17:47:15

0

我認爲,如果你明確地把它放在年底(我也沒能逃脫/,因爲它看起來像你不這樣做),你會有效地消除它在你重新 - 不包括該組。

^(policy|pricing|contact|gallery)/(.*)/?$ 

通過增加$我們將確保,只有最後的斜槓被刪除 - 仍然可以ň前鋒之間斜槓英寸

+0

我試過,謝謝,問題是它仍然包括/在最後,因爲?是0次或更多次。如果我使用+(1或更多時間),它將刪除斜線,如果它存在但如果輸入字符串在末尾沒有斜線,那麼它不會找到匹配,因爲+表示1或更多,所以它類似於一個catch 22問題。 – NYTom 2012-04-23 17:29:32

2

這可能會實現

^(policy|pricing|contact|gallery)/([^/]*(?:/[^/]+)*) 
+0

完成了,謝謝! – NYTom 2012-04-23 17:31:06

相關問題