lua的字符串操作
lua的字符串绝大部分的操作 都可以用 string 库函数接口操作,只是因为lua的特性,在匹配操作上会有些不一样,这个文末会说一点。
另外 lua 的字符串是 从 下标 1 开始的,不是 0 开始。
函数操作:
1. 计算字符串长度
例如:string.len("abcd"); ----> 4
2. 返回字符串 s 的 n 个拷贝
例如:string.rep("abcd",2) ----> abcdabcd
3. 返回字符串的全部大写
例如:string.upper("AbcD") ----> ABCD
4. 返回字符串的全部小写
例如:string.lower("AbcD") ----> abcd
5. 字符串的拼接【字符串的格式化操作】
例如:string.format("the value is:%d",4) ----> the value is:4
6. 根据下标截取字符串 这个下标是取的 闭区间长度 ,string.sub(info, index, endindex)
例如:string.sub("abcd",2) ----> bcd
string.sub("abcd",-2) ----> cd
string.sub("abcd",2,-2) ----> bc
string.sub("abcd",2,3) ----> bc
7. 在字符串中查找string.find()
原型:string.find (s, pattern [, init [, plain]])
解释:函数在字符串s里查找第一个和参数pattern匹配的子串,如果找到了一个匹配的子串,就会返回这个子串的起始索引和结束索引,否则就会返回nil。
另外,参数init作为一个数字,指定了搜索的起始位置,这个数字默认为1可以一个负数,表示从后往前数的字符个数。
参数plain作为第四个可选参数默认为flase,传入参数true表示关闭模式匹配,所以函数只做简单的查找子串的操作,
如果子串pattern没有字符为空字符串""将会被认为是魔法字符。
如果模式匹配子串被找到了,一个成功被找到的子串将会作为第三个返回值,放在两个索引返回值的后边而返回。
如果 pattern 匹配模式是 带有 (...) 就是有括号这种,是捕获组形式,那find函数会返回匹配到的 字符串 。
比如: a,b,str = string.find('qwe123', '(%a+)') ----> 1 3 qwe
如果是完全的字符串查找,没有正则匹配,例如: string.sub("abcd",2) ----> bcd
string.sub("abcd",-2) ----> cd
string.sub("abcd",2,-2) ----> bc
string.sub("abcd",2,3) ----> bc
8. 在字符串中查找并替换string.gsub(mainString,pattern,replaceString,num)
在字符串中替换。mainString 为要操作的字符串, pattern为被替换的字符,replaceString 要替换的字符,num 替换次数(可以忽略,则全部替换)
例如:string.gsub("abcdabcd","a","z"); ----> zbcdzbcd 2
string.gsub("aaaa","a","z",3); ----> zzza 3
9. 返回字符串的ASCII码string.byte()
例如:string.byte("ABCD",4) ----> 68
10. 将ASCII码变成 字符串string.char()
例如:string.char(97,98,99,100) ----> abcd
11. 分割字符串string.split(要分割的字符串, 分隔符)
例如:local result = string.split("1,2,3", ",") ----> result = {"1", "2", "3"}
12. 字符串反转 string.reverse(s)
例如:string.reverse("jayden") ----> nedyaj
13. 字符串匹配string.match (s, pattern)
它不同于函数string.find()要返回匹配字符的索引,也不同于string.gmatch()函数会返回一个迭代函数可以取到所有的匹配项,
这个函数它仅仅范回第一个匹配,简单易用,往往在一些实际应用中找到第一个匹配就够了,我们一起来看一下用法。
原型:string.match(s, pattern [, init])
解释:在字符串s中查找满足参数pattern的匹配子串,如果找到了一个匹配就返回这个匹配子串,若没找到则返回nil,如果参数pattern没有指定匹配参数,则返回整个匹配字符串,另外,一个数字形参数init用来指定查找字符串的其实位置,这个参数默认为1,当然也可以设置为负数,即-n表示从字符串尾部向前数n个字符开始查找。
pattern 可以 是 正则匹配 字符串,那 这个函数返回的就是 能匹配到的 字符串。
match_ret = string.match(ehre99wj=--=-*-/4mdqwl\0ds123fef, "%d%d%d") ---> 123
14. 字符串匹配迭代返回 string.gmatch (s, pattern)
匹配字符串s中的pattern , 返回一个迭代器函数, 每次调用该迭代器函数,返回下一个子串。
字符串拼接【字符串格式化】
例如
匹配用到的基本模式串 模式匹配函数 string.find, string.gmatch, string.gsub, string.match
转义字符%
%转义字符string.find("abc%..","%%")4 4
string.find("abc..d","%.%.")4 5
用"()"进行捕获
()捕获字符串string.find("12ab","(%a%a)")3 4 ab
string.find("ab12","(%d%d)")3 4 12
模式修饰符
+表示1个或多个,匹配最多个string.find("aaabbb","(a+b)") 1 4 aaab
string.find("cccbbb","(a+b)") nil
-表示0个或多个,匹配最少个string.find("zzxyyy","(xy-)") 3 3 x
string.find("zzzyyy","(x-y)") 4 4 y
*表示0个或多个,匹配最多个string.find("mmmnnn","(m*n)")1 4 mmmb
string.find("lllnnn","(m*n)") 4 4 n
?表示0个或1个 string.find("aaabbb","(a?b)") 3 4 ab
string.find("cccbbb","(a?b)") 4 4 b