Lua 模式匹配基础

Alexer 发布于 阅读:17 速查

Lua 没有正则表达式,用的是模式串,写法更短。四个函数够用:string.find 返回起止下标,string.match 返回匹配到的内容,string.gmatch 循环取出全部匹配,string.gsub 做替换。

常用模式字符:%a 字母、%d 数字、%s 空白、%w 字母或数字,改成大写就是取反,比如 %D 表示非数字。魔法字符要加 % 转义,比如 %% 表示百分号本身。量词:* 表示零次以上,+ 表示一次以上,- 表示零次以上但尽量短,? 表示零次或一次。[] 是字符集,[^] 表示取反,^ 锚定开头,$ 锚定结尾,() 用来捕获。

local s = "name=Tom, age=18"

-- () 捕获,只取括号里的部分
print(string.match(s, "name=(%a+)"))  -- Tom
print(string.match(s, "age=(%d+)"))   -- 18

-- find 返回起止下标
print(string.find(s, "Tom"))          -- 6  8

-- gmatch 逐个取出所有匹配
for k, v in string.gmatch(s, "(%a+)=(%w+)") do
  print(k, v)
end

-- gsub 替换,%1 %2 引用捕获内容
print(string.gsub("a1b2", "(%a)(%d)", "%2%1"))  -- 1a2b  2

- 和 * 都是零次以上,区别是 - 匹配最短,抓标签、引号里的内容用它更稳。

语法基础 Lua 函数用法