字符串
字符串或串(string)是由数字、字母、下划线组成的一串字符
有三种方式表达:
单引号的一串字符 string1 = 'Lua'
双引号间一串字符 string1 = "Lua"
[[和]]间一串字符 string = [["Lua"]]
转义字符
转义字符 含义 ASCII码值(10进制)
\a 响铃(BEL) 007
\b 退格(BS),将当前位置移到前一列 008
\f 换页(FF),将当前位置移到下页开头 012
\n 换行(LF),将当前位置移到下一行开头 010
\r 回车(CR),将当前位置移到本行开头 013
\t 水平指标(HT),(调用下一个TAB位置) 009
\v 垂直指标(VT) 011
\\ 反斜杠字符"\" 092
\' 单引号 039
\" 双引号 034
\0 空字符(NULL) 000
\ddd 1到3位八进制数所代表的任意字符 三为八进制
\xhh 1到2位十六进制所代表的任意字符 二为十六进制
字符串操作
--API
string.upper(argument): 字符串全部转为大写字母
string.lower(argument): 字符串全部转为小写字母
string.gsub(main String,find String,replace String,num)
在字符串中替换,mainString为要替换的字符串,find String 为被替换的字符,replace String 要替换的字符,num替换次数(可以忽略,则全部替换)
string.find(str,substr,[init,[end]]) 在指定的目标字符串中搜索指定的内容(第三参数为索引),返回其具体位置,不存在则返回nil
string.reverse(arg) 字符串倒序
string.format(...) 类似print格式化字符串
string.char(arg)和string.byte(arg[,int]) char 将整型数字转成字符并连接,byte转换字符为整数值(可以指定某一个字符,默认第一个)
string.len("String") 计算字符串长度
string.rep("String",n) 返回字符串string的n的拷贝
.. 连接连个字符串
string.gmatch(str,pattern) 回一个迭代函数,每一调用这个函数,返回一个字符串str找到的下一个符合pattern 描述的子串.如果参数pattern没有找到,返回nuil
string.match(str,pattern,init) 只寻找源子串str中的第一个配对,参数init可选,指定搜寻起点,默认为1
成功配对到,返回所有配对结果;如果没有设置捕获标记,则返回真个配对字符串,没有成功返回nil.
字符串格式化
%c 接受一个数字,转化为ASCII码
%d,%i 接受一个数字并将其转化为有符号的整数格式
%o 接受一个数字并将其转换为八进制的格式
%u 接受一个数字并将其转化为无符整数格式
%x 接受一个数字并将其转化为十六进制的格式,使用小写字母
%X 接受一个数字并将其转化为十六进制的格式,使用大写字母
%e 接受一个数字并将其转化为科学记数法格式,使用小写e
%E 接受一个数字并将其转化为科学记数法格式,使用大写E
%f 接受一个数字并将其转化为浮点数格式
%g(%G) 接受一个数字并将其转化为%e(%E,对应的%G)及%f中较短的一种格式
%q 接受一个数字符串并将其转化为可安全被lua编译读入的格式
%s 接受一个字符串并按照给定的参数格式化该字符串
--细化格式,参数如下顺序读入
1):符号:一个+号表示其后的数字转义符将证书显示正好,默认情况下有负数显示符号
2)占位符:一个0在后面指定了子串宽度啊是占位用,不填是默认站位符是空格
3)宽度数值
4)小数位/字符串才裁剪:在宽度数值后增减的小数部分n,若后接着f(浮点数转义符,如%6.3f)则设定该浮点数的小数只保留n位,若后接s(字符转义,如%5.3s)则设定该字符串只显示前n位
匹配模式
lua中匹配模式直接用常规的字符串来描述.用于模式匹配函数 string.find, string.gmatch, string.gsub, string.match。
单个字符(除 ^$()%.[]*+-? 外): 与该字符自身配对
.(点): 与任何字符配对
%a: 与任何字母配对
%c: 与任何控制符配对(例如\n)
%d: 与任何数字配对
%l: 与任何小写字母配对
%p: 与任何标点(punctuation)配对
%s: 与空白字符配对
%u: 与任何大写字母配对
%w: 与任何字母/数字配对
%x: 与任何十六进制数配对
%z: 与任何代表0的字符配对
%x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.[]*+-?)的配对问题, 例如%%与%配对
[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
[^数个字符类]: 与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对
当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对
'%%' 匹配字符 '%'
模式条目可以是:
单个字符类匹配该类别中任意单个字符;
单个字符类跟一个 '*', 将匹配零或多个该类的字符。 这个条目总是匹配尽可能长的串;
单个字符类跟一个 '+', 将匹配一或更多个该类的字符。 这个条目总是匹配尽可能长的串;
单个字符类跟一个 '-', 将匹配零或更多个该类的字符。 和 '*' 不同, 这个条目总是匹配尽可能短的串;
单个字符类跟一个 '?', 将匹配零或一个该类的字符。 只要有可能,它会匹配一个;
%n, 这里的 n 可以从 1 到 9; 这个条目匹配一个等于 n 号捕获物(后面有描述)的子串。
%bxy, 这里的 x 和 y 是两个明确的字符; 这个条目匹配以 x 开始 y 结束, 且其中 x 和 y 保持 平衡 的字符串。 意思是,如果从左到右读这个字符串,对每次读到一个 x 就 +1 ,读到一个 y 就 -1, 最终结束处的那个 y 是第一个记数到 0 的 y。 举个例子,条目 %b() 可以匹配到括号平衡的表达式。
%f[set], 指 边境模式; 这个条目会匹配到一个位于 set 内某个字符之前的一个空串, 且这个位置的前一个字符不属于 set 。 集合 set 的含义如前面所述。 匹配出的那个空串之开始和结束点的计算就看成该处有个字符 '\0' 一样。
模式:
模式 指一个模式条目的序列。 在模式最前面加上符号 '^' 将锚定从字符串的开始处做匹配。 在模式最后面加上符号 '$' 将使匹配过程锚定到字符串的结尾。 如果 '^' 和 '$' 出现在其它位置,它们均没有特殊含义,只表示自身。
捕获:
模式可以在内部用小括号括起一个子模式; 这些子模式被称为 捕获物。 当匹配成功时,由 捕获物 匹配到的字符串中的子串被保存起来用于未来的用途。 捕获物以它们左括号的次序来编号。
作为一个特例,空的捕获 () 将捕获到当前字符串的位置(它是一个数字)。