赞
踩
Function TestPassword(strPassword) Dim re Set re = new RegExp re.IgnoreCase = false re.global = false re.Pattern = "^[a-zA-Z]/w{3,14}$" TestPassword = re.Test(strPassword) End Function |
<% Dim re Set re = new RegExp re.pattern = "^/w+@[a-zA-Z_]+?/.[a-zA-Z]{2,3}$" Response.Write re.Test("aabb@yahoo.com") %> |
<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> |
<% Dim re, strHTML Set re = new RegExp ' 创建正则表达式对象 re.IgnoreCase = true re.Global = false ' 第一次匹配之后结束查找 %> |
' 把所有匹配的HTML代码放入Matches集合 Set Matches = re.Execute(strHTML) ' 显示所有匹配的HTML代码 For Each Item in Matches Response.Write Item.Value Next ' 显示其中一项 Response.write Matches.Item(0).Value |
<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页面任何内容的情形。内容的更新可能非常快速,不要只因为别人改变了内容的格式而让自己的页面出现低级可笑的错误。
三、解析文本数据文件
数据文件的格式和种类很多,XML文档、结构化文本甚至非结构化文本都经常成为ASP应用的数据源。下面我们要看的一个例子是使用限定符的结构化文本文件。限定符(比如引号)表示字符串各个部分不可分割,即使字符串内部包含把记录分隔成字段的分隔符也一样。
下面是一个简单的结构化文本文件:
姓,名, 电话, 说明 孙,悟空, 312 555 5656, ASP很好 猪,八戒, 847 555 5656, 我是电影制片人 |
姓,名, 电话, 说明 孙,悟空, 312 555 5656, 我喜欢ASP,还有VB和SQL 猪,八戒, 847 555 5656, 我是电影制片人 |
姓,名, 电话, 说明 孙,悟空, 312 555 5656, '我喜欢ASP,还有VB和SQL' 猪,八戒, 847 555 5656, '我是电影制片人' |
, | 寻找一个逗号 |
(?= | 继续向前查找以匹配下面这个模式: |
( | 开始一个新的模式 |
[^']*' | [非引号字符]0个或者多个,然后是一个引号 |
[^']*'[^']*) | [非引号字符]0个或者多个,然后是一个引号。结合前面的内容之后它匹配引号对 |
)* | 结束模式并匹配整个模式(引号对)0次或者多次 |
(?! | 向前查找,排除此模式 |
[^']*' | [非引号字符]0个或者多个,然后是一个引号 |
) | 结束模式 |
Function SplitAdv(strInput) Dim objRE Set objRE = new RegExp ' 设置RegExp对象 objRE.IgnoreCase = true objRE.Global = true objRE.Pattern = ",(?=([^']*'[^']*')*(?![^']*'))" ' Replace方法用chr(8)替换我们要用到的逗号,chr(8)即/b ' 字符,/b在字符串中出现的可能极为微小。 ' 然后我们根据/b把字符串分割保存到数组 SplitAdv = Split(objRE.Replace(strInput, "/b"), "/b") End Function |
<% Set regEx = New RegExp regEx.Global = true regEx.IgnoreCase = True ' 正则表达式模式, ' 寻找任何结尾为“.NET”的单词或者URL。 regEx.Pattern = "(/b[a-zA-Z/._]+?/.NET/b)" ' 用于测试替换功能的字符串 strText = "微软建立了一个新网站www.ASP.NET。" ' 调用正则表达式的Replace方法 ' $1表示把匹配的文本插入当前位置 Response.Write regEx.Replace(strText, _ "<b style='color: #000099; font-size: 18pt'>$1</b>") %> |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。