青海网站建设、网络推广最好的公司--您身边的网站建设专家,马上拿起电话,联系我们:0971-8235355   
青海西宁网站建设、网站制作公司-西宁威势电子信息服务有限公司 首页 |  公司简介 |  网站建设 |  网络推广 |  空间租用 |  域名注册 |  企业邮局 |  网络安全 |  网站编程 |  客服中心 |  联系我们 |  人才招聘
 
西宁威势最新网站制做案例展示
Lastest Project
 
西宁网站建设  
当前位置为:首页 >> .NET编程 >> 正文  
(半原创)匹配出页面中所有的IMG,以便在删除文章时将文章内的图片也同时删除

文章来源: 西宁威势电子信息服务有限公司     发布时间:2010-10-11    浏览次数:5920   

在从数据库删除文章内容时,将内容中包括的图片也一起删除.下面代码来自于网上搜索,版权归原作者所有.源作者的代码很短小精悍,但是正则匹配的时候不是太好用,有些图片匹配不出来.于是本人有略微改动.匹配率提升很高,除了很古怪的javascript语法中的路径不能区别,其它的都能匹配出来.

新建一个ASPX页面

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" ValidateRequest="false" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>无标题页</title>
</head>
<body>
    <form id="form1" runat="server">
    <div align="center">
   
        <asp:TextBox ID="TextBox1" runat="server" Height="283px" TextMode="MultiLine"
            Width="800px"></asp:TextBox>
        <br />
        <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
   
    </div>
    </form>
</body>
</html>

using System;
using System.Text.RegularExpressions;
public partial class Default2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }

    /// 获得图片路径
    /// </summary>
    /// <param name="str">内容</param>
    /// <returns>string 结果</returns>
    private string getPicUrl(string str)
    {
        string content = "", regstr = "", url = "";
        content = str + "";
        //regstr = @"<img.*src=([\""\']?)(.\S+)\1.*>"; 匹配出整个<img xxxx />
        regstr = @"src=([\""\']?)(.\S+)\1.(?:jpg|bmp|gif)(?:)"; // 匹配出 src
        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;
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        string htmlText = this.TextBox1.Text;
        string strPaths = getPicUrl(htmlText);
        Response.Write(strPaths);

    }
}

 

页面运行后将以下内容模仿HTML内容输入进去进行匹配测试

设计了以下各种常见的代码障碍(单引号,双引号,脚本,样式...)

<img id=img src="/images/reallydo1.jpg">

<img id=img src=/images/reallydo2.jpg/> 后来证明这句是错误的HTML,图片不能正常显示.
<img id=img src=/images/reallydo3.jpg />
<img id=gif src=http://jorkin.reallydo.com/images/reallydo4.gif />
<img id=img /src="/imagesreallydo5.bmp" class=go>
<img id=img src="/images/reallydo6.jpg" class=go/>
<img id=jpg src="/images.gif/reallydo7.jpg" class=go />
<img id=img src="http://www.qhwins.com/images/reallydo8.jpg" class=go />
<IMG id=png src=/reallydo.jpg/reallydo9.jpg onclick='' class=go>
<img id=img src=/images/reallydo10.jpg onclick='>' class=go/>
<img id=bmp src=/images/reallydo11.jpg onclick='<' class='go' />
<img id=img src=http://www.qhwins.com/images/reallydo12.jpg onclick='<' class='go' />
<img onclick="" id=img src='/images/reallydo13.jpg' class=go>
<img id=img src='/images/reallydo14.jpg' onblur=">" class='go'/>
<img id=img onfocus="<" src='/images/reallydo15.jpg' class=go />
<img id=img onclick=">" src='http://www.qhwins.com/images/reallydo16.jpg' class=go />
<IMG id=img src='http://www.qhwins.com/images/reallydo17.jpg' onclick="<" class=go />
<img border=0 onclick="if(this.width>=690) window.open('http://qhwins.com/images/jorkin18.gif');" onload="if(this.width>'29')this.width='25';if(this.height>'28')this.height='88';" src='http://qhwins.com/images/reallydo19.gif'>
<img src='../reallydo21.gif' onclick="if(this.width>=14) window.open('../jorkin.jpg20.gif');" onload="if(this.width>'82')this.width='222';if(this.height>'1024')this.height='1024';" border=0>
<IMG src="http://qhwins.com/img/sign.asp"> 这个是动态图片,非常规的图片扩展名.
<IMG src="http://qhwins.com/img/sign.asp" style="solid 1px #820222;">

