# 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
  • - 是最短匹配
test="intx;/*x*/ inty;/*y*/" print(string.gsub(test, "/%*.-%*/", "<COMMENT>"))
--> int x; <COMMENT> int y; <COMMENT>
1
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
  • 常见的还有 '%b[]','%b%{%}' 和 '%b<>' 都是对称匹配

# 捕获

# string库用到正则的函数