zoukankan      html  css  js  c++  java
  • Lua 字符串相关操作

    #!/usr/bin/lua
    
    -- 字符串格式化
    --[[
    string.format()
    原型:string.format (formatstring, ···)
    解释:返回第一个参数描述之后的参数的格式化版本,第一个参数必须为字符串,是对结果字符串的一种描述,
    这个格式化的字符串和C语言的printf()一族的函数遵循相同的规则,仅有的不同体现在参数选项的修改,
    其中参数描述符*,l,L,p和h不再支持,但是多了一个额外的选项q,这个q选项会以一种适合lua解释器安全读取的方式来格式化字符串:
    被写在双引号之间的字符串包括双引号、换行、空字符(''或NULL)、反斜杠在被格式化时都能被正确的分离出来。
    
    格式控制符以%开头,常用的有以下几种
    %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位.
    ]] print(string.format("---[%c]--",65)) -- 接受一个十进制数字,将其转化成ASCII码表中对应的字符(65 == A) print(string.format("---[%d]--",15)) -- 打印数字15 print(string.format("---[%o]--",9)) -- 打印数字011 print(string.format("---[%u]--",12)) -- 打印数字12 print(string.format("---[%08x]--",47)) -- 打印0000002f
    #!/usr/bin/lua
    
    -- 字符串替换
    --[[
    string.gsub()
    原型:string.gsub (s, pattern, repl [,m])
    参数说明:
    s            源字符串
    pattern      模式串
    repl         替换串
    
    返回值:返回一个和pattern匹配,并且用rep1替换的副本。第二个返回值n是代表匹配的个数。
    
    pattern说明
    .   任意字符 
    %a   字母 
    %c   控制字符 
    %d   数字 
    %l   小写字母 
    %p   标点字符 
    %s   空白符 
    %u   大写字母 
    %w   字母和数字 
    %x   十六进制数字 
    %z   代表 0的字符 
    特殊字符如下:
    (). % + - * ? [] ^ $ 
    
    () 分组
    %   也作为以上特殊字符的转义字符
    +   匹配前一字符 1 次或多次,最长匹配
    *   匹配前一字符 0 次或多次,最长匹配
    -   匹配前一字符 0 次或多次,最短匹配
    ?   匹配前一字符 0 次或 1次 
    
    repl说明
    这个函数会返回一个替换后的副本,原串中所有的符合参数pattern的子串都将被参数repl所指定的字符串所替换,如果指定了参数m,那么只替换查找过程的前m个匹配的子串,
    参数repl可以是一个字符串、表、或者是函数,并且函数可以将匹配的次数作为函数的第二个参数返回,接下来看看参数repl的含义:
    
    如果参数repl是一个常规字符串,成功匹配的子串会被repl直接替换,如果参数repl中包含转移字符%,
    那么可以采用%n的形式替换,当%n中的n取值1-9时,表示一次匹配中的第n个子串,当其中的n为0时,表示这次匹配的整个子串,%%表示一个单独的%。
    
    如果参数repl是一个表,那么每次匹配中的第一个子串将会作为整个表的键,取table[匹配子串]来替换所匹配出来的子串,
    当匹配不成功时,函数会使用整个字符串来作为table的键值。
    
    如果参数repl是一个函数,那么每一次匹配的子串都将作为整个函数的参数,取function(匹配子串)来替换所匹配出来的子串,
    当匹配不成功时,函数会使用整个字符串来作为函数的参数。如果函数的返回值是一个数字或者是字符串,那么会直接拿来替换,
    如果它返回false或者nil,替换动作将不会发生,如果返回其他的值将会报错。
    
    ]]
    
    
    local p = "int x; /* x */  int y; /* y */"
    
    -- 匹配注释
    print(string.gsub(p,"/%*.-%*/","##"))
    
    -- 测试函数模式
    local str="abcdefg"
    string.gsub(str,"%l",function(ch)
        print(ch)
    end)
    
    --print(string.byte(str))
    #!/usr/bin/lua
    
    -- string.find(s, pattern [, init [, plain]] )
    -- s: 源字符串
    -- pattern: 待搜索模式串
    -- init: 可选, 起始位置
    
    --[[
    pattern说明
    .   任意字符 
    %a   字母 
    %c   控制字符 
    %d   数字 
    %l   小写字母 
    %p   标点字符 
    %s   空白符 
    %u   大写字母 
    %w   字母和数字 
    %x   十六进制数字 
    %z   代表 0的字符 
    特殊字符如下:
    (). % + - * ? [] ^ $ 
    
    () 分组
    %   也作为以上特殊字符的转义字符
    +   匹配前一字符 1 次或多次,最长匹配
    *   匹配前一字符 0 次或多次,最长匹配
    -   匹配前一字符 0 次或多次,最短匹配
    ?   匹配前一字符 0 次或 1次 
    ]]
    
    
    local start1,last1 = string.find("hello this world .","wor")
    -- 返回起始位置和截止位置
    
    
    print("start1=",start1)
    print("last1=",last1)
    
    
    
    -- 注意: lua 里面数组或者字符串的字符, 其下标索引是从 1 开始, 不是 0
    
    
    local start2,last2 = string.find("hello this 21 world .","[0-9]+")
    
    print("start2=",start2)
    
    print("last2=",last2)
  • 相关阅读:
    第十章 Ingress
    第九章 Service
    第八章 资源控制器
    第一章 Xshell5评估期已过问题
    第七章 yaml格式
    第六章 资源清单
    第五章 配置私有仓库Harbor
    第四章 K8s部署安装
    36 SpringBoot 在系统配置文件中动态加载配置
    Java 集合、数组 任意个数数字相加等于一个指定的数
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/12978129.html
Copyright © 2011-2022 走看看