正则表达式进阶
本文由按键学院提
供技术支持
按键学院交流①群(1群已满):376122403
按键学院交流②群(2群):372671254
按键学院交流③群(3群):170084238
引用
在之前的正则系列的院刊中,已经给大家初步的介绍了正则表达式的使用方法,以及介绍了部分常用的表达式元字符,这次
继续给大家介绍下其他的常用的元字符,以及一些正则的匹配技巧
正则系列:初窥正则表
达式,让处理字符串异常简单
[tr=YellowGreen]
元字符 我们在之前已经介绍了元字符的分类,以及每个分类下的比较常用的元字符,比如说. \w \d ^ $ * + ?
今天就再继续补充其他的一些元字符
[tr=YellowGreen]
使用技巧 上面列出了一些比较常用的元字符,一些元字符的使用方法都是比较雷同的,只是代表的字符不一样,所以这里就拿出一部分作为
进一步讲解
\ 这个元字符的意义在于可以用来匹配字符当中的元字符符号。比如说 “anjian*jinglinganjian” 我想要从这个字符里匹配出 “*jingling”这个部分,但是* 这个符号本身也代表这一个元字符,无
法直接匹配,所以这里就需要使用到 \ 这个元字符了,
"\*jingling" 使用这个表达式就能够把 * 号当成是普通的字符进行匹配了
() 小括号 这个元字符应用的比较广泛,他是可以单独把匹配得到的一部分内容提取出来。还 是以上面的字符串作为例子:
“anjian*jinglinganjian” 使用 “an(.+)ling” 这个表达式进行匹配,就是可以匹配得出 jian*jing 这个字符。这个表达式的
含义就是把以an开头ling结尾的中间的部分单独提取出来
使用了这个小括号匹配信息之后,正则会把这个结果作为子匹配结果,在使用代码输出的时候就需要变动下输出的方式
- text = "anjian*jinglinganjian"
- Dim regEx, Matches, Match '需要用到的几个变量
- set regEx = New RegExp '创建一个RegExp对象
- regEx.[Global] = TRUE '设置全局可用性为TRUE,在需要更换此属性时,我会提醒你的。
- regEx.IgnoreCase = FALSE '设置区分大小写为FALSE,也就是不区分大小写了
- regEx.pattern ="an(.+)ling" '设置正则表达式
- Set matches = regEx.execute(text) '进行匹配
- For Each Match In Matches
- TracePrint Match.SubMatches(0) '输出正则的子匹配内容
- next
Match.SubMatches(0) 这个就是用来输出第一个子匹配内容,要输出第二个子匹配就把0改成1,以此类推。
{n} 这个元字符是用来指定匹配前一个字符的次数的。例如"o{2}"不能与"Bob中的"o"匹配,但是 可以与"foooood"中的前两个o匹配。
[xyz] 这个元字符是表示会匹配这个中括号里的字符的其中一个字符。例如,"[abc]"匹 配"plain"中的"a"。
[^xyz] 这个是[xyz] 的反义匹配,代表这不匹配这括号里的字符。^ 这个符号如果使用在中括 号里,都是代表这反义匹配
[a-z] 这个比较好理解,就是匹配一个范围内的字符。[a-z]就代表这英文的26个字母,[0-9]代 表这数字
\b 这个是用来匹配处于边界的字符的,就是当前一个字符是处于单词的边界的时候才会匹配到 。例如:“anjian\b” 这个表达式可以匹配到 “anjian*jingling” 这个字符串当中的 anjian 但是无法匹配到
“anjianjingling” 这里的 anjian,因为这里的anjian并不是单独的单词,而是连接在anjianjingling 整个单词里的。
\num 这个是用来进行后向引用的。他是配合()小括号用的。在使用了小括号提取子匹配之后 系统会自动为这个子匹配生成一个组号,然后可以用这个规则重复的调用这个组号用来之后的重复匹配
例如:“\b(\w+)\b\s+\1\b” 这个表达式可以用来匹配重复的单词,比如 “anjian anjian” 这样的字符。这表达式里的 \1 就
是调用了(\w+) 这个子匹配
[tr=YellowGreen]
综合小实战 引用
俗话说的好:“实践是检验真理的唯一标准”
学习了正则,那现在我们就来综合所学的知识试着进行一些字符出来
咱们现在就以按键论坛的院刊板块的源网页,来实现把这一页的院刊标题全部匹配出来院刊板块地址:http://bbs.anjian.com/forum.php?mod=forumdisplay&fid=250
1、打开网页之后右键点击页面,选择“查看源代码”,之后就可以看到这个页
面的源代码
2、我们先随便找一个标题的代码来看看,比如这个:
<a href="thread-565244-1-1.html" style="font-weight: bold;color: #EE1B2E" class="xst" >1000多篇按键精华教程,再不下
载我就删掉啦!!</a>
这个就是其中一篇帖子的标题的源代码,其中
“thread-565244-1-1.html” 这个是这个帖子的链 接,“
1000多篇按键精华教程,再不下载我就删掉啦!! ”这个就是帖子的标题了我们现在就试着把这个链接和标题給提取出来。
3、首先我们需要同时提取两种字符,所以需要使用到小括号,因为链接和标题
可能是由英文和中文数字构成的,所以就可以直接用 (.+) 来匹配到
链接后面的style开头的一串我们不需要的字符也可以使用 .+来匹配表示
整个分析完毕后我们就可以得出这个表达式了:
<a href="(thr.+html).+>(.+)</a>使用这个表达式就可以把链接和标题分别提取出来了。
- text = Lib.网络.获得网页源文件("http://bbs.anjian.com/forum.php?mod=forumdisplay&fid=250") '获取网页源文件
- Dim regEx, Matches, Match '需要用到的几个变量
- set regEx = New RegExp '创建一个RegExp对象
- regEx.[Global] = TRUE '设置全局可用性为TRUE,在需要更换此属性时,我会提醒你的。
- regEx.IgnoreCase = FALSE '设置区分大小写为FALSE,也就是不区分大小写了
- regEx.pattern ="<a href=""(thr.+html).+>(.+)</a>" '设置正则表达式
- Set matches = regEx.execute(text) '进行匹配
- For Each Match In Matches
- TracePrint Match.SubMatches(0)'输出帖子链接
- TracePrint Match.SubMatches(1)'输出帖子标题
- Next
[tr=YellowGreen]
后记 这里只是初步介绍了正则的简单使用方法,意图在于引导大家能够去熟悉正则,并且了解到正则表达式的用处优点。
关于正则其实还有很多比较复杂的语法,这里就不多介绍了,如果童鞋们感兴趣的话可以在百度上搜索到相关的教程。
目前为止正则表达式的基本用法已经介绍的差不多了,在下一次,小编会带领大家一起结合POST技术,来完成
一些实战的小工具,大家敬请期待 {:5_133:}{:5_133:}
相关院刊:初窥正则表达式,让处理字符串异常简单http://bbs.anjian.com/thread-571764-1-1.html
院刊总目录http://bbs.anjian.com/forum.php?
mod=forumdisplay&fid=250