Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
URL查询字符串的C#正则表达式_C#_Regex_Url_Query String - Fatal编程技术网

URL查询字符串的C#正则表达式

URL查询字符串的C#正则表达式,c#,regex,url,query-string,C#,Regex,Url,Query String,我得到了以下场景: 我得到一个附属网络URL,需要附加一个适当的URL参数用于跟踪目的(subID) 实际问题是:在某些情况下,甚至一个分支网络支持不同的查询字符串格式。例如: 1) http:/ /impde.sampleaffiliate.com/imp?pop(over)g(XXXXX)a(XXX)subid(subIdValue) 或 分支网络的识别非常简单[url.Contains(“sampleaffiliate”)],但要获取查询字符串格式,我使用正则表达式: //查询字符串参数

我得到了以下场景:

我得到一个附属网络URL,需要附加一个适当的URL参数用于跟踪目的(subID)

实际问题是:在某些情况下,甚至一个分支网络支持不同的查询字符串格式。例如:

1) http:/ /impde.sampleaffiliate.com/imp?pop(over)g(XXXXX)a(XXX)subid(subIdValue)

分支网络的识别非常简单
[url.Contains(“sampleaffiliate”)]
,但要获取查询字符串格式,我使用正则表达式:

//查询字符串参数值在括号中,例如?a(12312)b(12343432)c(4242)
正则表达式参数括号=新正则表达式(@“^[\?]{1}\w+(\(.*)+$”;
//查询字符串参数值由符号和等号分隔,例如?a=12312&b=12343432&c=4242
正则表达式参数swithampersand=新正则表达式(@“^[\?]{1}.+(\&\w+\=.+)+$”;
这些在“正常情况”下工作正常

但这里还有一个额外的困难-请查看以下URL:

http:/ /pdt.sampleaffiliate.com/click?a(AAA)p(BBB)prod(CCC)ttid(DDD)url(http:/ /www.example.com/item.asp?param1=EEE&param2=FFF&param3=GGG)
在这种情况下,他们在查询字符串中使用
名称(值)名称(值)
符号,但作为最后一个参数(“url”)的值,在
&name=value&name=value
符号中还有另一个url,这使得正则表达式很难看到这两个参数中的哪一个是应该使用的

对于最后一个示例,我当前的正则表达式在IsMatch(uri.Query)上都返回“true”

有没有办法解决这个问题


提前谢谢

您可以使用
System.Web.HttpUtility
类的static
ParseQueryString()
方法,该方法返回参数和值的
NameValueCollection

Uri myUri = new Uri("http://clkde.sampleaffiliate.com/click?p=XXX&a=XXX&g=XXX&subid=subIdValue");
string param1 = HttpUtility.ParseQueryString(myUri.Query).Get("p");

查看上的文档,您可以使用
System.Web.HttpUtility
类的static
ParseQueryString()
方法返回参数和值的
NameValueCollection

Uri myUri = new Uri("http://clkde.sampleaffiliate.com/click?p=XXX&a=XXX&g=XXX&subid=subIdValue");
string param1 = HttpUtility.ParseQueryString(myUri.Query).Get("p");
查看上的文档,您得到的“困难链接”没有正确的URL编码,因此我怀疑内置的ParseQueryString可能无法工作(我认为这很不幸超出了您的控制范围)

您可以使用以下正则表达式将其解析为多个片段:

^[\?]{1}(\w+\([^\)]+\))+$

a(AAA)
p(BBB)
prod(CCC)
ttid(DDD)
url(http://www.example.com/item.asp?param1=EEE&param2=FFF&param3=GGG)
首先使用这个正则表达式;如果返回的是匹配项,请使用它。如果失败,则使用内置的ParseQueryString。

您获得的“困难链接”没有正确的URL编码,因此我怀疑内置的ParseQueryString可能无法工作(我认为这很不幸超出了您的控制范围)

您可以使用以下正则表达式将其解析为多个片段:

^[\?]{1}(\w+\([^\)]+\))+$

a(AAA)
p(BBB)
prod(CCC)
ttid(DDD)
url(http://www.example.com/item.asp?param1=EEE&param2=FFF&param3=GGG)

首先使用这个正则表达式;如果返回的是匹配项,请使用它。如果失败,则使用内置的ParseQueryString。

您是否尝试使用.net framework中的
Uri
类解析URL字符串,在该类中可以使用querystring作为属性进行处理。这里有更多详细信息:@saravanan Yea,我想使用
ParseQueryString()
,但不幸的是,它似乎只能解析和符号(&name=value&name=value),而不能解析自定义符号,比如括号符号(name(value)name(value))。还是有可能呢?您是否尝试在.net framework中使用
Uri
类解析URL字符串,您可以在其中使用querystring作为属性进行处理。这里有更多详细信息:@saravanan Yea,我想使用
ParseQueryString()
,但不幸的是,它似乎只能解析和符号(&name=value&name=value),而不能解析自定义符号,比如括号符号(name(value)name(value))。或者它是可能的吗?是的,我想使用
ParseQueryString()
,但不幸的是,它似乎只能解析与符号(&name=value&name=value),而不能解析自定义符号,比如括号符号(name(value)name(value))。或者这是可能的吗?你需要写一个解析器,它不会很复杂,只需要花一点时间!是的,我想使用
ParseQueryString()
,但不幸的是,它似乎只能解析和符号(&name=value&name=value),而不能解析自定义符号,比如括号符号(name(value)name(value))。或者这是可能的吗?你需要写一个解析器,它不会很复杂,只需要花一点时间!