不好意思,可能表述的不够清楚,没办法从小学1年级开始,语文就没及格过。看下这个吧,实现的效果:http://www.212137.com/key2url.php

解决方案 »

  1.   

    我写了一个方法,但是因为打不开楼主所给链接,所以不知道结果正不正确,当然,效率是否有楼主原来的高也就没法测试了,仅供参考
    前面做了一下排序,主要是为了解决一个关键字中包含另外一个关键字的问题,如果能保证数组中后面元素不包含前面元素内容,可以省去排序这一步
    实现环境:vs.net2005,c#        string yourStr = "This is Test!<br> Welcome to http://www.212137.com! <br>中国 江苏 镇江 丹徒 高桥 !<br>这是乡土高桥,站长王乐欢迎您!<br>作为中国 江苏 镇江 丹徒 高桥的唯一门户网站,我们倡导文明健康的上网方式!";
            string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" };
            List<int> list2 = new List<int>();
            foreach (string s in keyArr)
            {
                list2.Add(s.Length);
            }
            int[] len = list2.ToArray();
            Array.Sort(len, keyArr);
            Array.Reverse(keyArr);
            List<string> list1 = new List<string>(keyArr);
            StringBuilder sb = new StringBuilder();
            sb.Append("(");
            foreach (string s in list1)
            {
                sb.Append(s);
                sb.Append("|");
            }
            if (sb.Length > 0)
            {
                sb.Remove(sb.Length - 1, 1);
            }
            sb.Append(")");
            string exp = sb.ToString();        string resultStr = Regex.Replace(yourStr, @"" + exp + "", @"<a href=""http://www.212137.com?key=$1"">$1</a>", RegexOptions.IgnoreCase);
            Response.Write(resultStr);
      

  2.   

    非常感谢lxcnn(过客)
    你是个好人发现正则还真是好,得学习下。要不推荐一些好的资料给我吧,电子文档或者书也行
      

  3.   

    我学正则的教程就一个
    http://www.regexlab.com/zh/regref.htm
    工具
    match tracer + vs.net学习方法,没有太好的方法,就是大量练习了
      

  4.   

    再问一个:原来的每个关键字都对应一个网址是有规律的 http://www.212137.com?key=关键字
    如果每个关键字都对应一个网址,并且这些网址是没有规律的,怎么办?如:
    string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" };所对应的网址是
    string[] keyArr = new string[] { "www.zhenjiang.com", "www.2.com", "www.3.com", "www.4.com", "www.5.com", "www.6.com" };在这种情况下该怎么办呢?
      

  5.   

    Hashtable ht;protected void Button1_Click(object sender, EventArgs e)
    {
            string yourStr = "This is Test!<br/> Welcome to http://www.212137.com! <br/>中国 江苏 镇江 丹徒 高桥 !<br/>这是乡土高桥,站长王乐欢迎您!<br/>作为中国 江苏 镇江 丹徒 高桥的唯一门户网站,我们倡导文明健康的上网方式!";
            string[] keyArr = new string[] { "镇江", "丹徒", "乡土高桥", "高桥", "南北大河", "江苏" };
            string[] keyArr2 = new string[] { "www.zhenjiang.com", "www.2.com", "www.3.com", "www.4.com", "www.5.com", "www.6.com" };
            ht = new Hashtable();
            for (int i = 0; i < keyArr.Length; i++)
            {
                ht[keyArr[i]] = keyArr2[i];
            }
            List<int> list2 = new List<int>();
            foreach (string s in keyArr)
            {
                list2.Add(s.Length);
            }
            int[] len = list2.ToArray();
            Array.Sort(len, keyArr);
            Array.Reverse(keyArr);
            List<string> list1 = new List<string>(keyArr);
            StringBuilder sb = new StringBuilder();
            sb.Append("(");
            foreach (string s in list1)
            {
                sb.Append(s);
                sb.Append("|");
            }
            if (sb.Length > 0)
            {
                sb.Remove(sb.Length - 1, 1);
            }
            sb.Append(")");
            string exp = sb.ToString();        string resultStr = Regex.Replace(yourStr, @"" + exp + "",new MatchEvaluator(regReplace), RegexOptions.IgnoreCase);
            Response.Write(resultStr);
    }private string regReplace(Match m)
    {
            return @"<a href="""+ ht[m.Value] +@""">"+ m.Value +"</a>";
    }