已证明为错误的正则:

<img.*src=([\""\']?)(.\1\S+).*>
<img.+?src=[\'|\"](.+?)[\'|\"].+?>
<img(.+?)src=('|\")?([^\s]+?)('|\"|\/|'\/|\"\/)?(\s|>)

以下正则目前测试还未发现错误:

<img.*src=([\""\']?)(.\S+)\1.*>
$2 为 IMG 的 SRC 地址

已发现BUG:
BUG-001:SRC内如果有空格的话,也会出错.不过一般情况下是不会有的.会被Encode为%20.
BUG-002:不能最小匹配,必须一整行只有一个<img>标签时才能有效.
而改为<img.*src=([\""\']?)(.\S+)\1.*?>个别障碍不能正常通过.

如发现其它BUG请在下边评论中反馈给我.

测试中:
PatternStr = "\s[on].+?=([\""|\'])(.+?)\1"
RepStr = ""
PatternStr=">"
RepStr=">"& vbNewLine
PatternStr = "<img.*src=([\""\']?)(.\1\S+).*?>"
RepStr = "<img src=$2 border=0>"
PatternStr=">"& vbNewLine
RepStr=">"
用户名 : 王晖先生
注册日期 : 2008-1-24
所在地 :
发帖数 : 1236
个性签名
好好做事
标签
标题 : re:C# 中利用 DirectSound 录音 [2008-11-8 21:35:25]

输入结果

/images/reallydo1.jpg|/images/reallydo2.jpg|/images/reallydo3.jpg|http://jorkin.reallydo.com/images/reallydo4.gif|/imagesreallydo5.bmp|/images/reallydo6.jpg|/images.gif/reallydo7.jpg|http://www.qhwins.com/images/reallydo8.jpg|/reallydo.jpg/reallydo9.jpg|/images/reallydo10.jpg|/images/reallydo11.jpg|http://www.qhwins.com/images/reallydo12.jpg|/images/reallydo13.jpg|/images/reallydo14.jpg|/images/reallydo15.jpg|http://www.reallydo.com/images/reallydo16.jpg|http://www.qhwins.com/images/reallydo17.jpg|http://qhwins.com/images/reallydo19.gif|../reallydo21.gif|


上一篇:C#操作注册表全攻略
下一篇:[原创]64位主机IIS中没有asp.net选项的解决办法
评论列表
正在加载评论……
  
评论   
呢  称:
验证码: 若看不清请点击更换!
内  容:
 
 
  在线洽谈咨询:
点击这里,在线洽谈   点击这里,在线洽谈   点击这里,在线洽谈
与我交谈  与我交谈 与我交谈
乘车路线    汇款方式   加盟合作  人才招聘  
公司地址:青海省西宁市西关大街73号(三二四部队招行所四楼)     青ICP备13000578号-1 公安机关备案号:63010402000123    
QQ:147399120    mail:lostlove000@163.com    电话: 13897410341    邮编:810000
© Copyright( 2008-2009) QhWins.Com All Rights Reserved    版权所有:西宁威势电子信息服务有限公司 未经书面制授权,请勿随意转载!
业务:青海网站制做青海网站建设青海网页设计西宁网站制做西宁网站建设青海域名注册青海网络推广青海网站推广青海空间租用青海软件开发网站安全网络安全