本帖最后由 dreams1981 于 2010-04-09 17:28:10 编辑

解决方案 »

  1.   


     //搜索关键词高亮显示函数
            public static string HighLightKeyWord(string pain,string keyword)
            {            //搜索关键词高亮函数By JN 2006.11.30
                System.Text.RegularExpressions.MatchCollection m = Regex.Matches(pain, keyword, RegexOptions.IgnoreCase);
                //忽略大小写搜索字符串中的关键字
                for (int j = 0; j < m.Count; j++)//循环在匹配的子串前后插东东
                {
                    //j×31为插入html标签使pain字符串增加的长度:
                    pain = pain.Insert((m[j].Index + keyword.Length + j * 31), "</font>");//关键字后插入html标签
                    pain = pain.Insert((m[j].Index + j * 31), "<font color=#ff0000>");//关键字前插入html标签
                }            //搜索关键词高亮函数By JN 2006.11.30
                return pain;
            }第二个是JS 的解决办法
    http://hi.baidu.com/yisqiu/blog/item/f8be5c60359c3fdf8db10da7.html
    http://www.blogjava.net/faithwind/archive/2007/06/26/126387.html
      

  2.   

    jquery 支持 css 选择其  xpath 查询 语法可以很准确的帮助你定位需要的目标集合。
      

  3.   

    #1楼 wosizy 的方法不行,报:“索引超出范围。必须为非负值并小于集合大小。参数名: startIndex ”错的 foren_whb 我是想看看这里应该也有人处理过这样的问题的
      

  4.   

    Regex.Replace("", "(?i)(?<![><][^<>]*)", "<a>$&</a>");
    http://topic.csdn.net/u/20091028/13/df7cd47d-0f30-4361-9695-a6aa547b8d7a.html
      

  5.   


    闻着内容而至不知道楼主要在前台处理,还是在后台处理//后台C#处理方法
    string keyword = "2004";
    string test = "<li><a href=\"/news/20041025114305.htm\">华北院召开2004年三季度工作总结会议</a></li><li><a href=\"/news/20041025114305.htm\">d华北院召开2004年三季度工作总结会议</a></li>";
    Regex reg = new Regex(@"(?:^|>)[^<>]*(?:<|$)");
    string result = reg.Replace(test, delegate(Match m) { return m.Value.Replace(keyword, "<font color='red'>" + keyword + "</font>"); });
    Response.Write(result);//前台javascript处理方法
    <script type="text/javascript">
    var keyword = "2004";
    var str ="<li><a href=\"/news/20041025114305.htm\">华北院召开2004年三季度工作总结会议</a></li><li><a href=\"/news/20041025114305.htm\">d华北院召开2004年三季度工作总结会议</a></li>";
    var re = /(?:^|>)[^<>]*(?:<|$)/g;
    str = str.replace(re, function($0)
    {
        return $0.replace(keyword, "<font color='red'>" + keyword + "</font>");
    });
    document.write(str);
    </script>
      

  6.   


    我对其它方式不是很了解,但如果楼主对效率要求较高,而要处理的内容很规范的话,可以考虑XML或xpath等方式处理,会比正则效率高XML等方式优势在于处理效率高,局限性在于对格式要求严格,处理不了格式不规范的内容
    正则表达式优势在于通用,能处理不规范的内容,但由此而牺牲了一定的性能,尤其是在对正则不了解,语法被滥用的情况下更是如此
      

  7.   

    (过客) 大哥string keyword = "2004";
    string test = "<li><a href=\"/news/20041025114305.htm\">华北院召开2004年三季度工作总结会议</a></li><li><a href=\"/news/20041025114305.htm\">d华北院召开2004年三季度工作总结会议</a></li>";
    Regex reg = new Regex(@"(?:^|>)[^<>]*(?:<|$)");
    string result = reg.Replace(test, delegate(Match m) { return m.Value.Replace(keyword, "<font color='red'>" + keyword + "</font>"); });
    Response.Write(result);这种方式是不是在ASP.NET  1.1 下不行呢?
      

  8.   


    都什么年代了,还在用.NET 1.1啊有些年头不用了,记得好像是.NET 1.1中的正则不支持匿名方法
    string keyword = "2004";
    private string regReplace(Match m)
    {
        return m.Value.Replace(keyword, "<font color='red'>" + keyword + "</font>");
    }
    //调用
    string test = "<li><a href=\"/news/20041025114305.htm\">华北院召开2004年三季度工作总结会议</a></li><li><a href=\"/news/20041025114305.htm\">d华北院召开2004年三季度工作总结会议</a></li>";
    Regex reg = new Regex(@"(?:^|>)[^<>]*(?:<|$)");
    string result = reg.Replace(test, new MatchEvaluator(regReplace));
      

  9.   

    现在还有一个问题 就是如果连接是这样的话 有问题
    string test = "<li><a href=\"/news/20041025114305.htm\">华北院召开2004年三季度工作总结会议</a></li><li><a href=\"/news/20041025114305.htm\">d华北院召开2004年三季度工作总结会议</a></li><li><a href=\"/news/20041025114305.htm\"><<2004年三季度工作总结会议报告>></a></li>";
    也就是标题包含了<< >>这些符号
      

  10.   

    又或或者“<”“>”这样的符号在标题里,能不能,<a>只处理这里的内容</a>,只处理超连接标题的内容
      

  11.   


    正则替换一下,其它不变
    Regex reg = new Regex(@"(?isn)(?<=<a\b[^>]*>)((?!</?a\b).)*(?=</a>)");