替换文本内容里面含有超链接的属性

由于工作的原因,需要将字符串里面的所有超链接里的属性改成“target=_blank”,我写了一个函数.写的很烂啊!我看的都很烂!希望大家指点下!给一个更好的方法!

 protected void Page_Load(object sender, EventArgs e)
    {
        string txtContent = "测试用例<a href='www.baidu.com' target='_parent' title='jesse'>ss</a>年时间地哦<a title='jesse' href='www.baidu.com'>ss</a>年时间地哦<a href='www.baidu.com'>ss</a>年时间地哦<a href='www.baidu.com'>ss</a>年时间地哦<a href='www.baidu.com'>ss</a>";
        txtContent=MatchTarget(txtContent);
        Response.Write(txtContent);
    }

    private string MatchTarget(string txtContent)
    {
        Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""\s]?)(?<href>[^'""\s]*)\1[^>]*?>");
        MatchCollection match = reg.Matches(txtContent);
        //存储匹配超链接
        string[] url = new string[match.Count];
        //存储操作之后的超链接
        string[] newUrl = new string[match.Count];
        int i = 0;
        foreach (Match m in match)
        {
            string replaceStr = m.ToString().Replace("<","");
            replaceStr = replaceStr.Replace(">", "");
            url[i] = m.ToString();
            newUrl[i] = Find(replaceStr);
            i++;
        }
        //将新的链接取代旧的链接
        for (int j = 0; j < match.Count; j++)
        {
            bool falg = txtContent.IndexOf(url[j]) > -1;
            if (falg)
            {
               txtContent=txtContent.Replace(url[j], newUrl[j]);
            }
        }
        return txtContent;     
    }

    //查找超链接里面属性-target='_blank'
    private string Find(string content)
    {
        if ((content.IndexOf("target=") > -1))
        {
            if (!(content.IndexOf("target='_blank'") > -1))
            {
                string[] strArray = content.Split(' ');
                StringBuilder strContent = new StringBuilder();
                for (int i = 0; i < strArray.Length; i++)
                {
                    if(strArray[i].ToString().IndexOf("target=")>-1)
                    {
                        strArray[i] = "target='_blank'";
                    }                  
                    strContent.Append(strArray[i].ToString()+" ");              
                }
                content = strContent.ToString();
            }         
        }
        else
        {
            content = content + " target='_blank'";
        }
        return "<"+content+">";
    }

  

posted @ 2012-06-22 17:17  jesse-win  阅读(310)  评论(0)    收藏  举报