• 新浪微博:
  • 微信 :
按键精灵电脑版
立即下载

软件版本:2014.06
软件大小:22.9M
更新时间:03-18

按键精灵安卓版
立即下载

软件版本:3.3.8
软件大小:62.5M
更新时间:12-18

按键精灵iOS版
立即下载

软件版本:1.6.8
软件大小:29.2M
更新时间:03-03

最新企业版UiBot
立即下载

软件版本:3.3
软件大小:282M
更新时间:08-06

快捷导航

登录 后使用快捷导航
没有帐号? 注册

登录 注册
返回列表 12345678» / 11
发新话题 回复该主题

[技术交流] 【院刊】-【201505期】只要10行代码!从上万行文本中提取任意想... [复制链接]

1#

初窥正则表达式,让处理字符串异常简单



本文按键学院提供技术支持



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

零基础学按键精灵群(2群):372671254




谈到正则表达式,可能很多童鞋都是一头雾水:什么是正则表达式?干嘛用的?而一些对于正则有所了解的童鞋则会谈虎色变,觉得正则表达式虽然用的命令少,但是自己就是写不出来。对于比较熟悉正则的童鞋来说,正则表达式简直是神器!利用他可以解决很多问题,能够化繁为简。
上面说了这么多,总归一句话,正则表达式其实就是一种针对字符串的匹配和处理的方法

正则有什么用?


正则表达式有什么用? 在上面的引言里已经说明过了,它是一种用来精确匹配字符串的的方法。说白了就是在串字符串里提取出你想要的信息。
一些童鞋会感到奇怪了,按键精灵本身就有mid函数可以用来提取字符串了,为什么要用这个什么正则表达式?
确实,按键精灵本身会字符串处理的方法,但是他对于精确提取信息方面不够强大、准确。

