regex.replace查询字符串参数

时间:2010-02-15 22:46:37

标签: c# regex replace

我不知道这是否可能,我有以下正则表达式(?< = [\?| \&])(?[^ \?= \&#] +)=? ([^ \ = \&安培;#] *)及它将URL拆分为键/值对。我想在替换函数中使用它来构建一些标记:

string sTest = "test.aspx?width=100&height=200&";
            ltTest.Text = Regex.Replace(sTest, @"(?<=[\?|\&])(?<key>[^\?=\&\#]+)=?(?<value>[^\?=\&\#]*)&",
                                                "< div style='width:$2px; height:$2px; border:solid 1px red;'>asdf</div>");

这是产生:

test.aspx?<div style='width:100px; height:100px; border:solid 1px red;'>asdf</div><div style='width:200px; height:200px; border:solid 1px red;'>asdf</div>

有什么想法吗?

提前致谢!

2 个答案:

答案 0 :(得分:1)

首先,.net有更好的方法来处理你的问题。考虑HttpUtility.ParseQueryString

string urlParameters = "width=100&height=200";
NameValueCollection parameters = HttpUtility.ParseQueryString(urlParameters);
s = String.Format("<div style='width:{0}px; height:{1}px;'>asdf</div>",
                   parameters["width"], parameters["height"]);

这会照顾你,所以这是一个更好的选择。


接下来,对于这个问题,您的代码失败了,因为您错误地使用了它。您正在寻找成对的key=value<div width={value} height={value}>替换每一对。所以你最终得到了许多DIV作为价值观 例如,您应该进行更多的手术匹配(添加一些检查):

string width = Regex.Match(s, @"width=(\d+)").Groups[1].Value;
string height = Regex.Match(s, @"height=(\d+)").Groups[1].Value;
s = String.Format("<div style='width:{0}px; height:{1}px;'>asdf</div>",
                   width, height);

答案 1 :(得分:0)

是否有理由要使用正则表达式来处理这个而不是Request.QueryString函数来获取数据并将其放入字符串中?

现在你必须制作一个更具体的正则表达式来获取每个键/值对的值并将它们放入替换中。