zoukankan      html  css  js  c++  java
  • 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=--=-*-/4mdqwlds123fef, "%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
    Two")         -- 输出"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: 与任何控制符配对(例如
    )
    %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
     
     
     
  • 相关阅读:
    HUD 1284 钱币兑换问题
    HUD 1284 钱币兑换问题
    HDU 1283 最简单的计算机
    HDU 1283 最简单的计算机
    商品搜索引擎---推荐系统设计
    Spark机器学习:TF-IDF实例讲解
    【读书笔记】Elasticsearch集成Hadoop最佳实践
    Java面试题集合
    Spring Boot企业微信点餐系统-第一章-课程介绍
    Eclipse下svn的创建分支/合并/切换使用
  • 原文地址:https://www.cnblogs.com/chenpython123/p/10906721.html
Copyright © 2011-2022 走看看