find、match、gsub、gmatch
find返回的是找到的第一个字符的位置和最后一个字符的位置。
match返回的是找到的字符串;有一个比较特殊的地方
print(string.match("hello", "()ll()")) 这里返回的是找到的ll的第一个位置跟最后一个位置的下个位置比如这里返回3 5
gsub返回替换之后的字符串和替换的次数;可以替换n个;n是可选的,如果指定了n的个数则最多替换n次;
gmatch返回的是迭代函数;可以通过遍历的方式来获得所有查找到的字符串。
function expand( s ) return (s:gsub("$(%w+)", _G)) end name = "lua" status = "great" print(expand("$name is $status, is right"))
如上返回的是:lua is great, is right
当gsub的匹配中以$开头的时候,他会在后面的table中查找对应的name进行替换;如果没有找到则不替换
s = [[then he said : "it‘s all right"!]] q, quo = s:match("([\"‘])(.-)%1") print (quo)
返回结果:it‘s all right
在匹配模式里面加()则表示捕获。第一个捕获可标识为%1,意思是匹配的模式跟第一个捕获到的内容要一样的匹配。
s = "dkdk2kkk 2llk sk s2skk2lsk2" for w in s:gmatch("[^2 ]+") do print (w) end
返回的是所有不为空格和数字2开头的连续字符。
当^这个字符放在最开始的时候表示必须从第一个开始匹配,如果不符合就无需再循环匹配。
s=" hello lua! " print(s:gsub("^%s*(.-)%s*$", "%1"))
如上则表示从第一个字符开始匹配0个或者多个空格。无需再循环从第二个字符从头到尾再搜索一边。
%b的应用
"%b()" 表示匹配以左括号开始右括号结束的字符串
比如s = "dkdk{sdk}sksk"
s:gsub("%b{}", "123")
则返回dkdk123sksk
原文:https://www.cnblogs.com/czwlinux/p/12703251.html