lua学习
lua
函数可变参数
Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 … 表示函数有可变的参数。
1 | function add(...) |
字符串操作
链接两个字符串 str1..str2
1 | print("www.runoob.".."com") |
字符串替换 string.gsub
string.gsub(mainString,findString,replaceString,num)
在字符串中替换。mainString 为要操作的字符串, findString 为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换),如:
1 | string.gsub("aaaa","a","z",3); |
截取字符串 string.sub
string.sub() 用于截取字符串,原型为:string.sub(s, i [, j]) 截取字符串s的从第i个字符到第j个字符之间的串,j默认为-1,最后一个
字符串查找 string.find
string.find (str, substr, [init, [end]]) 若存在,则返回2个值:匹配串开始索引和结束索引。若不存在,返回nil。
1 | local a, b = string.find("Hello Lua user", "Lua", 1) |
字符串匹对 string.match
string.match(str, pattern, init)
string.match()只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1。
在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil。
pattern没有指定captures,那么将返回整个匹配内容。capture是指pattern中用小括号括起来的内容。比如print(string.match(“hello world”, “h(ell)o wor”)),这将打印ell,如果没有这个小括号呢,比如print(string.match(“hello world”, “hello”)),这将打印hello.这就是与“hello”整个相匹配的内容都返回了。
pattern 要了解lua的正则表达式
1 | local str = "ACK(22,33,55)" |
string.gmatch(str, pattern)
返回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。
1 | local str = "Hello Lua user" |
字符串反转 string.reverse(arg)
字符串长度 string.len(arg)
格式化字符串 string.format
生成具有特定格式的字符串,第一个参数为格式化串:由指示符和控制格式的字符组成。参数如同C语言的print语法
1 | local y = '2019'; local m = '12'; local d = '15'; |
字符串大小写转换 string.upper string.lower
字符串拷贝 string.rep(string, n)
1 | string.rep("abcd",2) => abcdabcd 注意:不改变字符串本身 |
Lua 数组
定义 array = {item1, item2}
数组的遍历
1 | for key,value in ipairs(array) |
Lua 表
定义 mytable = {}
table 方法
插入 table.insert (table, [pos,] value)
在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾
移除 table.remove (table [, pos])
返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。
排序 table.sort (table [, comp])
对给定的table进行升序排序。
长度 #table
也可以自定义方法
1 | function table_leng(t) |
Table 连接成字符串 table.concat (table [, sep [, start [, end]]])
concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。
1 | local arr = {"as", "bs", "cs", "ds"} |
Lua 迭代器
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。 Lua 默认提供的迭代函数 ipairs
在 Lua 中迭代器是一种支持指针类型的结构,它可以遍历集合的每一个元素。
泛型 for 迭代器
泛型 for 在自己内部保存迭代函数,实际上它保存三个值:迭代函数、状态常量、控制变量。
泛型 for 迭代器提供了集合的 key/value 对,语法格式如下:
1 | array = {"Google", "Runoob"} |
无状态的迭代器
无状态的迭代器是指不保留任何状态的迭代器,因此在循环中我们可以利用无状态迭代器避免创建闭包花费额外的代价。
每一次迭代,迭代函数都是用两个变量(状态常量和控制变量)的值作为参数被调用,一个无状态的迭代器只利用这两个值可以获取下一个元素。
这种无状态迭代器的典型的简单的例子是 ipairs,它遍历数组的每一个元素。
Lua的模块和包 module
创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行。
1 | -- 文件名为 module.lua |
加载模块
Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单地调用就可以了。
1 | require("<模块名>") 如require("module") 要求路径时如 require("/module/module") |
Lua的正则表达式
网页跳转到: Lua的正则表达式 查看详细