举个例子来说:
正则表达式,又13655973216称正规表示法、常规表示法(英语:Regular Expression,在代码中常15655982354简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系17922654936列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式13555982269通常被用来检索、替换那些符合某个模式的文本。

我现在想要把上面这段文字里的红色部分的号码全部的提取出来。
如果是使用传统的方法mid的方法要怎么做呢?
1、先从头开始使用循环提取出每个字符
2、在循环中进行判断,如果是数字的话,就把这个数字存放在一个变量里并且重复叠加之前记录的数字
3、再进行判断这个变量的长度,如果超过了11位数,就记录下当前遍历到的位置
4、已当前遍历的位置开始继续往下遍历循环

这就是使用传统的方法提取这个字符串信息的思路。写到这里,小编我也实在是忍不住说一句:喵了个咪的!!这么复杂的流程就只为了提取出这几个号码!
我想大家看了之后都有这个念头吧。这个方法简直太坑啦!!

接下来,小编就用正则的方式来提取这几个号码给大家看看。(看完要记得保持冷静!)
  1. //把文本内容存放在变量里
  2. text = "正则表达式,又13655973216称正规表示法、常规表示法(英语:Regular Expression,在代码中常15655982354简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系17922654936列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式13555982269通常被用来检索、替换那些符合某个模式的文本。"
  3. Dim regEx, Matches, Match '需要用到的几个变量
  4. set regEx = New RegExp '创建一个RegExp对象
  5. regEx.[Global] = TRUE '设置全局可用性为TRUE,在需要更换此属性时,我会提醒你的。
  6. regEx.IgnoreCase = FALSE '设置区分大小写为FALSE,也就是不区分大小写了
  7. regEx.pattern ="\d+" '设置正则表达式
  8. Set matches = regEx.execute(text) '进行匹配
  9. For Each Match In Matches
  10. texts = Match & vbcrlf & texts
  11. next
  12. MessageBox texts
复制代码

大家看到了吗?区区的几行代码就能实现这个复杂的提取功能,比传统的方法好用了不止一星半点啊



正则怎么用?


通过上面的例子,大家也能明白正则的碉堡之处了。那现在我们就来学习下要怎么使用吧!!
我们先分解下上面的代码
  1. Dim regEx, Matches, Match '需要用到的几个变量
  2. set regEx = New RegExp '创建一个RegExp对象
  3. regEx.[Global] = TRUE '设置全局可用性为TRUE,在需要更换此属性时,我会提醒你的。
  4. regEx.IgnoreCase = FALSE '设置区分大小写为FALSE,也就是不区分大小写了
复制代码
这段代码大家可以不用多管,他主要是用来创建正则对象以及设定一些属性的,基本上不用改,直接复制使用即可
  1. regEx.pattern ="\d+" '设置正则表达式
复制代码
这里才是正则表达式的重中之重,[0-9]+ 这个就是用来匹配出刚才数字所使用的表达式。
不同的表达式组合方式可以用来匹配不同的字符串信息,灵活的吧表达式组合起来,基本上就没有你匹配不到的信息。
  1. Set matches = regEx.execute(text)
  2. For Each Match In Matches
  3. TracePrint Match
  4. next
复制代码
这句这是把保存在变量里的字符串使用上面的表达式进行匹配,然后输利用循环进行输出匹配到的信息


表达式应用

上面我们已经解释了正则表达式的重要性,那现在我们来进一步了解下表达式
一个完整的正则表达式,是有多个元字符进行组合构成的

元字符总体来说可以分成三大类:匹配字符匹配位置匹配次数
用来表达匹配字符的元字符主要有:(这里只先列举部分)
元字符 描述
. 匹配换行符以外的任何字符。
\w 与任何单词字符匹配,包括下划线。等价于"[A-Za-z0-9_]"。
\d 与一个数字字符匹配。


用来表达匹配位置的元字符主要:

元字符 描述
^匹配输入的开始位置。
$ 匹配输入的结尾。


用来表达匹配次数的元字符主要:(这里只先列举部分)
元字符 描述
*匹配前一个字符零次或几次。
+ 匹配前一个字符一次或多次
匹配前一个字符零次或一次。例如,"a?ve?"可以匹配"never"中的"ve"。


一个完整的正则表达式应该是这样:从什么地方开始,查找什么字符。查找多少次
然后它就会返回出所有符合这个条件的字符串

我们就以文章开头的表达式来分析下:“\d+” 这个表达式表示什么意思呢?
\d是表示任意的数字,+ 是表示匹配前面的这个字符多次。那这个表达式就可以理解为,从字符串的开头开始,匹配任意数字(\d)多次(+)。(如果没有特别指出开头位置的话,都是默认从开头开始匹配)说白了只要是一连串的数字用他都能直接匹配出来,所以在上面的这个text变量信息里就能把所有的号码提取出来

现在说说其他的元字符意思
.(点)它是用来匹配除了换行符以外的所有字符,可以包括数字、大小写英文、符号、中文等等。

+ 它是用来定义匹配的次数,用来匹配前一个字符一次或者多次的
范例:在字符串“sdfjwoanjianjinlinglind1234423”里使用 “a.+g”来匹配的话会得到 “anjianjinling”这个字符串
分析:.+可以表达任意数量不包含换行符的字符。结合上面的表达式意思就是:提取出以字母a开头字母g结尾的字符,在这两个字母之间,不论有多少其他的字符(除换行符外)都能提取出来。

\w 它是用于匹配包括下划线在内的单词的
范例: 在字符串“hi,root pic_root ”里使用 “\w+”来匹配的话会分别得到hi 和root以及pic_root 这三个结果

\d 它是用来匹配数字的。
范例:表达式 “0\d\d-\d\d\d\d\d\d\d\d” 这个可以匹配出字符串里以0开头带有三位数区号的固话:101-8803086 这样格式的数字

现在再来说是 “*” “+” “?” 这三个的区别
大家仔细看上面的表格说明,可以发现他们都是匹配次数,只是匹配的次数略有不同

范例:“r.+g” 这个表达式可以匹配出 reg,resdfg 这样的字符,但是无法匹配出 rg 这个字符,因为他的匹配次数至少是1次,但是rg这个单次里r和g之间并没有任何其他的字符,所以无法匹配到
r.*g” 这个表达式可以匹配出 reg,resdfg,rg 这样的字符 。因为他对于匹配的次数没有限制
r.?g” 这个表达式可以匹配出 reg,rg 这样的字符,但是无法匹配出 resdfg 这样的字符,因为他匹配的次数最多是1次,resdfg 这个单词中间的字符不只有一个,所以无法被匹配到。

^ 这个是匹配一行的开始。“^When in” 这个表达式可以从字符串 “When in the course of human events" 当中匹配到,
但是无法从“What and When in the” 当中匹配,因为When in 这个并不是在一行的开头位置

$ 这个是匹配行结束符。“weasel$” 这个表达式可以从字符串 “He's weasel” 当中匹配到,但是 “He's weasel a ”这个就无法匹配了,因为这个字符串不是以weasel 为结尾的。

后记


正则表达式虽然命令少,单个命令拿出来都可以比较好的理解,但是想要能灵活的应用还是需要花费一些时间的。这篇的院刊只是一个开头,之后还会有后续的正则表达式系列教学院刊发布出来,到最后引导大家结合POST技术一起来制作一些脚本工具。为啥是结合POST?因为正则表达式最适合应用在从网页源码里提取想要的信息,可以说正则和POST是一对好基 友,两者基本上不可分离。

如果童鞋们想要继续学习正则表达式的话,请继续关注之后的正则表达式系列院刊~~


正则表达式系列之二:正则表达式进阶用法
showtopic.aspx?topicid=572284&forumpage=1&page=1

正则表达式系列之三:正则实战-论坛贴吧一键签到
showtopic.aspx?topicid=572777&forumpage=1&page=1

院刊目录
showtopic.aspx?topicid=549014&forumpage=1&page=1



 



谢谢大家阅读,记得给小编送支花花 ! 顺手点个


[tr=rgb(143, 188, 143)]

按键精灵免费公开课

实战班:回合制通用教学火热报名

【听课对象】:对按键精灵感兴趣的同学们都可以来~
【上课地点】:零基础学按键精灵群(372671254)
【上课时间】:周天晚上19:30-21:00
【上课内容】:按键精灵脚本基础经验谈——图色命令

本期重点:回合制游戏--神武
学习时效:终生有效
上课时间:周2、周4、周6的 20:00--22:00
导师:工程师07
技术支持:果儿(院刊编辑)
点我进入按键学院报名啦 招生细节进群咨询招生办主任:2群-372671254(优先加入) 1群-376122403





    已有12评分我要评分查看所有评分

    本主题由 超级版主 n15976906190 于 2017/9/2 8:41:12 执行 审核主题 操作
    按键学院免费交流群:376122403

    按键学院招生计划
    按键学院系统教程
    2#

    学习学习

    3#

    是大大是大多数非

    4#

    完全没看懂,但是感觉很厉害!

    5#

    看看

    6#


    7#

    还好吧

    接单,收徒,脚本辅助定制,Q:960502043
    接单,收徒,脚本辅助定制,Q:960502043
    接单,收徒,脚本辅助定制,Q:960502043
    8#

    ?????????????????????

    博观而约取,厚积而薄发



    9#

    】-【201505期】只要10行代码!从上万行文本中提取任意想要的信

    10#

    这个是vbs里的功能吗

    11#

    学习学习

    12#

    谢谢分享!!!

    13#

    来学学这个怎么做的

    14#

    000000000000000000000

    15#

    学习一下

    16#

    说的不错

    定做各种脚本 有需要Q我379267797<font color="DarkOrchid"></font>
    17#

    adfafa

    18#

    760071708

    19#

    13131313154

    20#

    來看看.....................

    发新话题 回复该主题