# lua 正则操作
# lua正则特别之处
- 并未使用POSIX规范的正则表达式,主要是太大,4000行
- lua自己实现了模式匹配只有400行,基本满足要求
- lua 使用%转义字符,其他语言貌似都是\
# 模式
- lua支持一下字符类
字符类 | 说明 |
---|---|
. | 任意字符 |
%a | 字母 |
%c | 控制字符 |
%d | 数字 |
%l | 小写字母 |
%p | 标点字符 |
%s | 空白符 |
%u | 大写字母 |
%w | 字母和数字 |
%x | 十六进制数字 |
%z | 代表0的字符 |
上面的字符类,大写形式,表示补集, %A表示非字母
# 特殊字符 (匹配串需要%来转义)
字符类 | 说明 |
---|---|
( | |
) | |
. | |
% |
# 修饰符(4个)
字符类 | 说明 |
---|
- * 是最长匹配 比如替换注释
test="intx;/*x*/ inty;/*y*/" print(string.gsub(test, "/%*.*%*/", "<COMMENT>"))
--> int x; <COMMENT>
1
2
2
- - 是最短匹配
test="intx;/*x*/ inty;/*y*/" print(string.gsub(test, "/%*.-%*/", "<COMMENT>"))
--> int x; <COMMENT> int y; <COMMENT>
1
2
2
# 模式
- 就是多个字符类在一起表示的一个模式
- 比如日期 %d%d%d%d-%d%d-%d%d 就是一个模式串
- lua语言的转义符还是\ , 只有作用于函数的模式串使用%做转义。
- [0-9] 这种叫做自定义的字符类,匹配一个数字 等价于%d
- \bxy 匹配x开始,y结束的字符串
print(string.gsub("a (enclosed (in) aa) line", "%b()", ""))
---> a line
1
2
2
- 常见的还有 '%b[]','%b%{%}' 和 '%b<>' 都是对称匹配