前两篇的正则系列的院刊,已经给童鞋们初步先容和讲解了关于正则的利用方法和一些技巧。
只要10行代码!
从上万行文本中提取任意想要的信息
万千军中直取首领的正则进阶,想不想学
通过这两篇的院刊,相信大家已经能初步的理解了正则的利用了。
那本日,
POST和正则
记得在第一篇正则系列院刊的时候就和童鞋们说过,正则和POST是一对好基 友。
由于通过POST和GET方法得到的网页全是源文件,想要得到里面的信息的话就须要合营正则表达式来提取(虽然也可以用len、mid之类的函数合营提取。但是太繁芜繁琐)
而正则表达式最大的好处就在能够从弘大繁芜的文本里,精确的提取出想要的信息。
实战范例
我们这里就已制作一个按键论坛的登录和签到的脚本并且获取账号部分信息为范例,给大家先容下正则表达式的用法
思路:
1、先利用POST方法在按键论坛上登录账号和密码
2、利用GET的方法进行签到
3、利用正则表达式,提取网页上的信息(既是账号的一些信息)
1、利用POST方法进行登录账号
//先把须要登录的账号和密码进行赋值到变量账号 = \公众\"大众密码 = \公众\公众//发送账号登录要求的地址,以及POST要求的内容登录 = \公众http://bbs.anjian.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1\"大众上岸头信息 = \"大众username=\"大众 & 账号 & \公众&password=\"大众 & 密码 & \公众&quickforward=yes&handlekey=ls\"大众Set http = CreateObject(\"大众WinHttp.WinHttpRequest.5.1\"大众) '创建工具http.open \"大众POST\"大众, 登录, Falsehttp.setrequestheader \公众Content-Type\"大众,\"大众application/x-www-form-urlencoded\公众 //加上2个headerhttp.setrequestheader \公众Content-Length\"大众,len(上岸头信息) //用函数取字符串长度http.send 上岸头信息//发送要求,带着内容复制代码
上面这段代码便是通过POST的方法登录登录账号信息,但是想要完成登录还不止这一步,由于在登录之后论坛并不是直接进入了首页,而是须要经由一个跳转,这种跳转在利用POST的时候是不会自动进行的,以是我们须要利用GET方法再进一次首页
http.open \"大众GET\公众, 首页, falsehttp.send If instr(http.responsetext, 账号) Then MessageBox \公众登录成功\公众End If复制代码
进入首页后查找源代码中是否有须要登录的账号字符串,如果有,就解释已经成功的登录了。
2、签到部分
账号签到部分我们直策应用GET的方法,只要找到签到的要求链接就行了
签到 = \公众http://bbs.anjian.com/plugin.php?id=dsu_amupper:pper&ppersubmit=true&formhash=97df5d05&infloat=yes&handlekey=dsu_amupper&inajax=1&ajaxtarget=fwin_content_dsu_amupper\公众http.open \公众GET\"大众, 签到, falsehttp.send复制代码
利用GET方法获取一次这个签到链接之后,这个账号就签到完成了
3、接下来便是通过正则的办法,来获取到这个账号的相应的信息了
这里已获取账号的用户组,还有积分为范例。
登录按键论坛首页后,右击网页,选择查看源代码,就能查看到这个网页的源码了。
接着我们找到和用户组干系的那段源码
在这段源码中我们真正须要提取的是“小学一年级” 这段字符,
那正则表达式就可以这样写 “showUpgradeinfo\)\公众>(.+)”
(.+) 这个就表示我们须要提取出来的字段。前面的showUpgradeinfo\)\"大众> 以及后面的 部分,都是为了把他和全体页面的代码区服开来,防止获取到其他无关的部分。
获取到用户组之后,我们还可以获取下账号的积分
我们须要获取的是”积分: 6“ 这个字段,那这个表达式就比较好写了
正则表达式:积分: \d+
这样就能直接获取到这个账号的积分了。
现在已经把表达式剖析出来,那只要套用上正则的代码,就可以输出这写信息了
完全代码
登录 = \"大众http://bbs.anjian.com/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1\"大众首页 = \"大众http://bbs.anjian.com/forum.php\"大众签到 = \"大众http://bbs.anjian.com/plugin.php?id=dsu_amupper:pper&ppersubmit=true&formhash=97df5d05&infloat=yes&handlekey=dsu_amupper&inajax=1&ajaxtarget=fwin_content_dsu_amupper\公众上岸头信息 = \"大众username=\"大众 & 账号 & \公众&password=\公众 & 密码 & \"大众&quickforward=yes&handlekey=ls\"大众//发送账号登录要求的地址,以及POST要求的内容Set http = CreateObject(\"大众WinHttp.WinHttpRequest.5.1\"大众) '创建工具http.open \公众POST\"大众, 登录, Falsehttp.setrequestheader \"大众Content-Type\公众,\公众application/x-www-form-urlencoded\"大众 //加上2个headerhttp.setrequestheader \公众Content-Length\"大众,len(上岸头信息) //用函数取字符串长度http.send 上岸头信息//发送要求,带着内容//打开头页http.open \公众GET\"大众, 首页, falsehttp.send If instr(http.responsetext, 账号) Then MessageBox \公众登录成功\公众End Iftext = http.responsetext//进行签到http.open \公众GET\"大众, 签到, falsehttp.send //利用正则匹配进行获取账号干系信息set regEx = New RegExp '创建一个RegExp工具regEx.[Global] = TRUE '设置全局可用性为TRUE,在须要改换此属性时,我会提醒你的。regEx.IgnoreCase = FALSE'设置区分大小写为FALSE,也便是不区分大小写了regEx.pattern = \公众showUpgradeinfo\)\"大众\"大众>(.+)\"大众'设置正则表达式Set matches = regEx.execute(text) '进行匹配For Each Match In MatchesTracePrint \"大众账号的用户组为:\"大众 & Match.SubMatches(0)NextregEx.pattern = \"大众积分: \d+\"大众Set matches = regEx.execute(text)'进行匹配For Each Match In MatchesTracePrint \"大众当前账号的积分为:\公众 & MatchNext复制代码
后记
正则和POST的结合用法还有很多,他们的用途也是非常大,只假如想实现不开网页就进行获取网站信息之类的操作,都是可以通过这两个方法结合来实现。
上面这个范例还只是实现了单个账号的登录和签到,童鞋们可以自行的进行扩展,批量登录、签到,百度贴吧的登录、签到等等