ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
定义: ``` string2='runoob.com' //runoob.com string1="Lua" //Lua string3=[["Lua 教程"]] //"Lua 教程" ``` ### 字符串处理 ``` //字符串的长度 string.len('abc') //字符串大小写转换 string1="Lua"; string.upper(string1) string.lower(string1) //字符转整数 string.byte(arg [,int]) 第二个是选择转的字符,省略则默认为第一个 a=string.byte("ABCD",1) print(a) //65 b=string.byte("ABCD",4) print(b) //68 c=string.byte("D") print(c) //68 //将整型数字转成字符并连接 :string.char(arg) a=string.char(65,97,98,99,100) print(a) //Aabcd local start = "1" local t = type(start) if t == "string" then start= tonumber(start) //判断是string类型的话,转为number end print(start) //1 local start = "32" start= tonumber(start) print(start) //32 local start = "b" start= tonumber(start) print(start) //nil local start = "1b" start= tonumber(start) print(start) //nil //字符串查找 :string.find默认情况下返回两个值 string.find(源字符串, 待搜索模式串 [,起始位置 [, plain]] ) string="Lua Tutorial" print(string.find(string,"Tutorial")) //3 12 a,b=string.find(string,"Tutorial") print(a) //3 print(b) //12 //字符串替换 **string.gsub(源字符串,查找的字符,替换的字符,替换次数省略则全部替换)** string.gsub("aaaa","a","b",3); //bbba //字符串反转 string="abc 123" reversedString=string.reverse(string) print("新字符串为",reversedString) //新字符串为 321 cba 拷贝n个string字符串:string.rep(string, n) str=string.rep("ac",2) print(str) //acac str=string.rep("ac",3) print(str) //acacac //格式化字符串 a=string.format("the value is:%d",4) print(a) * %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) 宽度数值 * (5) 小数位数/字串裁切: 在宽度数值后增加的小数部分n, 若后接f(浮点数转义符, 如%6.3f)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%5.3s)则设定该字符串只显示前n位. 字符串匹配 string.gmatch(str, pattern) 返回一个迭代器函数,每一次调用这个函数,返回一个在字符串 str 找到的下一个符合 pattern 描述的子串。如果参数 pattern 描述的字符串没有找到,迭代函数返回nil 一般是用于遍历匹配 for key,value in string.gmatch("Hello Lua user", "%a+") do print(value) // end 输出: Hello Lua user ``` ## **匹配模式** Lua 中的匹配模式直接用常规的字符串来描述。 它用于模式匹配函数string.find, string.gmatch, string.gsub, string.match string.match(str, pattern, init):只寻找源字串str中的第一个配对. 参数init可选, 指定搜寻过程的起点, 默认为1 在成功配对时, 函数将返回配对表达式中的所有捕获结果; 如果没有设置捕获标记, 则返回整个配对字符串. 当没有成功的配对时, 返回nil 下面的表列出了Lua支持的所有字符类: 单个字符(除 ^$()%.\[\]\*+-? 外): 与该字符自身配对 * .(点): 与任何字符配对 * %a: 与任何字母配对 * %c: 与任何控制符配对(例如\\n) * %d: 与任何数字配对 * %l: 与任何小写字母配对 * %p: 与任何标点(punctuation)配对 * %s: 与空白字符配对 * %u: 与任何大写字母配对 * %w: 与任何字母/数字配对 * %x: 与任何十六进制数配对 * %z: 与任何代表0的字符配对 * %x(此处x是非字母非数字字符): 与字符x配对. 主要用来处理表达式中有功能的字符(^$()%.\[\]\*+-?)的配对问题, 例如%%与%配对 * \[数个字符类\]: 与任何\[\]中包含的字符类配对. 例如\[%w\_\]与任何字母/数字, 或下划线符号(\_)配对 * \[^数个字符类\]: 与任何不包含在\[\]中的字符类配对. 例如\[^%s\]与任何非空白字符配对 当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对.例如,'%A'非字母的字符: ~~~ > print(string.gsub("hello, up-down!", "%A", ".")) hello..up.down.    4 ~~~ 数字4不是字符串结果的一部分,他是gsub返回的第二个结果,代表发生替换的次数。 在模式匹配中有一些特殊字符,他们有特殊的意义,Lua中的特殊字符如下: ~~~ ( ) . % + - * ? [ ^ $ ~~~ '%' 用作特殊字符的转义字符,因此 '%.' 匹配点;'%%' 匹配字符 '%'。转义字符 '%'不仅可以用来转义特殊字符,还可以用于所有的非字母的字符。 **模式条目可以是:** * 单个字符类匹配该类别中任意单个字符; * 单个字符类跟一个 '`*`', 将匹配零或多个该类的字符。 这个条目总是匹配尽可能长的串; * 单个字符类跟一个 '`+`', 将匹配一或更多个该类的字符。 这个条目总是匹配尽可能长的串; * 单个字符类跟一个 '`-`', 将匹配零或更多个该类的字符。 和 '`*`' 不同, 这个条目总是匹配尽可能短的串; * 单个字符类跟一个 '`?`', 将匹配零或一个该类的字符。 只要有可能,它会匹配一个; * `%*n*`, 这里的*n*可以从 1 到 9; 这个条目匹配一个等于*n*号捕获物(后面有描述)的子串。 * `%b*xy*`, 这里的*x*和*y*是两个明确的字符; 这个条目匹配以*x*开始*y*结束, 且其中*x*和*y*保持*平衡*的字符串。 意思是,如果从左到右读这个字符串,对每次读到一个*x*就*+1*,读到一个*y*就*\-1*, 最终结束处的那个*y*是第一个记数到 0 的*y*。 举个例子,条目`%b()`可以匹配到括号平衡的表达式。 * `%f[*set*]`, 指*边境模式*; 这个条目会匹配到一个位于*set*内某个字符之前的一个空串, 且这个位置的前一个字符不属于*set*。 集合*set*的含义如前面所述。 匹配出的那个空串之开始和结束点的计算就看成该处有个字符 '`\0`' 一样。 **模式:** *模式*指一个模式条目的序列。 在模式最前面加上符号 '`^`' 将锚定从字符串的开始处做匹配。 在模式最后面加上符号 '`$`' 将使匹配过程锚定到字符串的结尾。 如果 '`^`' 和 '`$`' 出现在其它位置,它们均没有特殊含义,只表示自身。 **捕获:** 模式可以在内部用小括号括起一个子模式; 这些子模式被称为*捕获物*。 当匹配成功时,由*捕获物*匹配到的字符串中的子串被保存起来用于未来的用途。 捕获物以它们左括号的次序来编号。 例如,对于模式`"(a*(.)%w(%s*))"`, 字符串中匹配到`"a*(.)%w(%s*)"`的部分保存在第一个捕获物中 (因此是编号 1 ); 由 "`.`" 匹配到的字符是 2 号捕获物, 匹配到 "`%s*`" 的那部分是 3 号。 作为一个特例,空的捕获`()`将捕获到当前字符串的位置(它是一个数字)。 例如,如果将模式`"()aa()"`作用到字符串`"flaaap"`上,将产生两个捕获物: 3 和 5 。