安卓按键:紫猫老师的正则教程

01.01 正则之什么是匹配模式(VIP)

注:紫猫实现正则的是使用的紫猫插件的正则功能

https://zimaoxy.com/m/post/zm.about/

lua自身的正则介绍(因为我们案桌下的插件都是lua的 所以)

  1. lua的正则和常规正则的写法不同 无法直接使用其他正则表达式

    本节课没说什么只是简单的使用了一个例子来演示下正则的用法

01.02 正则之匹配数字(VIP)

12312

Lua自身的正则介绍

https://zimaoxy.com/m/post/pattern-matching/

小知识:控制字符的介绍

ASCII码中,第0~31号及第127号(共33个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等

小知识:正则匹配的一个小原理

例子 "QQ:3423423434"

正则表达式:"%d%d" 意思是匹配2个连续的数字

我原来理解的是 会匹配出 34 42 23 34 42 23 34 43 34

但是按照匹配流程原理看 实际上 首先匹配出了34 把34这个提取出来 然后会继续匹配34之后又无符合要求的 而不是从34那里继续找

小知识:如果单独使用* 这种数量为0的字符 因为他的数量表示0个到多个 所以返回结果很多时候都是 会造成卡在这里无限卡 所以这样类似的写法千万要小心 主要这种可以表示数量为0的字符 单独使用的时候千万小心


01.03 正则之匹配字母标点空白等内容(VIP)

1这节课主要内容在于转义字符

小知识:正则表达式的转义字符 在正则里面有特殊含义的一些字符 如果出现在正则表达式里面 如何保证让正则认为他是一个普通字符而不是一个具有特殊意义的正则符号呢 前面加上%即可

常见的在正则中有特殊含义的字符列表下:

小知识:@属于标点符号 所以属于%p

小知识:了解 %aà字母 %dà数字 %s空白字符 %w字母数字 %s空白符(注意大小写 目前是都小写 但是如果把这些小写变为大写 那么久变成了反向的范围) 目前没有汉字的匹配

小知识:匹配内容存在中文的出现的问题 乱码

一个中文正常而言是3个字符 如果我们用。来匹配 那么会出现问题

01.04 正则之匹配集合(VIP)

小知识:[]的用法的注意事项

1.[]里面 可以加入上面所说的正则字符串 比如[%d%a] 这样的结构 但是 如果里面写入. [.] 这里面的.就代表字符.它本身 注意-也是一样 [0-7-] 这个就表示0到7的数值和一个-字符

2.[^%d]这个给了一个例子提取出emial地址 很有参考意义

3[com|net|cn] 也有这种操作

4[0-7] [a-z] 表示一个范围内的数字或者字母

01.05 正则之贪婪与懒惰匹配(VIP)

34534

这里和电脑上的不大一样 和一般的正则也不大一样

 单个字符类跟一个 '*', 将匹配零或多个该类的字符。 这个条目总是匹配尽可能长的串贪婪匹配

 单个字符类跟一个 '+', 将匹配一或更多个该类的字符。 这个条目总是匹配尽可能长的串(贪婪匹配);

 单个字符类跟一个 '-', 将匹配零或更多个该类的字符。 和 '*' 不同, 这个条目总是匹配尽可能短的串(懒惰匹配 唯一的懒惰匹配);

 单个字符类跟一个 '?', 将匹配零或一个该类的字符。 只要有可能,它会匹配一个;(注意这个不是贪婪匹配 只是匹配0个1个 而且倾向于先匹配1个

注:只有-是懒惰匹配 * +都是贪婪匹配 ?是特殊的一种匹配 不属于前面的任何一种 而且和正常正则的用法不同的 注意

例子:内容="个人QQ:23434234,序列号34234-6564 等待测试下"

要取出里面的QQ号和 寻列号

[%d%-]+

例子 匹配出某个email

内容:wwew@45435@gmail.com

有2个@

(1)匹配出第一个@前的位置的内容 [%d]

01.06 正则之平衡匹配(VIP)

5345

%n, 这里的 n 可以从 1 到 9; 这个条目匹配一个等于 n 号捕获物(后面有描述)的子串。

%bxy, 这里的 xy 是两个明确的字符; 这个条目匹配以 x 开始 y 结束, 且其中 xy 保持 平衡 的字符串。 意思是,如果从左到右读这个字符串,对每次读到一个 x 就 +1 ,读到一个 y 就 -1, 最终结束处的那个 y 是第一个记数到 0 的 y。 举个例子,条目 %b() 可以匹配到括号平衡的表达式。

%bxy 其实就是设置开始和结束的字符串 来匹配出符合要求的东西 而且是要求取到的字符串内 开头字符和结束字符的数量是一致的

内容="我的QQ:(4534534),其他信息再说"

可以直接%b() 作为正则字符串来匹配即可 可以匹配出(4534534)

注:这个Xy只能是 一个字符 不能是汉字 因为汉字占用3个字节

注意:这个用法限制很大 你写好了开始和结束字符后 内部无法再增加更多的匹配

Dim s = "(紫猫老师QQ:(345911220), ddddd)+Email:345911@(220)@qq.com"

TracePrint "000"

Dim data = zm.RegExMatch(s, "%b()")

结果 只能找第一层的符合要求的

当前脚本第10行:(紫猫老师QQ:(345911220), ddddd)

当前脚本第10行:(220)

        01.07 正则之边界匹配(VIP)

%f[set], 指 边境模式; 这个条目会匹配到一个位于 set 内某个字符之前的一个空串, 且这个位置的前一个字符不属于 set 。 集合 set 的含义如前面所述。 匹配出的那个空串之开始和结束点的计算就看成该处有个字符 '\0' 一样。

posted @ 2018-06-28 14:02  点-滴  阅读(1034)  评论(0编辑  收藏  举报