求一正则表达式,提取URL中的id值

lkf181 2019-02-06 03:26:27
URL中有id 和uid 我只想提取id值:
https://detail.xx.com/item.htm?uid=1549427204506&&id=124454445744&ali_trackid=2:mm_11054438_25822918_99096389:1549427448_213_1594518799

下边代码提取到的是uid的值,另外奇怪的是:我将改成 string strRegex = @"id=(\d[10,15])"; 竟然什么也提取不到!!!!

class Program
{
static void Main(string[] args)
{
string modle = "https://detail.xx.com/item.htm?uid=1549427204506&&id=124454445744&ali_trackid=2:mm_11054438_25822918_99096389:1549427448_213_1594518799";
string strRegex = @"id=(\d+)";


string id = RegexGetString(modle, strRegex);
Console.WriteLine(id);
Console.ReadKey();
}
static string RegexGetString(string pStrUrl, string pStrRegex)
{

string strSuccess = string.Empty;
string rsult = "";
Match match = Regex.Match(pStrUrl, pStrRegex);
if (match.Success)
{
rsult = match.Groups[1].Value;
}


bool b = Regex.IsMatch(rsult, @"\d{10,15}");//出于谨慎再次检验

if (b)
{
strSuccess = rsult;
}

return strSuccess;
}
}
...全文
1112 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lkf181 2019-02-07
  • 打赏
  • 举报
回复
引用 5 楼 无机战士 的回复:
			string s = "https://detail.xx.com/item.htm?uid=1549427204506&&id=124454445744&ali_trackid=2:mm_11054438_25822918_99096389:1549427448_213_1594518799";
string r = HttpUtility.ParseQueryString(s)["id"];
Console.WriteLine(r);
Console.ReadKey();

引用System.Web程序集。


高手在民间啊!!谢谢
dalmeeme 2019-02-06
  • 打赏
  • 举报
回复
			string s = "https://detail.xx.com/item.htm?uid=1549427204506&&id=124454445744&ali_trackid=2:mm_11054438_25822918_99096389:1549427448_213_1594518799";
string r = HttpUtility.ParseQueryString(s)["id"];
Console.WriteLine(r);
Console.ReadKey();

引用System.Web程序集。
  • 打赏
  • 举报
回复
// System.Net.HttpListenerRequest.Helpers
internal static void FillFromString(NameValueCollection nvc, string s, bool urlencoded, Encoding encoding)
{
	int num = (s != null) ? s.Length : 0;
	for (int i = (s.Length > 0 && s[0] == '?') ? 1 : 0; i < num; i++)
	{
		int num2 = i;
		int num3 = -1;
		while (i < num)
		{
			char c = s[i];
			if (c == '=')
			{
				if (num3 < 0)
				{
					num3 = i;
				}
			}
			else if (c == '&')
			{
				break;
			}
			i++;
		}
		string text = null;
		string text2;
		if (num3 >= 0)
		{
			text = s.Substring(num2, num3 - num2);
			text2 = s.Substring(num3 + 1, i - num3 - 1);
		}
		else
		{
			text2 = s.Substring(num2, i - num2);
		}
		if (urlencoded)
		{
			nvc.Add((text == null) ? null : HttpListenerRequest.Helpers.UrlDecodeStringFromStringInternal(text, encoding), HttpListenerRequest.Helpers.UrlDecodeStringFromStringInternal(text2, encoding));
		}
		else
		{
			nvc.Add(text, text2);
		}
		if (i == num - 1 && s[i] == '&')
		{
			nvc.Add(null, "");
		}
	}
}
lkf181 2019-02-06
  • 打赏
  • 举报
回复
研究出来了 应该是:[?|&]id=(\d{10,15})
lkf181 2019-02-06
  • 打赏
  • 举报
回复
不是 那个id前面不一定有& id有可能是在最前面,即:
https://detail.xx.com/item.htm?id=124454445744&uid=1549427204506&&i&ali_trackid=2:mm_11054438_25822918_99096389:1549427448_213_1594518799
xuzuning 2019-02-06
  • 打赏
  • 举报
回复
你要去的是 id 而非 uid 所以要 string strRegex = @"&id=(\d+)"; 另外 string strRegex = @"id=(\d[10,15])"; 应写作 string strRegex = @"id=(\d{10,15})"; string strRegex = @"id=(\d[10,15])"; 只能匹配到 uid=1549427204506 中的 15 于是 bool b = Regex.IsMatch(rsult, @"\d{10,15}");//出于谨慎再次检验 就过于谨慎了

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