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"。我把数字放在一个组中,这样我就可以把它们拉出来。我不确定这有什么问题。如果有人能告诉我我做错了什么,我将不胜感激,谢谢!

4

4 回答 4

6

不需要正则表达式。只需使用内置实用程序。

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

var value = dict["id"]
于 2012-10-03T17:32:12.007 回答
4

您的正则表达式中有几个错误。试试这个:

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

具体来说,我:

  • 更改*..*(点匹配所有非换行符,*表示前面的零个或多个)
  • 在 the 之前添加了一个转义序列,?因为问号是正则表达式中的特殊字符。它表示前面的零个或一个。
  • 改为/d.\d*你的斜线走错了方向,你使用了点,上面已经解释过,而不是*上面也解释过)
于 2012-10-03T17:28:02.133 回答
2

尝试

var match = RegEx.Match(theString, @".*\?id=(\d+)");
于 2012-10-03T17:28:01.720 回答
1
  • 该错误可能是由于前面的*. 正则表达式中的*字符匹配零次或多次出现的前一个字符;所以它不能是第一个字符。
  • 可能是错字,但 digit 的快捷方式是\d, not/d
  • .匹配任何字符,您需要匹配一个或多个数字 - 所以使用+
  • ?是一个特殊字符,所以需要转义。

所以它变成:

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

话虽如此,正则表达式并不是最好的工具。使用适当的查询字符串解析器,否则事情最终将变得难以管理。

于 2012-10-03T17:31:05.960 回答