一、字符串

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