C#正则表达式提取HTML中IMG标签中的SRC地址

百度到的一个,这里就直接贴了

http://blog.csdn.net/smeller/article/details/7108502#comments

一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想把文档中的 img 标签提取出来并不是一件容易的事。由于 img 标签样式变化多端,使提取的时候用程序寻找并不容易。于是想要寻找它们就必须写一个非常健全的正则表达式,不然有可能会找得不全,或者找出来的不是正确的 img 标签。
我们可以从 HTML 标签的格式去想应该怎么建这个正则表达式。首先要想一下 img 标签有几种写法,忽略大小写不看的话,下面列出 img 标签可能出现的几种情况。
<img> <img/> <img src=/>
这一些标签不用考虑,因为没有图片资源地址。
<img src = /images/pic.jpg/ > <img src =" /images/pic.jpg" > <img src= ‘/images/pic.jpg ‘ / >
这一些标签都有图片资源地址,另外还有一个特点就是有引号对,可能为单引号,也可能为双引号。因为不需要同时匹配引号对,所以正则表达式可以这么
写:@"<img\s*src\s*=\s*[""‘]?\s*(?[^\s""‘<>]*)\s*/?\s*>"
<img width="320" height="240" src=/images/pic.jpg onclick="window.open(‘/images/pic.jpg‘)">
因为 img 和 src 之间可能会有其他的参数,所以“<img”要有个单词结束,比如说不能是“<imgabc”,同样 src
前面也是一样,使用单词结束符“\b”有一个好处就是省去了表示空格的“\s*”。另外由于 img
标签中不可以出现“<”、“>”这样的符号,所以要改写前面的正则表达式:@"<img\b[^<>]*?\bsrc
\s*=\s*[""‘]?\s*(?<imgUrl>[^\s""‘<>]*)[^<>]*?/?\s*>"
<img width="320" height="240" src = "
/images/pic.jpg" />
像这种可能会用回车符折行的问题有时候会出现,所以在有空格分开的地方要包含回车换行和 TAB 字符,另外在图片地址中不能出现空格、TAB、回车和换行字符。
所以上面的正则表达式可以改成:@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""‘]?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""‘<>]*)[^<>]*?/?[\s\t\r\n]*>"
下面写出取得HTML中所有图片地址的静态方法。

    /// <summary>
    /// 取得HTML中所有图片的 URL。
    /// </summary>
    /// <param name="sHtmlText">HTML代码</param>
    /// <returns>图片的URL列表</returns>
    public static string[] GetHtmlImageUrlList(string sHtmlText)
    {
      // 定义正则表达式用来匹配 img 标签
      Regex regImg = new Regex(@"<img\b[^<>]*?\bsrc[\s\t\r\n]*=[\s\t\r\n]*[""‘]?[\s\t\r\n]*(?<imgUrl>[^\s\t\r\n""‘<>]*)[^<>]*?/?[\s\t\r\n]*>",   RegexOptions.IgnoreCase);   

      // 搜索匹配的字符串
      MatchCollection matches = regImg.Matches(sHtmlText);
      int i = 0;
      string[] sUrlList = new string[matches.Count];   

      // 取得匹配项列表
      foreach (Match match in matches)
      sUrlList[i++] = match.Groups["imgUrl"].Value;
      return sUrlList;
    }  
时间: 2024-08-07 04:32:49

C#正则表达式提取HTML中IMG标签中的SRC地址的相关文章

html中a标签中的onclick和href的使用

下面代码则执行了subgo()函数, <a href="javascript:void(0)" onclick="subgo()">点我</a> 在这里,javascript:void(0),没启实质上的作用,它仅仅是一个死链接,执行的函数是subgo(). <a href="#" onclick="subgo()">点我</a>与<a href="javascr

&lt;转载&gt;html中head标签中的内容

定义和用法 <head> 标签用于定义文档的头部,它是所有头部元素的容器.<head> 中的元素可以引用脚本.指示浏览器在哪里找到样式表.提供元信息等等. 文档的头部描述了文档的各种属性和信息,包括文档的标题.在 Web 中的位置以及和其他文档的关系等.绝大多数文档头部包含的数据都不会真正作为内容显示给读者. 下面这些标签可用在 head 部分:<base>, <link>, <meta>, <script>, <style&g

网页中head标签中的常用标签总结

常见的<head></head>之间的标签为:meta , title , link , style ,script. 1.meta 标签----name <meta> 元素可提供有关页面的元信息(meta-information),比如针对搜索引擎和更新频度的描述和关键词. 1.1 Keywords #关键词 <meta name="Keywords" content=""/> 1.2 Description #描述

applicationContext.xml文件中&lt;bean&gt;标签中property属性用法说明

<bean name="useraaa" class="com.maple.bean.User"> <property name="name"> <value>小强</value> </property> <property name="age"> <value>26</value> </property> <pr

Object-c 遍历网页获取网页中&lt;img&gt;标签中的图片url

前言: 项目中遇见一个需求遍历网页中所有的<img>标签并且去处图片的url 第一步:编写获取<img >标签的正则表达式,代码如下: -(NSArray*)getImgTags:(NSString *)htmlText { if (htmlText == nil) { return nil; } NSError *error; NSString *regulaStr = @"<img[^>]+src\\s*=\\s*['\"]([^'\"

php正则表达式提取img alt/title标签并替换

有时我们需要对富文本编辑器中的img标签进行必要的处理以满足网站自身的需要,比如:根据站点关键词对页面内img的alt标签设定关键词,以下为提取并替换alt/title标签内容的正则: $title = "需要替换的内容..."$pattern= "/<img.*?src=[\"|\'](.*?)[\"|\'].*?>/"; $replace = '<img src="$1" alt="'.$tit

018 关联映射文件中&lt;class&gt;标签中的lazy(懒加载)属性

Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进行查询. Hibernate中lazy(懒加载)的实现: 采用了第三方组件的库,这个库叫cglib.jar(比较流行),这个库对我们的类生成代理类(JDK的动态代理,只能对JDK中实现了接口的类进行代理),代理可以控制源对象并且可以对源对象的功能进行增强,而cglib.jar可以对类进行代理(cgl

html中a标签中的onclick和href的使用(转)

下面代码则执行了subgo()函数, <a href="javascript:void(0)" onclick="subgo()">点我</a> 在这里,javascript:void(0),没启实质上的作用,它仅仅是一个死链接,执行的函数是subgo(). <a href="#" onclick="subgo()">点我</a>与<a href="javascr

thinkphp框架中处理标签中条件输出

这个问题是这样的,当我在模板中想在标签option中在某个条件下输出selected.但是在里边嵌套if标签的话,condition里边第二个参数使用变量的时候,不能解析.所以只能使用别的方法了.达到效果的代码 <select name="role"> <volist name="role" id="vo"> <option value="" <eq name="vo.role_i