万千军中直取首级的正则进阶,想不想学

社区服务
高级搜索
猴岛论坛辅助工具万千军中直取首级的正则进阶,想不想学
发帖 回复
正序阅读 最近浏览的帖子最近浏览的版块
0个回复

万千军中直取首级的正则进阶,想不想学

楼层直达
mimi_rice

ZxID:55494225

等级: 上士
举报 只看楼主 使用道具 楼主   发表于: 2015-05-20 0

正则表达式进阶


本文按键学院

技术支持


按键学院交流①群(1群已满):376122403


按键学院交流②群(2群):372671254


按键学院交流③群(3群):170084238



引用
在之前的正则系列的院刊中,已经给大家初步的介绍了正则表达式的使用方法,以及介绍了部分常用的表达式元字符,这次

继续给大家介绍下其他的常用的元字符,以及一些正则的匹配技巧
正则系列:初窥正则表

达式,让处理字符串异常简单



[tr=YellowGreen]元字符

我们在之前已经介绍了元字符的分类,以及每个分类下的比较常用的元字符,比如说. \w \d ^ $ * + ?  
今天就再继续补充其他的一些元字符

元字符描述
\将下一个字符标记为特殊字符或字面值
()与模式匹配并记住匹配
{n}n为非负的整数。匹配恰好n次
{n,}n为非负的整数。匹配至少n次
{n,m}m和n为非负的整数。匹配至少n次,至多m次。
[xyz]一个字符集。与括号中字符的其中之一匹配。
[^xyz][^xyz]
[a-z]表示某个范围内的字符。
\b与单词的边界匹配,即单词与空格之间的位置。
\f与分页符匹配。
\n与换行符字符匹配。
\r与回车字符匹配。
\s与任何白字符匹配,包括空格、制表符、分页符等。
\S与任何非空白的字符匹配。
\t与制表符匹配。
\v与垂直制表符匹配。
\num匹配num个,其中num为一个正整数。引用回到记住的匹配
\n匹配n,其中n是一个八进制换码值。(这里的n和上面换行符是不同的)
\xn匹配n,其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长




[tr=YellowGreen]使用技巧


上面列出了一些比较常用的元字符,一些元字符的使用方法都是比较雷同的,只是代表的字符不一样,所以这里就拿出一部分作为

进一步讲解

\ 这个元字符的意义在于可以用来匹配字符当中的元字符符号。比如说

“anjian*jinglinganjian” 我想要从这个字符里匹配出 “*jingling”这个部分,但是* 这个符号本身也代表这一个元字符,无

法直接匹配,所以这里就需要使用到 \ 这个元字符了,
"\*jingling" 使用这个表达式就能够把 * 号当成是普通的字符进行匹配了

()  小括号 这个元字符应用的比较广泛,他是可以单独把匹配得到的一部分内容提取出来。还

是以上面的字符串作为例子:
“anjian*jinglinganjian” 使用 “an(.+)ling” 这个表达式进行匹配,就是可以匹配得出 jian*jing 这个字符。这个表达式的

含义就是把以an开头ling结尾的中间的部分单独提取出来
使用了这个小括号匹配信息之后,正则会把这个结果作为子匹配结果,在使用代码输出的时候就需要变动下输出的方式
  1. text = "anjian*jinglinganjian"
  2. Dim regEx, Matches, Match '需要用到的几个变量
  3. set regEx = New RegExp '创建一个RegExp对象
  4. regEx.[Global] = TRUE '设置全局可用性为TRUE,在需要更换此属性时,我会提醒你的。
  5. regEx.IgnoreCase = FALSE '设置区分大小写为FALSE,也就是不区分大小写了
  6. regEx.pattern ="an(.+)ling" '设置正则表达式
  7. Set matches = regEx.execute(text) '进行匹配
  8. For Each Match In Matches
  9.     TracePrint   Match.SubMatches(0)  '输出正则的子匹配内容
  10. 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>
使用这个表达式就可以把链接和标题分别提取出来了。
  1. text = Lib.网络.获得网页源文件("http://bbs.anjian.com/forum.php?mod=forumdisplay&fid=250") '获取网页源文件
  2. Dim regEx, Matches, Match '需要用到的几个变量
  3. set regEx = New RegExp '创建一个RegExp对象
  4. regEx.[Global] = TRUE '设置全局可用性为TRUE,在需要更换此属性时,我会提醒你的。
  5. regEx.IgnoreCase = FALSE '设置区分大小写为FALSE,也就是不区分大小写了
  6. regEx.pattern ="<a href=""(thr.+html).+>(.+)</a>" '设置正则表达式
  7. Set matches = regEx.execute(text) '进行匹配
  8. For Each Match In Matches
  9.     TracePrint Match.SubMatches(0)'输出帖子链接
  10.     TracePrint Match.SubMatches(1)'输出帖子标题
  11. 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



« 返回列表
发帖 回复