首页 > 技术文章 > 2009-09-08 14:59 C# 运用正则表达式删除文章时删除内容中的图片或附件

lxclqy 2014-06-12 00:13 原文

为了提高用户排版效果,图文混排应用广泛,如:新闻、社区、博客等等,在删除文章时如果不把里面的图片或附件一并删除,那久而久之将给服务器带来严重的、没必要的空间浪费。

代码的原理是将新闻内容通过正则表达式去匹配,然后再根据图片路径进行删除。下面将从代码上来了解如何在删除内容时删除图片。

代码采用正则表达式来判断,所以首先要添加引用:

using System.Text.RegularExpressions;

通过正则表达式匹配合规则的路径:

    /// <summary>
    /// 获得图片路径
    /// </summary>
    /// <param name="str">内容</param>
    /// <returns>string 结果</returns>
    private string getPicUrl(string str)
    {
        string content = "", regstr = "", url = "";
        content = str + "";
        regstr = "src[^>]*[^/].(?:jpg|bmp|gif)(?:\"|\') ";
        content = Regex_Execute(regstr, content);
        content = content.Replace("'", "");
        content = content.Replace("\"", "");
        url = content.Replace("src=", "");

        return url;
    }

    /// <summary>
    /// 正则表达式匹配
    /// </summary>
    /// <param name="patrn">正则表达式</param>
    /// <param name="str">内容</param>
    /// <returns>string 结果</returns>
    private string Regex_Execute(string patrn, string str)
    {
        string values = "";
        Regex rx = new Regex(patrn);

        MatchCollection mc = rx.Matches(str);

        foreach (Match match in mc)
        {
            values = values + match.Value + "|";
        }

        return values;
    }

测试内容:

string strContent = "图片1:<img src=\"aa.gif\" /><br />图片2:<img src=\"bb.gif\" /><br />图片3:<img src=\"../pic/cc.gif\" /><br />图片4:<img src='/dd.gif' /><br />图片5:<img src=/ee.gif />";
string strPaths = getPicUrl(strContent);

最后的结果为(strPaths的值):aa.gif |bb.gif |../pic/cc.gif |/dd.gif |

这就是你文章中在src下面的值,在表达式那里你还可以添加具体的,比如哪个文件夹是系统文件夹,不进行删除(图片表情),具体的方式在这里就不列了。

取到了路径,接下来就是删除了!

System.IO.File.Delete(path);

 

大功告成,应该写得比较详细了吧?自己去组合吧!

推荐阅读