本帖最后由 panwl83 于 2013-08-15 00:37:51 编辑

解决方案 »

  1.   

    这个算法其实是一个处理字符串内容中含有本站(www.abc.com)之外域名的方法
    主要处理两种文本
    一种是含有超链文本如:<a href='http://www.aaa.com'>aaa</a>、<a href='http://www.bbb.com'>bbb</a>
    一种是含有网址纯文本如:www.aaa.com、www.bbb.net、www.ccc.cn、www.abc.org等等
    分析,两种情况处理
    关于超链文的处理希望返回的结果是仅保留<a href='http://www.abc.com'>abc</a>
    关于网址纯文本处理希望返回结果是仅保留www.abc.com输入一串字符串分两次处理先过滤掉不符合规则的超链文本,再过滤掉不符合规则的网址纯文本
    这样应该能返回要的结果
      

  2.   

    自己看精通正则表达式第二版网上有PDF电子书
      

  3.   

    (?is)(<a[^>]*?href=(["'])?(http://www\.((?!abc)\w)+\.com[^"']*?)\1[^>]*?>.*?</a>|http://www\.((?!abc)\w)+\.com[^"']*?|www\.((?!abc)\w)+\.com)
      

  4.   

        protected void Page_Load(object sender, EventArgs e)
        {
            string iniStr = @"<a href='http://www.aaa.com/sadf/aaa.asp'>过滤一</a>asdf<a href='http://www.bbb.com'>过滤二</a><a href='http://www.abc.com'>abc网</a>afad www.bbb.com sdf www.abc.com";
            string filterword = iniStr;
            Response.Write(HttpUtility.HtmlEncode(filterword));
            Response.Write("<br/>");
            //过滤外链
            string s = iniStr;
            MatchEvaluator me = new MatchEvaluator(ABC);
            string r = Regex.Replace(s, @"(?is)<a[^>]*href=([""'])(?<href>.*?)\1>.*?</a>", me);
            //再过滤
            filterword = FilterLinkExcept(r);
            Response.Write(HttpUtility.HtmlEncode(filterword));
            //输出结果
            //asdf<a href='http://www.abc.com'>abc网</a>afad sdf www.abc.com        
        }    /// <summary>
        ///  仅保留www.abc.com超链文本
        /// </summary>
        /// <param name="match"></param>
        /// <returns></returns>
        private string ABC(Match match)
        {
            if (!match.Groups["href"].Value.ToLower().Contains("www.abc.com"))
                return "";
            else return match.Value;
        }    /// <summary>
        /// 仅保留www.abc.com网址文本
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string FilterLinkExcept(string text)
        {
            string validStr = "";        
            //(?is)(<a[^>]*?href=(["'])?(http://www\.((?!abc)\w)+\.com[^"']*?)\1[^>]*?>.*?</a>|http://www\.((?!abc)\w)+\.com[^"']*?|www\.((?!abc)\w)+\.com)
            Regex reg = new Regex(@"www\.((?!abc)\w)+\.com");        
            validStr = reg.Replace(text, "");
            return validStr;
        }
      

  5.   

    上面是网上平凑实现。
    多谢@伤脑筋
    实际应用中iniStr长度nvarchar(5000)
    问题:
    不知道还有没有更高性能方案或者更漂亮的写法
      

  6.   

    建立一个库,将要替换的内容都扔进库里面,每次使用前replace一下即可。