关于正则表达式获取FCKEditor控件上传图片地址

来源:互联网 发布:火狐 谷歌 知乎 编辑:程序博客网 时间:2024/05/16 14:39

最近用asp.net做了一个网站,做的是一个小宾馆的门户网站,客户要求后台添加客房描述的时候可以上传图片,并从图片中取出一张图片,作为客房列表显示之用。我用的是FCKEditor控件。

以下为代码部分,

1、传入客房描述,将客房描述中所有图片的src取出,放入集合中,并返回集合

        private static List<string> GetInputImgUrls(string HTMLStr)
        {
            List<string> pics = new List<string>();

            string str = string.Empty;
            Regex r1 = new Regex(@"<input/s+[^>]*/s*src/s*=/s*([']?)(?<url>/S+)(/S[']?)[^>]*>", RegexOptions.IgnoreCase);
            MatchCollection urls1 = r1.Matches(HTMLStr);
            foreach (Match match1 in urls1)
            {
                if (match1.Success)
                {
                    str = match1.Result("${url}");
                    pics.Add(str.Substring(1));
                }
            }
            if (pics.Count == 0)
            {
                Regex r2 = new Regex(@"<img/s+[^>]*/s*src/s*=/s*([']?)(?<url>/S+)(/S[']?)[^>]*>", RegexOptions.IgnoreCase);
                MatchCollection urls2 = r2.Matches(HTMLStr);
                foreach (Match match2 in urls2)
                {
                    if (match2.Success)
                    {
                        str = match2.Result("${url}");
                        pics.Add(str.Substring(1));
                    }
                }
            }
            return pics;
        }

2、从集合中取出第一张作为显示

        public static string getFirstImageUrl(string url)
        {

            List<string> list = GetInputImgUrls(url);
            if (list.Count > 0)
            {
                return list[0];
            }
            return "";
        }


其中,由于FCKEditor控件上传图片有两种格式,一是<input type="img" src=“..." />,二是<img src="..." />

于是添加了两种方式的取值,用第一种取值,添加到集合中,如果集合中为0,再用第二种匹配取值。最终返回集合。