asp正则表达式在网页处理中的应用四则(2)

时间:2008-02-24 14:44:00 

二、提取HTML页面的特定部分

  从HTML页面提取内容所面临的主要问题是,我们必须寻找一种方法精确地识别出自己想要的那一部分内容。例如,下面是一个显示新闻标题的HTML代码片断:

 

<table border="0" width="11%" class="Somestory">
<tr>
<td width="100%">
<p align="center">其他内容...</td>
</tr>
</table>
<table border="0" width="11%" class="Headline">
<tr>
<td width="100%">
<p align="center">伊拉克战争!</td>
</tr>
</table>
<table border="0" width="11%" class="Someotherstory">
<tr>
<td width="100%">
<p align="center">其他内容...</td>
</tr>
</table>

观察上述代码,很容易看出新闻标题由位于中间的表格显示,它的class属性设置为Headline。如果HTML页面非常复杂,使用Microsoft IE从5.0开始提供的一项附加功能可以只查看被选中部分页面的HTML代码,请访问http://www.microsoft.com/Windows/ie/WebAccess/default.ASP 了解详情。对于本例,我们假定这是唯一class属性设置为Headline的表格。现在我们要创建正则表达式,通过正则表达式找到这个Headline表格并把这个表格包含到自己的页面中。首先是编写支持正则表达式的代码:

 

<%
Dim re, strHTML
Set re = new RegExp ' 创建正则表达式对象

re.IgnoreCase = true
re.Global = false ' 第一次匹配之后结束查找
%>

下面考虑一下我们要提取的区域:在这里,我们要提取的是整个<table>结构,包括结束标记和新闻标题的文本。因此查找的起始字符应该是<table>开始标记: re.Pattern = "<table.*(?=Headline)"。这个正则表达式匹配表格的开始标记,能够返回开始标记直至“Headline”之间的所有内容(换行除外)。下面是返回已匹配HTML代码的方法:

  ' 把所有匹配的HTML代码放入Matches集合
Set Matches = re.Execute(strHTML)

' 显示所有匹配的HTML代码
For Each Item in Matches
Response.Write Item.Value
Next

' 显示其中一项
Response.write Matches.Item(0).Value

运行这段代码处理前面显示的HTML片断,正则表达式返回一次匹配的内容如下: <table border="0" width="11%" class="。正则表达式中的“(?=Headline)”没有获取字符,所以不能看到表格class属性的值。要获取表格剩余部分的代码也相当简单: re.Pattern = "<table.*(?=Headline)(.|\n)*?</table>"。其中:“(.|\n)”后面的“*”匹配0个到多个任意字符;而“?”使得“*”匹配范围最小化,即在找到表达式的下一部分之前匹配尽可能少的字符。</table>是表格的结束标记。

  “?”限制符非常重要,它防止了表达式返回其他表格的代码。例如对于前面给出的HTML代码片断,如果删除这个“?”则返回内容将是:
 

 <table border="0" width="11%" class="Headline">
<tr>
<td width="100%">
<p align="center">伊拉克战争!</td>
</tr>
</table>
<table border="0" width="11%" class="Someotherstory">
<tr>
<td width="100%">
<p align="center">其他内容...</td>
</tr>
</table>

返回的内容不仅包含了Headline表的<table>标记,而且还包含了Someotherstory表格,由此可以看出,这里的“?”是必不可少的。

  本例假设了一些相当理想化的前提。实际应用中情况往往要复杂得多,特别是你对正在使用的源HTML代码的编写没有任何影响力时,编写ASP代码尤为困难。最有效的方法是,多花些时间分析待提取内容附近的HTML,经常地测试,确保提取出来的内容正是自己所需要的。另外,应当重视并处理正则表达式不能匹配源HTML页面任何内容的情形。内容的更新可能非常快速,不要只因为别人改变了内容的格式而让自己的页面出现低级可笑的错误。

标签:正则表达式,RegExp,asp
0
投稿

猜你喜欢

  • 单利模式及python实现方式详解

    2021-07-21 21:45:15
  • Python基于requests实现模拟上传文件

    2023-09-30 01:42:05
  • 教你如何看懂SQL Server查询计划

    2024-01-12 21:10:41
  • Python 实现的 Google 批量翻译功能

    2023-06-26 18:36:31
  • Python实现字符串匹配的KMP算法

    2021-02-10 05:03:45
  • ES6 let和const定义变量与常量的应用实例分析

    2024-05-28 15:41:17
  • python实现三壶谜题的示例详解

    2021-12-09 19:56:15
  • Centos7 下Mysql5.7.19安装教程详解

    2024-01-25 08:28:18
  • Python+Qt身体特征识别人数统计源码窗体程序(使用步骤)

    2021-06-03 10:40:54
  • XHTML与HTML之间的7个区别

    2009-05-20 10:13:00
  • python beautifulsoup4 模块详情

    2021-12-30 07:50:03
  • Python实现通过文件路径获取文件hash值的方法

    2023-10-27 21:41:20
  • python 用递归实现通用爬虫解析器

    2022-04-15 08:13:55
  • pandas 实现将两列中的较大值组成新的一列

    2022-12-24 04:50:01
  • Python爬取网页信息的示例

    2021-02-09 10:43:21
  • asp和js两种方法判断远程图片是否存在

    2007-09-21 17:27:00
  • 通过MySQL日志实时查看执行语句以及更新日志的教程

    2024-01-17 03:57:10
  • Python Tkinter实现简易计算器功能

    2023-08-08 09:53:30
  • MySQL数据库的双向加密方式

    2009-11-18 11:07:00
  • vue elementUI实现自定义正则规则验证

    2024-05-28 16:00:58
  • asp之家 网络编程 m.aspxhome.com