正則表達式作為一種分析技術,在很多地方都可以使用,最基礎的可能人人都會。再此通過一系列簡單的例子講解正則表達式。 給定一個地址如何分析需要的數據,例如如下的網址,分析各個查詢字符串 基本思路是, 1先得到?後邊的部分, 2再根據&和=分割 1先得到?後邊的部分, 匹配查詢字符串的正則表達式:\?(?<querystring>([^&]+&?)+),去掉命名部分的正則表達式為:\?([^&]+&?)+ 匹配到'?word=test&tn=sitehao123&ie=utf-8 \?([^&]+&?)+具體含義 : \?表示已 ?開頭,由於?在正則表達式的中有特殊含義,所以需要一個斜槓 \轉義。 [^&]+表示匹配不是&的任意一個或者多個字符 &? 表示&出現一次或者不出現 \?([^&]+&?)+的整體含義就是 1匹配以?開頭 2 2.1匹配不是&的多個字符 2.2匹配&一個或者沒有 2.3 重復2.1,2.2一次或者多次 3 把(([^&]+&?)+)部分匹配到的字符命名為querystring則正則表達式變為:\?(?<querystring>([^&]+&?)+) 2再根據&和=分割 分析查詢字符串的正則表達式為:((?<key>[^&=]+)=(?<value>[^&=]+))+,去掉命名部分的正則表達式為:(([^&=]+)=([^&=]+))+ [^&=]+表示匹配不是&=的任意一個或者多個字符 (([^&=]+)=([^&=]+))+的整體含義就是 1匹配不是&=的任意一個或者多個字符 2匹配等號= 3匹配不是&=的任意一個或者多個字符 4重復以上1,2,3 把1匹配到的字符命名為key,把3匹配到的字符命名為value,則正則表達式變為((?<key>[^&=]+)=(?<value>[^&=]+))+ 測試的代碼如下:
private static void Test() { string url = "http://www.baidu.com/s?word=test&tn=sitehao123&ie=utf-8"; Regex reg = new Regex(@"\?(?<querystring>([^&]+&?)+)"); Match m = reg.Match(url); string querystring = m.Groups["querystring"].Value; Regex reg2 = new Regex(@"((?<key>[^&=]+)=(?<value>[^&=]+))+"); Dictionary<string, string> querystringKeyValue = new Dictionary<string, string>(); foreach (Match item in reg2.Matches(querystring)) { querystringKeyValue.Add(item.Groups["key"].Value, item.Groups["value"].Value); } }