在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1. 基础字符串函数: 1 s = "hello world" 2 i, j = string.find(s,"hello") 3 print(i, j) --输出1 5 4 i, j = string.find(s,"l") 5 print(i, j) --输出3 3 6 print(string.find(s,"lll")) --输出nil string.find函数还有一个可选参数,它是一个索引,用于告诉函数从目标字符串的哪个位置开始搜索。主要用于搜索目标字符串中所有匹配的子字符串,且每次搜索都从上一次找到的位置开始。如: local t = {} local i = 0 while true do i = string.find(s,"\n",i+1) if i == nil then break end t[#t + 1] = i end 2). string.match函数: 1 date = "Today is 2012-01-01" 2 d = string.match(date,"%d+\-%d+\-%d+") 3 print(d) --输出2012-01-01 3). string.gsub函数: 该函数还有可选的第4个参数,即实际替换的次数。
还能根据这个函数来实现一些其他的功能,譬如 split string: string.split = function(s, p) local rt= {} string.gsub(s, '[^'..p..']+', function(w) table.insert(rt, w) end ) return rt end -- 测试代码如下: local str = "abc,123,hello,ok" local list = string.split(str, ',') for _, s in ipairs(list) do print(tostring(s)) end 另外观看 云风的这篇文章,发现string.gsub函数 还可以这样用: local str = "#qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&#" str = str.rep(str , 1000) str = string.gsub(str , '&', '&') str = string.gsub(str , '#', '@@@') str = string.gsub(str , 'q', 'Q') str = string.gsub(str , '#', 'B-B') print(str) 上述的实现也可写成这样 来写~如下: local escapeAttrib = { ['&'] = '&'; ['#'] = '@@@'; ['q'] = 'Q'; ['e'] = 'B-B'; } local str = "#qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&#" str = str.rep(str , 1000) str = string.gsub(str , '[&#qe]', escapeAttrib) print(str) 使用lua自带的SciTe 跑了多次,目测 前者表现会稍好一点; 4). string.gmatch函数: words = {} s = "hello world" for w in string.gmatch(s,"%a+") do print("----") print(w) words[#words + 1] = w end --输出结果为: 3. 模式:
这些元字符的大写形式表示它们的补集,如%A,表示所有非字母字符。 格式字符串可能包含以下的转义码: %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符 为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入: (1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号. 4. 捕获(capture): pair = "name = Anna" key,value = string.match(pair,"(%a+)%s*=%s*(%a+)") print(key,value) --输出name anna date = "Today is 2012-01-02" y,m,d = string.match(date,"(%d+)\-(%d+)\-(%d+)") print(y,m,d) --输出2012 01 02 还可以对模式本身使用捕获。即%1表示第一个捕获,以此类推,%0表示整个匹配,如: 1 print(string.gsub("hello Lua","(.)(.)","%2%1")) --将相邻的两个字符对调,输出为ehll ouLa 2 print(string.gsub("hello Lua!","%a","%0-%0")) --输出为h-he-el-ll-lo-o L-Lu-ua-a! 5. 替换: function expand(s) return (string.gsub(s,"$(%w+)",_G)) end name = "Lua"; status = "great" print(expand("$name is $status, isn't it?")) --输出 Lua is great, isn't it? print(expand("$othername is $status, isn't it?")) --输出 $othername is great, isn't it? function expand2(s) return (string.gsub(s,"$(%w+)",function(n) return tostring(_G[n]) end)) end print(expand2("print = $print; a = $a")) --输出 print = function: 002B77C0; a = nil 另外:附上网路上关于Lua的table和String相互转化的方法如下: -- 序列化tablle表--將表轉化成string function serialize(obj) local lua = "" local t = type(obj) if t == "number" then lua = lua .. obj elseif t == "boolean" then lua = lua .. tostring(obj) elseif t == "string" then lua = lua .. string.format("%q", obj) elseif t == "table" then lua = lua .. "{\n" for k, v in pairs(obj) do lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n" end local metatable = getmetatable(obj) if metatable ~= nil and type(metatable.__index) == "table" then for k, v in pairs(metatable.__index) do lua = lua .. "[" .. serialize(k) .. "]=" .. serialize(v) .. ",\n" end end lua = lua .. "}" elseif t == "nil" then return nil else return "-nil-" --error("can not serialize a " .. t .. " type.") end return lua end -- 反序列化tablle表--將string轉化成table function unserialize(lua) local t = type(lua) if t == "nil" or lua == "" then return nil elseif t == "number" or t == "string" or t == "boolean" then lua = tostring(lua) else error("can not unserialize a " .. t .. " type.") end lua = "return " .. lua local func = loadstring(lua) if func == nil then return nil end return func() end 未完带整理;阅参考文章 请Click :Here 1. 基础字符串函数: 1 s = "hello world" 2 i, j = string.find(s,"hello") 3 print(i, j) --输出1 5 4 i, j = string.find(s,"l") 5 print(i, j) --输出3 3 6 print(string.find(s,"lll")) --输出nil string.find函数还有一个可选参数,它是一个索引,用于告诉函数从目标字符串的哪个位置开始搜索。主要用于搜索目标字符串中所有匹配的子字符串,且每次搜索都从上一次找到的位置开始。如: local t = {} local i = 0 while true do i = string.find(s,"\n",i+1) if i == nil then break end t[#t + 1] = i end 2). string.match函数: 1 date = "Today is 2012-01-01" 2 d = string.match(date,"%d+\-%d+\-%d+") 3 print(d) --输出2012-01-01 3). string.gsub函数: 该函数还有可选的第4个参数,即实际替换的次数。
还能根据这个函数来实现一些其他的功能,譬如 split string: string.split = function(s, p) local rt= {} string.gsub(s, '[^'..p..']+', function(w) table.insert(rt, w) end ) return rt end -- 测试代码如下: local str = "abc,123,hello,ok" local list = string.split(str, ',') for _, s in ipairs(list) do print(tostring(s)) end 另外观看 云风的这篇文章,发现string.gsub函数 还可以这样用: local str = "#qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&#" str = str.rep(str , 1000) str = string.gsub(str , '&', '&') str = string.gsub(str , '#', '@@@') str = string.gsub(str , 'q', 'Q') str = string.gsub(str , '#', 'B-B') print(str) 上述的实现也可写成这样 来写~如下: local escapeAttrib = { ['&'] = '&'; ['#'] = '@@@'; ['q'] = 'Q'; ['e'] = 'B-B'; } local str = "#qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&##qwe&qwe&qwe&#" str = str.rep(str , 1000) str = string.gsub(str , '[&#qe]', escapeAttrib) print(str) 使用lua自带的SciTe 跑了多次,目测 前者表现会稍好一点; 4). string.gmatch函数: words = {} s = "hello world" for w in string.gmatch(s,"%a+") do print("----") print(w) words[#words + 1] = w end --输出结果为: 3. 模式:
这些元字符的大写形式表示它们的补集,如%A,表示所有非字母字符。 格式字符串可能包含以下的转义码: %c - 接受一个数字, 并将其转化为ASCII码表中对应的字符 为进一步细化格式, 可以在%号后添加参数. 参数将以如下的顺序读入: (1) 符号: 一个+号表示其后的数字转义符将让正数显示正号. 默认情况下只有负数显示符号. 4. 捕获(capture): pair = "name = Anna" key,value = string.match(pair,"(%a+)%s*=%s*(%a+)") print(key,value) --输出name anna date = "Today is 2012-01-02" y,m,d = string.match(date,"(%d+)\-(%d+)\-(%d+)") print(y,m,d) --输出2012 01 02 还可以对模式本身使用捕获。即%1表示第一个捕获,以此类推,%0表示整个匹配,如: 1 print(string.gsub("hello Lua","(.)(.)","%2%1")) --将相邻的两个字符对调,输出为ehll ouLa 2 print(string.gsub("hello Lua!","%a","%0-%0")) --输出为h-he-el-ll-lo-o L-Lu-ua-a! 5. 替换: function expand(s) return (string.gsub(s,"$(%w+)",_G)) end name = "Lua"; status = "great" print(expand("$name is $status, isn't it?")) --输出 Lua is great, isn't it? print(expand("$othername is $status, isn't it?")) --输出 $othername is great, isn't it? function expand2(s) return (string.gsub(s,"$(%w+)",function(n) return tostring(_G[n]) end)) end print(expand2(" 全部评论
专题导读
热门推荐
热门话题
阅读排行榜
|
请发表评论