一、字符串
- 字符串的表示形式: 单引号"'",双引号""",两对中括号"[[]]"。
- 转义字符:
- \ddd: 1到3位八进制数所代表的的任意字符。
- \xhh: 1到2位十六进制数所代表的的任意字符。
- 字符串操作:
- string.upper('Hello')
- 功能:字符串全部转换为大写字母。
- 结果:'HELLO'
- string.lower('Hello')
- 功能:字符串全部转换为小写字母。
- 结果:'hello'
- string.gsub(mainString, findString, replaceString, num)
- 功能:在mainString中,将findString替换为replaceString,num为替换的次数。
- 示例:string.gsub('abababab', 'ab', 'cd', 3)
- 结果:'cdcdcdab'
- string.find(str, substr, [init, [end]])
- 功能:在str中查找substr,返回substr在str中的起始索引;如果没有找到,则返回nil;init, end为可选参数,表示在str的指定索引区间查找substr。
- 示例:a, b = string.find('abcd', 'bc')
- 结果:a = 2, b = 3
- string.reverse('hello')
- 功能:字符串反转。
- 结果:"olleh"。
- string.format("value is %d", 4)
- 功能:返回类似于c语言中printf格式化后的字符串。关于格式字符,在后文中说明。
- 结果:'value is 4'
- string.char(97, 98, 99, 100)
- 功能:将整形数字转换为字符,并连接为字符串。
- 结果:"abcd"。
- string.byte('abcd', [3])
- 功能:将字符串指定索引的字符,转换为整数值。索引参数可选,默认为1.
- 结果:99.
- string.len('abcd')
- 功能:返回字符串的长度。
- 结果:4.
- string.rep('hello', 3)
- 功能:返回指定字符串的n次拷贝
- 结果:hellohellohello
- string.gmatch(str, pattern)
- 功能:返回一个迭代器函数,每次调用这个迭代器函数,返回一个在str中找到的下一个符合pattern描述的子串。如果没有找到返回nil。关于匹配模式在下文中说明。
- 示例:for word in string.gmatch('hello lua and python', '%a+') do print(word) end
- 结果:依次输出hello, lua, and, python
- string.match(str, pattern, [init])
- 功能:在str中搜索并返回第一个符合pattern的子串。init表示str的起始位置,可选。
- 示例:string.match('hello 33 lua', '%d+ %a+')
- 输出:33 lua
- 字符串格式化:
- string.format()用来生成具有特定格式的字符串。类似c语言中的printf()函数。
- 格式化字符:
- %c:
- 作用:接收一个数字,将其转换为字符。
- 示例:string.format("%c", 97)
- 结果:a
- %d、%i:
- 作用:接收一个数字,将其转换为有符号整数。
- 示例:string.format("%d", -1)
- 结果:-1
- %u: 将数字转换为无符号整数。
- %o: 将数字转换为八进制数格式。
- %x、%X: 将数字转换为十六进制数格式。
- %e、%E:将数字转换为科学计数法格式。
- %f:将数字转换为浮点数。
- %g:将数字转换为%e和%f中较短的一种格式。
- %q:
- 作用:接收一个字符串,并将其转化为可安全被lua编译器读入的格式。
- 示例:string.format('%q', 'one\ntwo')
- 结果:
- one
- two
- %s:接收一个字符串,并按照给定的格式,转换该字符串。
- 格式化字符中%后的修饰参数,读入顺序如下:
- + :
- 作用:正数时显示+号;负数时显示-号。
- 示例:string.format("%+d", 4)
- 结果:+4
- 0(数字0):
- 作用:占位符,配合宽度数值使用。默认占位符是空格。
- 示例:string.format("%+03d", 4)
- 结果:+04。注意:+也占了一位。
- 宽度数值:
- 作用:最少占用的位数。不足指定宽度数值时,用占位符补充。
- 示例1:string.format("%03d", 4)
- 结果1:004
- 示例2:string.format("%03d", 12345678)
- 结果2:12345678
- 小数位数或字串裁切:
- 作用:显示指定个数的小数或显示指定位数的字符串。
- 示例1:string.format("%.3f", 6.1)
- 结果1:6.100
- 示例2:string.format('%.3s', 'abcd')
- 结果2:abc
- 匹配模式:
- 匹配模式用字符串来描述。
- 匹配模式可以用于模式匹配函数:string.find、string.match、string.gmatch、string.gsub
- 字符类(也称元字符),表示匹配某一类字符:
- .(点):匹配任何字符。
- %a: 匹配任何字母。
- %w: 匹配任何字母或数字。
- %l: 匹配任何小写字母。
- %u: 匹配任何大写字母。
- %d: 匹配任何数字。
- %x: 匹配任何十六进制数。
- %z: 匹配任何代表0的字符。
- %p: 匹配任何标点。
- %s: 匹配任何空白符。
- %c: 匹配任何控制字符。
- [字符类的集合]:
- 示例:[%l%u%d]
- 作用:匹配小写字母、大写字母或数字。
- [^字符类的集合]:
- 示例:[^%l%u%d]
- 作用:匹配非小写字母、非大写字母和非数字。
- 以上字符类大写时,表示不匹配该类字符。
- 示例:%A
- 作用:匹配任何非字母的字符。
- 模式条目:
- 单个字符类只能匹配该类中的一个字符。
- 示例:%a。匹配一个字母。
- * : 匹配0个或多个,匹配尽可能长的串。
- + : 匹配1个或多个,匹配尽可能长的串。
- - : 匹配0个或多个,匹配尽可能短的串。
- ? : 匹配0个或1个。
- %n:
- n的取值:1至9.
- 作用:匹配等于n号捕获物的子串。
- 示例:见下文。
- %bxy:
- x、y为明确的字符。
- 作用:匹配x和y平衡的子串
- 示例:string.match(',,,(123)abc', "%b()")。
- 结果:(123)
- %f[set]
- 作用:
- set可以是字符类中的任何组合。
- 匹配set指定子串前面的子串。
- 示例:???
- 模式:
- ^ : 匹配字符串的开头。
- $ : 匹配字符串的结尾。
- 捕获:
- 作用:
- 匹配模式字符串中用小括号括起来的子模式,称为捕获。
- 与子模式相匹配的字符串会被保存在捕获物中。
- 示例:string.gsub(" abc ", "^%s*(.-)%s*$", "%1")
- 结果:abc