2012-10-03 213 views
4

儘管我遇到了困難,但我想要做的事情相當簡單。我有一個字符串,它是一個url,它的格式爲http://www.somedomain.com?id=someid我想要回顧的是someid部分。我想我可以使用正則表達式,但我不太好他們,這是我的嘗試:使用正則表達式從字符串中取回數字

Match match = Regex.Match(theString, @"*.?id=(/d.)"); 

我得到一個正則表達式異常說有一個錯誤解析正則表達式。我讀這個的方式是"any number of characters"然後字面"?id="跟着"by any number of digits"。我把數字放在一個組中,這樣我就可以將它們拉出來。我不確定這有什麼問題。如果有人能告訴我我做錯了什麼,我將不勝感激,謝謝!

回答

6

不需要Regex。只需使用內置的實用程序。

string query = new Uri("http://www.somedomain.com?id=someid").Query; 
var dict = HttpUtility.ParseQueryString(query); 

var value = dict["id"] 
+2

+1用於提示查詢字符串解析器。 – Amarghosh

2

嘗試

var match = RegEx.Match(theString, @".*\?id=(\d+)"); 
4

你有一對夫婦的錯誤在你的正則表達式。嘗試:

Match match = Regex.Match(theString, @".*\?id=(\d+)"); 

具體而言,I:

  • 改變*..*(點匹配所有非新行字符和*意味着零個或更多的前述)
  • 加入轉義序列在?之前,因爲問號是正則表達式中的特殊字符。這意味着零或前面的一個。
  • 改變/d.\d*(你有走錯路的斜線和你使用的點,這是上面的解釋,而不是*這也是如上所述)
1
  • 該錯誤可能是由於前*。正則表達式中的*字符匹配零個或多個以前的字符;所以它不能是第一個字符。
  • 可能是一個錯字,但快捷方式位數爲\d,不/d
  • .匹配任何字符,你需要匹配一個或多個數字 - 所以使用+
  • ?是一個特殊字符,因此它需要逃脫。

所以就變成:

Match match = Regex.Match(theString, @".*\?id=(\d+)"); 

話雖這麼說,正則表達式是不是這樣做的最佳工具;使用適當的查詢字符串解析器或事情最終會變得難以管理。

相關問題