2011-06-21 31 views
0

我有RegEx問題。考慮以下網址:用RegEx重寫URL

http://ab.cdefgh.com/aa-BB/index.aspx

我需要一個正則表達式,着眼於「AA-BB」,如果它不 比賽的一些具體,說:

rr-GG 
vv-VV 
yy-YY 
zz-ZZ 

那麼URL應該重定向到某個地方。例如: http://ab.cdefgh.com/notfound.aspx

在web.config中我有urlrewrite規則。我需要知道標記之間是什麼 正則表達式。

<urlrewrites> 
     <rule> 
     <url>?</url> 
     <rewrite>http://ab.cdefgh.com/notfound.aspx</rewrite> 
     </rule> 
</urlrewrites> 

回答

0

假設你不關心潛在的替換模式是在域名或目錄結構的其他一些層面,這應該上的圖案中選擇你感興趣的:

http:\/\/ab\.cdefgh\.com\/(?:aa\-BB|rr\-GG|vv\-VV|yy\-YY|zz\-ZZ)\/index\.aspx 

,其中AA-BB等模式是簡單的「或者」使用|運算符編輯在一起。

爲了進一步打破這種分離,所有的/.,並需要用\進行轉義,以防止正則表達式將其解釋爲語法-字符。表示法意味着將事物「或」編組,而不將它存儲在反向引用變量中(如果不關心保留所選值,這會使其更有效)。

下面是一個示範的鏈接(也許這可以幫助你玩的正則表達式在這裏得到你想要究竟哪些字符組合)

http://rubular.com/r/UfB65UyYrj

0

這會有幫助嗎?

^([a-z])\1-([A-Z])\2.* 

它匹配:

uu-FF/ 
aa-BB/ 
bb-CC/index 

但不是

aaBB 
asdf 
ba-BB 
aA-BB 

(編輯基於評論)

只是管分隔所需的網址()的一邊並逃脫特殊字符。

例如,

^(xx-YY|yy-ZZ|aa-BB|goodStuff)/.* 

不過,我想你可能真的想它匹配比您指定的網址以外的任何下面,讓一切去notfound.aspx:

^[^(xx-YY|yy-ZZ|aa-BB|goodStuff)]/.* 
+0

感謝雅各布。沒有那個好。但我需要它僅匹配有限數量的這些值,而不僅僅是較低的UPPER,但具體而言,xx-XX,yy-YY,zz-ZZ(例如)和其他所有值(即aa-AA,bb-BB ,CC-CC等)將不匹配並導致重定向到未找到的URL。 –

+0

再次感謝雅各布。對不起,我真的不是一個正則表達式的人。我如何確保完整的URL得到評估,表達式「HERE」是正則表達式發生的地方。例如:http://ab.cdefgh.com/HERE/index.aspx –

+0

第一個「^」表示URI的起始部分(第一個/之後的部分)下一部分是[^(don' tmatchthis | orthis | orthisone)]是比賽的下一部分。 []中的「^」意思是不匹配那裏的東西。最後,「/.*」指的是一個「/」,後面跟着任意數量的字符。 –

0

假設你想要除xx-XX,yy-YY和zz-ZZ之外的任何東西重定向:

[^(xx\-XX)|(yy\-YY)|(zz\-ZZ)]