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