string.gmatch (s, pattern)
描述:lua的高端匹配函数
机制:返回一个迭代器函数,每一次调用这个函数,返回一个在字符串s找到的下一个符合pattern描述的子串。如果参数pattern描述的字符串没有找到,迭代函数返回nil
为方便理解编写测试代码如下:
localstr ="12ab34,eed,56"
local func_itor = string.gmatch(str,"%d+")
-- 第一次调用函数func_itor
print("func_itor ret is ", func_itor())
-- 再次调用函数func_itor
print("func_itor ret is ", func_itor())
-- 使用循环来打印
local sourcestr ="hello world from Lua"
local index = 1
print("\noutput capture using loop:")
for word in string.gmatch(sourcestr,"%a+")do
print(index, word)
index = index + 1
end
-- 查找属性对
local attrstr ="from=world, to=Lua, name=AlbertS"
print("\noutput attr pair capture using loop:")
for k,v in string.gmatch(attrstr,"(%w+)=(%w+)") do
print(k, v)
end
打印结果
总结
函数string.gmatch()返回的类型是一个函数。
由函数string.gmatch()返回的迭代函数每一次调用都会得到新的匹配结果。
关于匹配符的含义%a表示查找一个字母,%w表示查找一个数字或者字母,%d表示查找一个数字,而后面的+表示1个或者多个,即%a+表示查找连续的1个及以上的字母字符串,除了这几个外还有很多类型的匹配符,以后还要仔细去说,在这里不着用过多的篇幅。
知道了匹配符的含义自然就能了解(%w+)=(%w+)的意义了,它就是用来寻找形如key=value的字符串的。
从最后一组输出结果可以看出,当查找的字符串不包含所要匹配的字符时,返回的迭代函数调用时会返回nil
网友评论