LUA正则表达式 - 模式匹配
模式匹配相关库函数
按匹配查找:string.find (s,pattern [,init [,plain]])
两个返回值,被捕获内容的起始位置和终止位置,如未找到则返回nil。
参数s:指定字符串,参数pattern:匹配,可选参数init:初始查找位置(如果是负数将从字符串尾开始定位),可选参数plain:无参数时按模式匹配查找,当参数为true时使用单纯字符串进行匹配。
按位置捕获:string.sub (s,i [,j])
返回以i,j定位的子串内容。
参数s:指定字符串,参数i:初始查找位置(如果是负数将从字符串尾开始定位),可选参数j:无参数时默认匹配相对i的整段字符串,如果j比整个字符串大则自动修正,如果j比i小则返回空字符串。
按匹配捕获:string.match (s,pattern [,init])
返回按匹配捕获的子串,如未捕获则返回nil。如果在参数pattern中需要对内容进行捕获()则返回值变为依次捕获到内容。
参数s:指定字符串,参数pattern:匹配,可选参数init:初始查找位置(如果是负数将从字符串尾开始定位)
按匹配捕获并替换:string.gsub (s,pattern,replace [,n])
两个返回值,成功替换后的新字符串和被替换的次数,如未找到匹配则返回s原始内容。
参数s:指定字符串,参数pattern:匹配,参数replace:替换内容(可以是表或函数),可选参数n:替换次数,无参数则全部替换。
迭代器函数:string.gmatch (s,pattern)
每次迭代返回一个匹配的子串内容,该函数用于逐一遍历字符串中所有捕获到的匹配。
参数s:指定字符串,参数pattern:匹配
模式匹配预置的字符分类
. -- 任意字符 %a -- 字母 %c -- 控制符,如\n %d -- 数字 %g -- 除空格外的可打印字符 %l -- 小写字母 %p -- 标点符号 %s -- 空白字符 %u -- 大写字母 %w -- 字母和数字 %x -- 十六进制数字 %n -- 第n次被()捕获的内容,n是一个数字,如:%1 %2 %3,而%0则意味着整个匹配而不是捕获 %f -- 前置排除模式 %b -- 范围匹配,使用两个字符参数确定前后成对的区域,如:%b<> %b{} %b33 %b-+ 遵循最远距离贪婪匹配规则
魔法字符(修饰符)
% -- 转义符 + -- 重复一次或多次 * -- 重复零次或多次(最远距离贪婪匹配) - -- 重复零次或多次(最近距离匹配) ? -- 重复零次或一次(表示可有可无) ^ -- 锚定开头 $ -- 锚定结尾 [] -- 自定义字符分类,分类间的关系是"或" () -- 捕获,空的捕获可以返回位置信息,如:字符串"Name",模式"()am()"返回2,4。
使用修饰符时一定要注意上下文,如:.*很可能匹配超预期
在结尾使用"-"并没有意义,这样只能匹配到空字符,-后面总是要跟上一些东西来限制扩展范围
当模式匹配字母大写时表示其补集,非字母代表其本身,在模式中%需要转义,如%%。而匹配无意义的修饰符时也需要加转义字符%。
Lua正则在线测试工具 (luatos.com)
LuatOS 在线模拟 - lua在线测试