lua string 库使用模式匹配来处理字符串的查找和替换,但是它的正则表达式与一般的POSIX规范的正则表达式不一样。因为要保持程序精简。(只用了500行代码就实现咯)
模式:
- %a 匹配字母
- %c 匹配控制字符
- %d 数字
- %l 小写字母
- %p 标点字符
- %s 空白符
- %u 大写字母
- %w 字母和数字
- %x 十六进制数字
- %z 代表0的字符
- ^ 一行的开头
- $ 一行的结束
%b
匹配以 x 开头, y 结束的字符 以上字符类的大写,表示该字符类的补集。 比如%A 表示非字母的字符。
- % 是模式中的转义字符(需要转义的特殊字符:( ) . % + - * ? [ ] ^ $ ),
\ 是LUA中字符串的转义字符( “ , “)
可以用 [] 方括号来定义字符集如
- [%w_] 用于匹配字母数字和下划线
- [%[%]] 用于匹配 一对方括号
- [0-9] 用于匹配数字, 与%d一样
- [0-9a-fA-F] 与%x一样,匹配十六进制数字
- [^xxx] 不包含后面的字符
- 在一个字符集的前面加一个
^可以得到它的补集。
模式修饰符
- + 匹配前一字符1次或多次
- * 匹配前一字符0次或多次
- - 匹配前一字符0次或多次
- \? 匹配前一字符0次或1次
1 | %a+ 匹配一个字母,多个字母,或一个单词 |
贪婪与懒惰匹配
捕获
捕获机制允许一个模式串中的一部分来匹配目标串种的一部分。写法是模式串中你需要捕获的那部分用()括起来,例如:
1
2
3local pair = "name = anna"
local key, value = string.match(pair, "(%a+)%s*=%s*(%a+)")
print(key, value) --> name anna我们也可以将捕获用于模式串自身,”([\”‘])(.-)%1”,这里的%1表示匹配第一个捕获的一份拷贝。
()捕获的不是空内容, 而是捕获在目标字符串中的位置