正则表达式提取Url中QueryString键值(搜索关键字的提取)

起始:流量统计系统中衍生的小功能

目的:提取Url中Querystring指定键的值

BETA: (?<=key\=).*?(?=\&|$)

加强: (?<=(\&|\?|^)key\=).*?(?=\&|$)

示例代码

ExpandedBlockStart.gif 示例代码
 
   
private const string _regexSEQuery = @" (?<=(\&|\?|^)({0})\=).*?(?=\&|$) " ;
/// <summary>
/// 查找关键字
/// <remarks>更多访问http://www.cnblogs.com/ronli/</remarks>
/// <param name="querykey"> 多个QueryKey按优先顺序用'|'分隔 </param>
/// </summary>
private string RegexMatch( string input, string querykey, RegexOptions options)
{
return Regex.Match(input, string .Format(_regexSEQuery, querykey), options).Value.Trim();
}

/// <summary>
/// 复合查找关键字
/// <remarks>更多访问http://www.cnblogs.com/ronli/</remarks>
/// <param name="querykey"> 多个QueryKey按优先顺序用'&'(连接)或'|'(短路)分隔 </param>
/// </summary>
private string RegexMatches( string input, string querykey, RegexOptions options)
{
string value = "" ;
string [] orKeys = querykey.Split( ' | ' );
string [] andKeys;

foreach ( string or in orKeys)
{
andKeys
= or.Split( ' & ' );
foreach ( string and in andKeys)
{
value
+= (RegexMatch(input, and, options) + " " );
}
if (value != "" ) break ;
}
return value.Trim();
}

By Ron.li (http://www.cnblogs.com/ronli/)

实际应用:

提取搜索引擎的搜索关键字。

应用代码

ExpandedBlockStart.gif 应用代码
 
   
/// <summary>
/// 复合查找关键字
/// <summary>
 /// <remarks>更多访问http://www.cnblogs.com/ronli/</remarks>
private string GetSEQuery(HttpContext context)
{
// 搜索关键字
string query = "" ;
string queryStrings = context.Server.UrlDecode(context.Request.UrlReferrer.Query);

if (visit.RefDomain.Contains( " bing " ))
query
= RegexMatch(queryStrings, " q " , RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains( " google " ))
// q为空用oq代替
query = RegexMatches(queryStrings, " q|oq " , RegexOptions.IgnoreCase);
//同 时提取q和oq(空格连接)
// query = RegexMatches(queryStrings, "q&oq", RegexOptions.IgnoreCase);
// 提取q,若为空用aq和oq代替
// query = RegexMatches(queryStrings, "q|aq&oq", RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains( " baidu " ))
query
= RegexMatch(queryStrings, " wd " , RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains( " yahoo " ))
query
= RegexMatch(queryStrings, " p " , RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains( " sousou " ))
query
= RegexMatch(queryStrings, " w " , RegexOptions.IgnoreCase);
else if (visit.RefDomain.Contains( " ask " ))
query
= RegexMatch(queryStrings, " q " , RegexOptions.IgnoreCase);

return query;
}

 

转载于:https://www.cnblogs.com/ronli/archive/2010/02/02/RegexMatchQueryString.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值