在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
字符串库
注:字符串在Lua中是不可变的。不论什么的string操作都不会去改变原有的字符串。都是返回新的字符串 一、一般函数 1. 求长度 s = "Hello LUA "; print(string.len(s)); print(#s); 2. 反复 print(string.rep(s,3)); -- s 反复了3次 3. 大写和小写转换 print(string.upper(s)); print(string.lower(s)); -- 大写和小写的一个典型用途,假如要对一个字符串进行比較,不区分大写和小写 table.sort(a, function(a,b) return string.lower(a) < string.lower(b); end); print(s); -- 没有改变过,Lua中字符串是不可改变的。 4. 截取子串 s = "[Hello]"; print(string.sub(s,2,-2)); -- 这样就去掉了头和尾,负数表示从最后開始索引。-1表示最后一个 5. 格式化输出 print(string.format("pi = %.4f",math.pi)); print(string.format("%d",12.345)); 二、模式匹配 1. 查找 s = "Hello World Hello"; i, j = string.find(s,"Hello"); print(i,j, string.sub(s,i,j)); i, j = string.find(s,"Hello",2); -- 第三个參数表示从哪里開始搜索 print(i,j, string.sub(s,i,j)); 2. string.match 可用于模糊匹配 date = "Today is 17/7/1990"; d = string.match(date,"%d+/%d+/%d+"); -- 返回查到结果 print(d); 3. 替换 s = "Lua is cute very cute"; print(string.gsub(s,"cute","great")); --返回替换后的字符串和替换的次数 print(string.gsub(s,"cute","great",1)); -- 第四个參数限制替换的次数 4. select() 在多个返回值中,获取指定的值 s = "Hi I am Lua ha ha"; count = select(2, string.gsub(s," "," ")); -- 用select获取第二个值 print(count); -- 获取空格的数目 5. string.gmatch函数, 会返回一个函数,通过遍历这个函数,能够获取全部匹配到的元素 words = {}; for w in string.gmatch(s, "%a+") do -- "%a+" 匹配一个或多个字母字符序列 print(w); words[#words+1]=w; end; 6. Lua的字符串匹配模式符 . 表示所有字符 %a 字母 %c 控制字符 %d 数字 %l 小写字母 %u 大写字母 %p 标点符号 %s 空白字符 %w 字母和数字 %x 十六进制数字 %z 内部表示为0 字符 模式的修饰符, + 表示尽可能多的扩展 - 表示尽可能少的扩展 大写形式表示它们的补集。如 %A 表示匹配全部非字符字符 7. .+ 和 .- 的差别 -- 查找C程序的凝视 test = "int x; /* x */ int y; /* y */"; print(string.gsub(test, "/%*.+%*/","<comment>")); -- .+会尽可能地扩展,直到最后一个 print(string.gsub(test, "/%*.-%*/","<comment>")); -- .-会匹配近期的一个 演示样例: s = "H1e2l34lo 6LU7A"; print(string.gsub(s,"%A"," ")); -- 把全部非字母的都替换为空格 s = "-2334 44"; print(string.gsub(s,"[+-]? %d+","")); --"[+-]?%d+" [+-]? 表示可选的,即能够是 -12 或是 12 $yes")); %d+", " ")); print(string.gsub(s, "%p+$", " ")); -- 匹配是否以标点符号结尾,假设是的话,将标点符号去掉 |
请发表评论