2012-11-22 62 views
1

可能重複:
Get individual query parameters from Uri如何從C#中的URL查詢字符串提取值?

我有一個URL是這樣的:

http://somedomain.com/website/webpage.aspx?token=123456&language=English

我的目標是從中提取123456。查詢字符串參數中只能有一個付款ID。我可以使用什麼樣的正則表達式?順便說一句,我正在使用C#(.NET)。

感謝

+5

退房[的System.Uri(HTTP ://msdn.microsoft.com/en-us/library/system.uri.aspx)和[HttpUtility.ParseQueryString](http://msdn.microsoft.com/en-us/library/ms150046.aspx) – nhahtdh

回答

4

token=(\d+)應該做的伎倆

爲迎合aplhas以及您可以執行:

token=([a-zA-Z0-9+/=]+)明確匹配您期望的字符。這與「token =」相匹配,然後捕獲與字符類匹配的所有後續字符,即a-z,A-Z,0-9,+,/和=。

token=([^&#]+)除了你知道可以完成令牌的那些匹配任何字符。這與「token =」匹配,然後捕獲所有字符,直到第一個&,#或字符串的末尾。

+0

謝謝。順便說一下,令牌可以包含A-Z,a-z,0-9,+,/,= – VVV

+0

@VVV:那麼''[?&] token =([^&] *)'然後呢? – Cameron

+1

不要使用正則表達式來解析C#中的URL! –

0

使用

(?:token=)(?<TokenValue>[^&]+) 

,並在C#中獲得只是由值:

myMatch.Groups["TokenValue"].Value 
+0

不要使用正則表達式來解析C#中的URL! –

+0

@macek我不知道。 – OmegaMan

+0

'(?:token =)(? [^&] +)'是一個正則表達式... –

2

不要使用正則表達式這一點。 C#有內置的方法!

var queryString = string.Join(string.Empty, url.Split('?').Skip(1)); 
System.Web.HttpUtility.ParseQueryString(queryString) 

See more details here

+1

我寧願使用'System.Uri'而不是'Split'來獲取查詢字符串。 – nhahtdh

6

使用的System.Uri類

URI類的Query屬性返回整個查詢作爲字符串

Uri bUri = new Uri("http://somedomain.com/website/webpage.aspx 
        ?token=123456&language=English"); 

var query = bUri.Query.Replace("?", ""); 

現在查詢將字符串值"token=123456&language=English"

然後使用LINQ產生詞典從查詢屬性

var queryValues = query.Split('&').Select(q => q.Split('=')) 
        .ToDictionary(k => k[0], v => v[1]); 

然後,您可以訪問值

queryValues["token"] 

,這將給你123456