2011-04-07 141 views
0

示例文本=正則表達式ASP.NET URL重寫

legacycard.ashx?save=false&iNo=3&No=555 

樣本模式=

^legacycard.ashx(.*)No=(\d+) 

要搶組# 「555」(該值的2值 「否=」 在示例文本)

在Expresso中,這可以工作,但在ASP.NET UrlRewrite中,它並沒有捕捉到。

我錯過了什麼嗎?

謝謝!

+1

可能是你的正則表達式是ungreedy,所以它抓住它匹配**否= 3 **有**否= (\ d +)**。 – 2011-04-07 19:43:19

回答

0

我會做這些方針的東西:

^legacycard.ashx\?(?:.+&)*No=(\d+) 

\?將逃跑的問號通常分開URL和參數,則確保它會捕捉每一個參數鍵/值對(任何以&結尾的東西)在你真正關心的參數之前。使用?:可以讓你指定一組括號是非捕獲的(我假設你不需要任何數據,有可能稍微加快你的正則表達式),並且你只需要捕獲這些數據。這種方法的附加好處是它可以工作,而不管參數順序如何。

0

看起來好像沒什麼問題,你的正則表達式應該將整個字符串

legacycard.ashx匹配?保存=假& INO = 3 &否= 555

不知道爲什麼你有羣,但團體也應該返回

?保存=假& INO = 3 &

良好的措施,你應該知道的。在legacycard.ashx也被正則表達式解釋,你通常會逃避它,在這種情況下它不重要,因爲一個點匹配所有的東西,也是一個點。 :)

0

試試這個

^legacycard.ashx(\?No=|.*?&No=)(\d+) 

這應該工作。

+0

你不一定知道是否會有更多的參數後或參數的順序將永遠是相同的。 – R0MANARMY 2011-04-07 19:47:08

+0

好的,我認爲它會一直在最後,因爲你的正則表達式不包含'No =(\ d +)'背後的任何內容。我糾正了我的答案。 – 2011-04-07 20:01:39

+0

這是一個合理的假設,我更喜歡param order是一個實現細節的觀點,所以我儘量不依賴它,但在這種情況下可能並不重要。另外,一旦你捕獲了你關心的部分,你可能不需要指定正則表達式中字符串的其他部分。 – R0MANARMY 2011-04-07 20:08:33

0

只要使用這個表達式:

^legacycard\.ashx\?save=(false|true)&iNo=(?<ino>\d+)&No=(?<no>\d+) 

然後正則表達式替換

${no}