青海網站建設、網絡推廣最好的公司--您身邊的網站建設專家,馬上拿起電話,聯系我們:0971-8235355   
黑龙江11选5预测网 黑龙江11选5预测网 |  公司簡介 |  網站建設 |  網絡推廣 |  空間租用 |  域名注冊 |  企業郵局 |  網絡安全 |  網站編程 |  客服中心 |  聯系我們 |  人才招聘
 
西寧威勢最新網站制做案例展示
Lastest Project
 
西寧網站建設  
當前位置為:黑龙江11选5预测网 >> .NET編程 >> 正文  
(半原創)匹配出頁面中所有的IMG,以便在刪除文章時將文章內的圖片也同時刪除

文章來源: 黑龙江11选5预测网     發布時間:2010-10-11    瀏覽次數:6541   

在從數據庫刪除文章內容時,將內容中包括的圖片也一起刪除.下面代碼來自于網上搜索,版權歸原作者所有.源作者的代碼很短小精悍,但是正則匹配的時候不是太好用,有些圖片匹配不出來.于是本人有略微改動.匹配率提升很高,除了很古怪的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" "

<html xmlns="<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=//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="//www.ymbxx.icu/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=//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='//www.qhwins.com/images/reallydo16.jpg' class=go />
<IMG id=img src='//www.qhwins.com/images/reallydo17.jpg' onclick="<" class=go />
<img border=0 onclick="if(this.width>=690) window.open('//qhwins.com/images/jorkin18.gif');" onload="if(this.width>'29')this.width='25';if(this.height>'28')this.height='88';" src='//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="<IMG src="

已證明為錯誤的正則:

<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|//jorkin.reallydo.com/images/reallydo4.gif|/imagesreallydo5.bmp|/images/reallydo6.jpg|/images.gif/reallydo7.jpg|//www.qhwins.com/images/reallydo8.jpg|/reallydo.jpg/reallydo9.jpg|/images/reallydo10.jpg|/images/reallydo11.jpg|//www.qhwins.com/images/reallydo12.jpg|/images/reallydo13.jpg|/images/reallydo14.jpg|/images/reallydo15.jpg|//www.reallydo.com/images/reallydo16.jpg|//www.qhwins.com/images/reallydo17.jpg|//qhwins.com/images/reallydo19.gif|../reallydo21.gif|


上一篇:C#操作注冊表全攻略
下一篇:[原創]64位主機IIS中沒有asp.net選項的解決辦法
評論列表
正在加載評論……
  
評論   
呢  稱:
驗證碼: 若看不清請點擊更換!
內  容:
 
 
  在線洽談咨詢:
點擊這里,在線洽談   點擊這里,在線洽談   點擊這里,在線洽談
與我交談  與我交談 與我交談
乘車路線    匯款方式   加盟合作  人才招聘  
公司地址:青海省西寧市西關大街73號(三二四部隊招行所四樓)     青ICP備13000578號-1 公安機關備案號:63010402000123    
QQ:147399120    mail:[email protected]    電話: 13897410341    郵編:810000
© Copyright( 2008-2009) www.ymbxx.icu All Rights Reserved    版權所有:西寧威勢電子信息服務有限公司 未經書面制授權,請勿隨意轉載!
業務:青海網站制做、青海網站建設、青海網頁設計、西寧網站制做、西寧網站建設、青海域名注冊、青海網絡推廣、青海網站推廣、青??占渥庥?/a>、黑龙江11选5预测网、黑龙江11选5预测网、網絡安全