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