1.字符
. | 任意字符 |
%a | 字母 |
%b | 成对匹配 |
%c | 控制字符 |
%d | 数字0-9 |
%g | 除了空格以外可以打印的字符 |
%f | %f[char-set],边界匹配,前一个不在范围内,后一个在 |
%l | 小写字母 |
%p | 标点字符 |
%s | 空白符 |
%u | 大写字母 |
%w | 字母和数字 |
%x | 十六进制数字 |
%z | 代表0的字符 |
ops:上面的字符类(%b 除外),大写形式,表示补集, 例如:%A表示非字母
2.特殊字符
%.[]()^$*+-? 使用时需要%来转义
3.修饰符
- + 匹配前一字符1次或多次
- ? 匹配前一字符0次或1次
-
* 是最长匹配,只匹配开始和结尾,不管中间是否有可匹配的字符;*是贪婪的,效率低
test="There's [smile] abc [123]~" print(string.gsub(test, "%[.*%]", "noting"))
--> There's noting~ --"[smile] abc [123]"->"noting"
- - 是最短匹配,是吝啬的,从第一个'['开始,找到']'就结束
test="There's [[smile] abc [123]~"print(string.gsub(test, "%[.-%]", "noting"))
--> There's noting abc noting~ --"[[smile]"和"[123]"->"noting"
常见的还有 ‘%b[]','%b%{%}’ 和 ‘%b<>’ 都是对称匹配,成对匹配
test="There's [[smile] abc [123]~"print(string.gsub(test, "%b[]", "noting"))
--> There's [noting abc noting~ --"[smile]"和"[123]"->"noting"
()圆括号是一个很好用的元字符,如<a>,如果我们只是想让lua正则引擎返回字符a,可以采用模式<(.+)>,否则它会返回整个字符串。
待续