2011-09-21 139 views
1

使用ASP.NET,並試圖實現友好的URL重寫,但我有一段時間使用正則表達式。基本上,我在域名後面直接檢查網址,看它是否使用法國加拿大文化,或者它是否是一個數字 - 而不是數字後跟字符。我需要捕捉以'fr-ca'或數字開頭的任何內容,並且這兩種情況都可以有'/'(正斜槓),但這都是...Url重寫正則表達式

fr-ca - 好
fr -ca/- GOOD
FR-CA/625 - GOOD
FR-CA/GD - BAD
FR-ca43/- BAD

1234 - GOOD
1234/- GOOD
1234 /克 - GOOD
1234g - BAD
1g34 - BAD

這是我想出的:^(fr-ca)?/?([0-9] +)? 但它似乎並沒有按照我想要的方式工作..所以我開始新鮮並想出了(^ fr-ca)|(^ [0-9]),但仍然不能按我想要的方式工作。請幫忙!

+0

檢查我的更新回答 – Kent

回答

2

不知道關於Asp.net,但正則表達式用grep進行測試。你可以嘗試在.NET中:

kent$ cat a 
fr-ca 
fr-ca/ 
fr-ca/625 
fr-ca/gd 
fr-ca43/ 
1234 
1234/ 
1234/g 
1234g 
1g34 

更新

kent$ grep -P "(^fr-ca$|^\d+$|^(fr-ca|\d+)/(\w|\d*)$)" a 
fr-ca 
fr-ca/ 
fr-ca/625 
1234 
1234/ 
1234/g 

-

以及這未必是最好的正則表達式,但將是最直接的一個。

它配襯串

^fr-ca$ 
or ^\d+$ 
or ^(fr-ca|\d+)/(\w|\d*)$ 

the above line can be broken down as well 
    ^(fr-ca|\d+)/(\w|\d*)$ : 

starting with fr-ca or \d+ 
then comes "/" 
after "/" we expect \w or \d* 
then $(end) 
+1

正則表達式說fr-ca/gd是正確的,但它不是 – Bobby

+0

它工作得很好 – Bobby

+0

是否可以真正解釋正則表達式? – Bobby

1

或許可以試試......

^(fr-ca|\d).*$

當然,這一個正則表達式匹配整個字符串(但因爲它有結束刺痛$錨)。你想抽出多場比賽嗎?

在重讀後:)

^(fr-ca|\d+)(\/\d+|\/)?$

+0

1234gg通過該表達式,它不應該! –

+0

「我需要捕捉以'fr-ca'開頭的任何東西或者是一個數字」:) –

+0

「,並且兩種情況都可以有尾隨的'/'(正斜槓),但這都是......」) –

1
^(\d+(\/\w*)?)$|^(fr-ca\/\d+)$|^(fr-ca\/?)$ 

這個工作對我所有的例子的光。我不確定你是否打算使用這個正則表達式,所以我不知道它是否捕獲到你想捕獲的東西。

2

什麼

^(fr-ca(?:\/\d*)?|[0-9]+(\/[a-zA-Z]*)?)$ 

看到它here on Regexr,你的全部的情況好,而不是壞的匹配。