lua string 下的函数

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 , 返回一个迭代器函数, 每次调用该迭代器函数,返回下一个子串。

 

 

字符串拼接【字符串格式化】

%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(浮点数转义符, 如%.nf)则设定该浮点数的小数只保留n位, 若后接s(字符串转义符, 如%.ns)则设定该字符串只显示前n位.

  例如

string.format("%c", 83)                    -- 输出S
string.format("%+d", 17.0)               -- 输出+17
string.format("%05d", 17)                -- 输出00017
string.format("%o", 17)                    -- 输出21
string.format("%u", 3.14)                 -- 输出3
string.format("%x", 13)                    -- 输出d
string.format("%X", 13)                    -- 输出D
string.format("%e", 1000)                -- 输出1.000000e+03
string.format("%E", 1000)                -- 输出1.000000E+03
string.format("%6.3f", 13)                  -- 输出13.000
string.format("%q", "One\nTwo")         -- 输出"One\
                                                              --   Two"
string.format("%s", "monkey")              -- 输出monkey
string.format("%10s", "monkey")          -- 输出    monkey
string.format("%5.3s", "monkey")         -- 输出  mon

 

匹配用到的基本模式串  模式匹配函数 string.find, string.gmatch, string.gsub, string.match

.(点): 与任何字符配对
%a: 与任何字母配对
%c: 与任何控制符配对(例如\n)
%d: 与任何数字配对
%l: 与任何小写字母配对
%p: 与任何标点(punctuation)配对
%s: 与空白字符配对
%u: 与任何大写字母配对
%w: 与任何字母/数字配对
%x: 与任何十六进制数配对
%z: 与任何代表0的字符配对
[数个字符类]: 与任何[]中包含的字符类配对. 例如[%w_]与任何字母/数字, 或下划线符号(_)配对
[^数个字符类]: 与任何不包含在[]中的字符类配对. 例如[^%s]与任何非空白字符配对
当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对.例如,'%A'非字母的字符:

 

转义字符%
  %转义字符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
 
 
 
posted @ 2019-05-22 16:29  马克图  阅读(3279)  评论(0编辑  收藏  举报