例子:1. http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=32. http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html要求:把1.转成2.,这里面路径和参数的个数是变化的。很难写出来,请大家尽量给我点帮助吧
调试欢乐多
string str = "http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3";
str = r.Replace(str, "---").Replace('&', '-').Replace("=", "--")+".html";
好像没必要用正则,用字符串替换就可以了哦
str = str.Replace(".aspx?", "---").Replace('&', '-').Replace("=", "--") + ".html";
RegexBuddy
把1换成2那样呀,但是我这个正则是放在 配置文件中,程序只负责replace一次,所以要把逻辑都放到正则里,感觉有点难,都不知道能不能实现
string str = "http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3";
str = r.Replace(str, "something");
语句只能这样,处理都要靠正则
Regex r = new Regex(STRA);
string str = "http://blue/product/default.aspx?keyword=1&keyword=2&keyword3=3"; <---网址是变化的,参数个数是变化的
str = r.Replace(str, STRB);
^---语句是固定的
Response.Write str : http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html STRA=? STRB=?
using System;
using System.Text.RegularExpressions;
public class Test
{
const string strFormat = ".html";
const string strTag1 = "---";//?
const string strTag2 = "--";//=
const string strTag3 = "-";//& static void Main()
{
string strLink = "http://blue/product/default.aspx?keyword=1&keyword2=2&keyword3=3";
string strBaseLink = strLink.Substring(0, strLink.IndexOf("."));
strLink = strLink.Substring(strLink.IndexOf("?") + 1);
string strParams = "";
MatchCollection MCParams = Regex.Matches(strLink, @"(\w+)\=(\w+)(?#\w范围也许不够但是你可以自己加)");
for (int i = 0; i < MCParams.Count; i++)
{
string strKey = MCParams[i].Groups[2].Value;
if (i > 0)
{
strParams += strTag3 + MCParams[i].Groups[1].Value + strTag2+strKey;
}
else
{
strParams += strTag1 + MCParams[i].Groups[1].Value +strTag2+ strKey;
}
}
string strNewLink = strBaseLink + strParams + strFormat; //http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html
}
}
写下面的代码有些哗众取宠,只是个人比较喜欢研究这方面的问题,所以才写了这样的代码,事实上个人还是不推荐这样的代码的 Regex r = new Regex(@"(\.aspx\?|&)([^&=]+)=([^&=]+)(?!$)|(\.aspx\?|&)([^&=]*)(=)([^&=]*)(?=$)", RegexOptions.IgnoreCase);
//string str = "http://blue/product/default.aspx?keyword=1"; //输出:http://blue/product/default---keyword--1.html
string str = "http://blue/product/default.aspx?keyword=1&keyword2=2&keyword3=3"; //输出:http://blue/product/default---keyword--1-keyword2--2-keyword3--3.html
str = r.Replace(str, delegate(Match m) { if (m.Groups[1].Value.ToLower() == ".aspx?") return "---" + m.Groups[2].Value + "--" + m.Groups[3].Value; if (m.Groups[6].Value.ToLower() == "=" && m.Groups[4].Value.ToLower() == "&") return "-" + m.Groups[5].Value + "--" + m.Groups[7].Value + ".html"; if (m.Groups[6].Value.ToLower() == "=" && m.Groups[4].Value.ToLower() == ".aspx?") return "---" + m.Groups[5].Value + "--" + m.Groups[7].Value + ".html"; return "-" + m.Groups[2].Value + "--" + m.Groups[3].Value; });