Lua字符串匹配

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

猜你喜欢

转载自www.cnblogs.com/czwlinux/p/12703251.html