3

我正在寻找一个看起来像这样的网址:

http://www.example.com/activated-alumina-desiccant/t101c5.aspx

并将其更改为:

http://www.example.com/Default.aspx?t=101&c=5

我还希望能够灵活地添加其他查询字符串变量,例如:

http://www.example.com/activated-alumina-desiccant/t101c5p232.aspx

这会让我:

http://www.example.com/Default.aspx?t=101&c=5&p=232

到目前为止,我有我需要的东西的开始,[^/]+$

这让我得到了 url 的最后一部分,但除此之外,我如何分解最后一点并分离 ino 查询字符串变量?我难住了!

这是正则表达式的去向: 在此处输入图像描述

4

3 回答 3

3

此正则表达式将拆分一个包含最多 3 个查询字符串变量的 URL:

([^/]+//+[^/]+/)[^/]+/(\w)?(\d+)?(\w)?(\d+)?(\w)?(\d+)?\.aspx

将其用于替换字符串:

"$1Default.aspx?$2=$3&$4=$5&$6=$7"

编辑:

如果尾随&=,例如 ,http://www.example.com/Default.aspx?t=101&=&=不会导致问题,您可以使用一个正则表达式,设置为转换预期的最大查询字符串变量数。此最大值受替换字符串中正则表达式引擎允许的捕获组数量的限制(9 个捕获组的绝对最大值为 4,99 的绝对最大值为 49)。

如果尾随&= 一个问题,您需要为预期的每个不同数量的查询字符串变量输入一个正则表达式。考虑到这一点,必须稍微修改正则表达式(2-querystring 示例):

正则表达式:([^/]+//+[^/]+/)[^/]+/(\w)(\d+)(\w)(\d+)\.aspx
替换:"$1Default.aspx?$2=$3&$4=$5"

于 2013-01-21T16:25:04.583 回答
0

注意:初学者 C# 代码。

Ideone演示

  string s="t101c5p2";
  string[]arr= Regex.Split(s,"(?<=[0-9])(?=[a-zA-Z])");
  foreach(String str in arr)
  {
    string replaceStr = new Regex("([a-z])([0-9])").Replace(str,"$1=$2");
    Console.WriteLine(replaceStr);
  }

输出:

t=101
c=5
p=2
于 2013-01-21T16:14:28.147 回答
0
string url = "http://www.example.com/activated-alumina/t101c5p232.aspx";
var segment = new Uri(url).Segments.Last();
var parameters = 
      String.Join("&", Regex.Matches(segment, @"([a-zA-Z]+)(\d+)")
                            .OfType<Match>()
                            .Select(m => m.Groups[1] + "=" + m.Groups[2]));

string result = "http://www.example.com/Default.aspx?" + parameters;
// http://www.example.com/Default.aspx?t=101&c=5&p=232

演示

于 2013-01-21T16:41:06.550 回答