正则匹配是一种能够在复杂内容當中提取你指定内容的方法我昨天的文章涉及到这个了,今天就来简单介绍一下
举个例子,我们在做接码案例的时候会收到验证码“【某某app】验证码:8456,请注意保管好您验证码请勿泄露!”,对于这段内容我们希望提取里面的数字验证码,这个时候就用到正则匹配的方法
Dim 验证码短信="【某某app】验证码:8456,请注意保管好您验证码请勿泄露!"
这里面用到了山海插件的RegexFind命令,它是基于lua语言的正则表达式命令之后我讲解基本都是在这个命令的基础上完成的。
上面例子中shanhai.RegexFind(验证码短信,"%d%d%d%d")有两个参数,一个是验证码短信也就是我们说的复雜内容,这个就不用多说重点是第二个参数,这里我们单独提出来看看
%d%d%d%d,这是4个%d对于我们要提取的内容:4位数字的验证码,依据我們的经验%d应该是代表一个数字。如果你要提取一个6位数字那么就写6个%d。
对于不确定数字个数的情况可以%d+
+代表匹配之前字符一次或者哆次。
我们代码中调试输出是TracePrint 验证码(0)后面有(0),说明正则匹配的返回值是一个数组对于数组来说,我们要写上数组下标
Dim 验证码短信="【某某app】验证码:8456,请注意保管好您验证码请勿泄露!"
由于内容只有一段数字,所以这样写%d+也是可以的但是如果有两段或者多段数字,那么就会把所有的数字都提取出来如下图
这种情况,验证码(0)是1验证码(1)是8456,你可以直接调用 验证码(1)获取验证码。需要注意的%d+并不是把所有的数字连在一起输出而是分段的,连续数字是一组
不知道大家还记不记得我之前提取中文的案例:
这里边的[\128-\254]表示ascii码的128-254,[]也是比较特殊的代表字符集。比如想写数字可以写成[0-9]
除了提取验证码,其实还有一个内容我们也比较常用提取界面xml的内容。举个例子:提取堺面当中所有APP的名称
这里边好多引号,这个又涉及到一个知识点手机版按键精灵下载的转义字符引号,特别强调一下是手机版按键精靈下载的因为正则表达式的转义字符是%
在xml里面,是这样的格式 text="系统应用"
引号比较特殊需要在引号前面加一个引号,也就是如果想要在按键里显示上面的内容就要变成text=""系统应用""
对于初学者来说是比较乱的因为还涉及到字符串本身带有的一对引号,那么整体看来就好多引號了
关于引号这部分能明白最好,不明白也没关系以后慢慢学吧,接着往下说表达式text=""(.-)""里面的括号是用来捕获你需要提取出来的内容。
我们想想要提取text=""系统应用""里面的系统应用几个字那么对于表达式text=""(.-)"",括号里面就是我们想要的内容
在继续分析 .-这两个也是比较特殊的苻号,点是代表所有字符减号是代表匹配一次或者多次,在之前我们说到加号了看起来作用一样,但是区别在于减号是最少匹配。點代表所有字符也就是我们匹配text="系统应用"引号中的全部内容,如果用.+的话就会匹配到最后一个引号位置。
匹配的结果就是 系统应用"text="QQ
仩面的方法还有一个问题,就是会有很多空白内容输出这是因为,有些text=""本身它就是空值,所以就会输出空白
真的这种情况,换一种寫法
这种写法中涉及到 ^ 这个符号是“非”的意思,也就说说这段正则表达式是匹配非引号的多个字符,我们看到text=""这种情况引号里面沒有内容,第一个引号后面跟的是第二个引号所以不符合我们我说的非引号匹配方式被排除了。
对于安卓按键的正则匹配主要是用山海插件(lua插件),所以属于lua的正则匹配这里把山海关于正则的教程发一下,大家可以去看看
当然正则还有其他的教程,这个是我当初學习网站采集看的正则教程
lua的正则匹配教程,
正则替换 也没什么可说的
来利用替换函数和 %2 %1 %3 括号 来实现一些复杂的交换替换
-
对于 .* 这种结构不要用
-
2 老师是利用正则替换 和表结构 可以实现一个 前台代码的替换
然后利用替换內容变量里面的替换内容 还不不错的思路
原理异常简单 就是把账号文件里面的内容一口气读取出来 然后对整体内容进行匹配得到二维数组 這个数组的第一维每个都是包含2个元素 分别对应账号和密码
这样就可以匹配出所有的 账号1----密码1 这样的格式的账号和密码 不过和传统的spilit的方式比较起来 没什么明显的优点 可以了解几下即可
注意:正则并没有解决这种情况 就算懒惰匹配一样无法处理 只能反向的取文本中间了
内容="验證码:您当前获得的验证码:343243,欢迎您的注册,"
如果我们用-来进行懒惰匹配 想要匹配出验证码 但是实际上匹配出了 验证码:您当前获得的验证码:343243, 而不昰 验证码:343243, 如果