用于从这种模式中提取数字的正则表达式“channelId = 4; 5; 66&”

时间:2015-08-04 11:08:20

标签: .net regex

我需要从一个由分号分隔的网址中提取一个数字列表

网址格式为channelId=4;5;66&fromdate=04-Aug-2015&todate=08-Aug-2015

列表的长度可以是任意数量(以网址的最大长度为准)

到目前为止,我已经得到了这个((;\d{1})|(;\d{2})|(\d{1};)|(\d{2};)),但这与'channelId'参数中的最后一个数字不匹配

3 个答案:

答案 0 :(得分:2)

你可以使用这个lookbehind正则表达式:

(?<=channelId=|;)\d+

RegEx Demo

答案 1 :(得分:1)

在.NET中,您可以利用HttpUtility.ParseQueryString顶部解析查询字符串。

  

ParseQueryString方法使用UTF8格式来解析查询字符串在返回的NameValueCollection中,URL编码的字符被解码,并且多次出现的相同查询字符串参数被列为单个条目,其中包含用逗号分隔每个值。

使用MSDN的示例:

NameValueCollection qscoll = HttpUtility.ParseQueryString(querystring);

// Iterate through the collection.
StringBuilder sb = new StringBuilder("<br />");
foreach (String s in qscoll.AllKeys)
{
   sb.Append(s + " - " + qscoll[s] + "<br />");
}

请注意,您需要引用System.Web(在System.Web.dll中),并为using System.Collections添加NameValueCollection

以下是获取channelId的示例:

var querystring = "channelId=4;5;66&fromdate=04-Aug-2015&todate=08-Aug-2015";
var qscoll = System.Web.HttpUtility.ParseQueryString(querystring);
var channelId = qscoll["channelId"];

enter image description here

答案 2 :(得分:0)

或者,您可以搜索整个数字序列,然后在每个分号上拆分结果:

a = 'channelId=4;5;66&fromdate=04-Aug-2015&todate=08-Aug-2015';
m = /channelId=(\d+(;\d+)*)/.exec(a)[1].split(';');
alert(m);