切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
正则表达式
正则表达式在网页处理中的应用四则
正则表达式在网页处理中的应用四则
2020-06-21
正则表达式
前端之家
前端之家
收集整理的这篇文章主要介绍了
正则表达式在网页处理中的应用四则
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的
方法
。几乎所有高级语言都提供了对正则表达式的
支持
,或者提供了现成的
代码
库供
调用
。本文以ASP环境中常见的处理任务为例,介绍正则表达式的应用技巧。 正则表达式(Regular Expression)为字符串模式匹配提供了一种高效、方便的
方法
。几乎所有高级语言都提供了对正则表达式的
支持
,或者提供了现成的
代码
库供
调用
。本文以ASP环境中常见的处理任务为例,介绍正则表达式的应用技巧。 一、检验密码和
邮件
地址的格式 我们的第一个实例示范正则表达式的一项基本
功能
:抽象地描述任意复杂的字符串。它的意思就是,正则表达式给予程序员一种形式化的字符串描述
方法
,只需很少的
代码
即可描述出应用遇到的任意字符串模式。例如,对于不从事技术工作的人来说,密码格式的要求可以描述如下:密码的第一个字符必须是字母,密码最少4个字符且不超过15个字符,密码不能包含除字母、数字和下划线以外的字符。 作为程序员,我们必须把上面对密码格式的自然语言描述转换成其他形式,使得ASP
页面
能够理解并应用它来防止非法的密码输入。描述这个密码格式的正则表达式是:^[a-zA-Z]\w{3,14}$。在ASP应用里,我们可以把密码验证过程写成可重用的
函数
,如下所示: Function TestPassword(strPassword)Dim reSet re = new RegExpre.IgnoreCase = falsere.global = falsere.Pattern = "^[a-zA-Z]\w{3,14}$"TestPassword = re.Test(strPassword)End Function 下面我们把这个检验密码格式的正则表达式和自然语言描述对比着看看: 密码的第一个字符必须是字母:正则表达式描述是“^[a-zA-Z]”,其中“^”表示字符串的开始,连字符告诉RegExp匹配指定范围的所有字符。 密码最少4个字符且不超过15个字符:正则表达式描述是“{3,14}”。 密码不能包含除字母、数字和下划线以外的字符:正则表达式描述是“\w”。 几点说明:{3,14}表示前面的模式匹配至少3个、但不超过14个的字符(
加上
第一个字符就成了4到15个字符)。注意花括号内的语法要求极其严格,不允许在逗号的两边加入空格。如果加入了空格,它将对正则表达式的含义产生影响,导致密码格式检验时产生
错误
。另外,上面的正则表达式末尾也没有
加上
“$”字符。$字符使得正则表达式匹配字符串直至末尾,确保合法的密码后面没有
加上
任何其他字符。 类似于密码格式检验,检查email地址的合法性也是一个很常见的问题,用正则表达式进行简单的email地址检验可以实现如下: <%Dim reSet re = new RegExpre.pattern = "^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$"Response.Write re.Test("aabb@yahoo.com")%> 二、
提取
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,strHTMLSet re = new RegExp ' 创建正则表达式对象re.IgnoreCase = truere.Global = false ' 第一次匹配之后结束查找%> 下面考虑一下我们要
提取
的区域:在这里,我们要
提取
的是整个<table>结构,
包括
结束
标记
和新闻
标题
的文本。因此查找的起始字符应该是<table>开始
标记
: re.Pattern = "<table.*(?=Headline)"。 这个正则表达式匹配表格的开始
标记
,能够返回开始
标记
直至“Headline”之间的所有
内容
(换行除外)。下面是返回已匹配
HTML代码
的
方法
: ' 把所有匹配的
HTML代码
放入Matches集合Set Matches = re.Execute(strHTML)'
显示
所有匹配的
HTML代码
For Each Item in MatchesResponse.Write Item.ValueNext'
显示
其中一项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
页面
任何
内容
的情形。
内容
的更新可能非常
快速
,不要只因为别人改变了
内容
的格式而让自己的
页面
出现低级可笑的
错误
。 三、解析文本数据
文件
数据
文件
的格式和种类很多,XML文档、结构化文本甚至非结构化文本都经常成为ASP应用的数据源。下面我们要看的一个例子是使用限定符的结构化文本
文件
。限定符(比如引号)表示字符串各个部分不可分割,即使字符串内部包含把记录分隔成字段的分隔符也一样。 下面是一个简单的结构化文本
文件
: 姓,名,电话,说明孙,悟空,312 555 5656,ASP很好猪,八戒,847 555 5656,我是电影制片人 这个
文件
非常简单,它的第一行是
标题
,下面两行是用逗号作为分隔符的记录。要解析这个
文件
也很简单,只需先把
文件
分割成行(根据换行符号),然后把各个记录按照字段分割。但是,如果我们在某个字段
内容
中加入了逗号: 姓,我喜欢ASP,还有VB和
sql
猪,我是电影制片人 解析第一个记录时就会出现问题,因为在只认可逗号分隔符的解析器看来它的最后一个字段包含了两个字段的
内容
。为了避免出现这类问题,包含分隔符的字段必须用限定符包围。单引号就是一种常用的限定符。把上面的文本
文件
加上
单引号限定符之后,它的
内容
如下所示: 姓,'我喜欢ASP,还有VB和
sql
'猪,'我是电影制片人' 现在我们能够肯定哪一个逗号是分隔符、哪一个逗号是字段
内容
了,即只需把引号内部出现的逗号视为字段的
内容
。接下来我们要做的就是实现一个正则表达式解析器,由这个解析器确定何时根据逗号分割字段、何时把逗号视为字段
内容
。 这里的问题与大多数正则表达式所面临的略有不同。通常我们查看的是文本的一小部分,看看它是否能够和正则表达式匹配。但在这里,只有考虑了整行文本之后我们才能可靠地判断出哪些
内容
位于引号之内。 下面是一个说明该问题的例子。从某个文本
文件
随意抽取半行
内容
,得到:1,沙滩,黑色,21,',狗,猫,鸭子,。在这个例子中,因为“1”的左边还有其他数据,要解析清楚它的
内容
是极其困难的。我们不知道这个数据片断的前面有多少单引号,从而也就无法判断哪些字符位于引号之内(在引号之内的文本解析时不能分割)。如果这个数据片断之前有偶数个(或者没有)单引号,那么“','”是用引号界定的字符串且不可分割。如果前面的引号
数量
是奇数,那么“1,'”是某个字符串的结束部分且不可分割。 因此,正则表达式必须分析整行文本,全面考虑出现了多少引号才能确定字符是处在引号对的内部还是外部,即:,(?=([^']*'[^']*')*(?![^']*'))。这个正则表达式首先找到一个引号,然后继续查找并保证逗号后面的单引号
数量
或者是偶数、或者是0。该正则表达式以下面这个判断为基础:如果逗号后面的单引号
数量
是偶数,那么这个逗号位于字符串之外。下表给出了更详细的说明:,寻找一个逗号 (?= 继续向前查找以匹配下面这个模式: ( 开始一个新的模式 [^']*' [非引号字符]0个或者多个,然后是一个引号 [^']*'[^']*) [非引号字符]0个或者多个,然后是一个引号。结合前面的
内容
之后它匹配引号对 )* 结束模式并匹配整个模式(引号对)0次或者多次 (?! 向前查找,排除此模式 [^']*' [非引号字符]0个或者多个,然后是一个引号 ) 结束模式 下面是一个VBScript
函数
,它接受一个字符串参数,根据字符串中的逗号分隔符、单引号限定符分割字符串,返回结果数组: Function SplitAdv(strInput)Dim objRESet objRE = new RegExp' 设置RegExp对象objRE.IgnoreCase = trueobjRE.Global = trueobjRE.Pattern = ",(?=([^']*'[^']*')*(?![^']*'))"' Replace
方法
用chr(8)替换我们要用到的逗号,chr(8)即\b' 字符,\b在字符串中出现的可能极为微小。' 然后我们根据\b把字符串分割保存到数组SplitAdv = Split(objRE.Replace(strInput,"\b"),"\b")End Function 总而言之,用正则表达式解析文本数据
文件
具有高效、缩短开发时间的优点,能够节省大量分析
文件
、根据复杂的条件
提取
有用数据的时间。在一个迅速发展的环境中仍会有许多传统的数据可资利用,掌握如何构造高效的数据分析例程将是一种宝贵的技能。 四、字符串替换 在最后一个例子中我们要看看VBScript正则表达式的替换
功能
。ASP经常用于动态地格式化从各种数据源获得的文本。利用VBScript正则表达式的强大
功能
,ASP能够动态地改变匹配的复杂文本。通过加入HTML
标记
突出
显示
部分单词就是一种常见的应用,比如突出
显示
搜索结果
中的
搜索
关键词。 为说明
实现方法
,下面我们来看一个突出
显示
字符串中所有“.NET”的例子。这个字符串可以从任何地方获得,比如
数据库
或者其他Web网站。 <%Set regEx = New RegExpregEx.Global = trueregEx.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>")%> 这个例子中有几个重要的地方必须注意。整个正则表达式被放入了一对圆括号中,它的作用是
截取
所有匹配的
内容
供以后使用,这些
内容
在替换文本中通过$1引用。类似的
截取
每次替换可以使用多达9个,分别通过$1到$9引用。正则表达式的Replace
方法
和VBScript本身的Replace
函数
不同,它只需要两个参数:被
搜索
的文本,替换用的文本。 在这个例子中,为了突出
显示
搜索
到的“.NET”字符串,我们用粗体
标记
以及其他样式
属性
来包围这些字符串。使用这种
搜索
和替换技术,我们能够方便地为网站
搜索
程序
加上
突出
显示
搜索
关键词的
功能
,或者
自动
为
页面
中出现的关键词
加上
指向其他
页面
的
链接
。 结束语 希望本文介绍的几种正则表达式技巧对你在何时、如何应用正则表达式有所启发。虽然本文的例子用VBScript编写,但在ASP.NET中正则表达式同样也大有用武之地,它是服务器端控件表单检验的主要机制之一,而且通过System.Text.RegularExpressions命名空间导出到了整个.NET框架之中。( 您可能感兴趣的
文章
: asp.net(c#) 使用Rex正则来
生成
字符串数组的
代码
asp.net验证一个字符串是否符合指定的正则表达式 asp.net中利用正则表达式判断一个字符串是否为数字的
代码
详细出处参考:http://www.jb51.net/article/14130.htm
上一篇:使用正则表达式从字符串中查找子字
下一篇:正则表达式---读书笔记
猜你在找的正则表达式相关文章
常用正则表达式-手机号、身份证、邮箱
一、校验数字的表达式 1 数字:^[0-9]*$ 2 n位的数字:^d{n}$ 3 至少n位的数字:^d{n,}$ 4...
作者:前端之家 时间:2021-01-10
JS正则表达式详解
正则表达式非常有用,查找、匹配、处理字符串、替换和转换字符串,输入输出等。下面整理一...
作者:前端之家 时间:2020-12-29
组内正则培训记录
0. 注: 不同语言中的正则表达式实现都会有一些不同。下文中的代码示例除特别说明的外,都...
作者:前端之家 时间:2020-12-20
高级正则表达式技术(Python版)
正则表达式是从信息中搜索特定的模式的一把瑞士军刀。它们是一个巨大的工具库,其中的...
作者:前端之家 时间:2020-07-22
史上最全最常用的正则表达式
一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,...
作者:前端之家 时间:2020-07-22
正则表达式工具
作者:前端之家 时间:2020-07-22
正则表达式初步
作者:前端之家 时间:2020-07-22
分享5个可视化的正则表达式编辑工具
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编...
作者:前端之家 时间:2020-07-22
分享5个可视化的正则表达式编辑工具
正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器...
作者:前端之家 时间:2020-07-22
[知识积累]--正则表达式记忆表
在工作中常常遇到正则表达式问题,有时候又会忘记这则的语法。 下面就分享一份正则表达式记...
作者:前端之家 时间:2020-07-22
编程分类
算法
设计模式
多媒体技术
正则表达式
Elasticsearch
Flink
Hadoop
IDE
最新文章
• 常用正则表达式-手机号、身
• JS正则表达式详解
• 组内正则培训记录
• 高级正则表达式技术(Pyth
• 史上最全最常用的正则表达
• 正则表达式基本语法
• 正则表达式工具
• 正则表达式初步
• 分享5个可视化的正则表达式
• 分享5个可视化的正则表达式
热门标签
更多 ►
受约束
摘*
day25
Java常用类库
置信
lamda
留存
持续录入
年后
正则表达式30
3.17
regularexpre
匹
多模
适
20130322
基础理论
pathmunge
涵义
reec
tok
需要转义的特
资源分享
validationex
简明魔法
里弄
形如
源码实现
完备
actionscript