Lua的字符串进阶

1 字符与Ascii转换

--字符与ASC转换
-- 0 : 48 -> 9 : 57
-- a : 97 -> z : 122
-- A : 65 -> Z : 90
local str1 = "1"
print(string.byte(str1))    --49
local str2 = "0123s"         --默认返回第一个字符的ascii码
print(string.byte(str2))    --48
--调用测试
print(string.byte(str2,1,5))    --返回下标 1-5的ascii码

 

2 Ascii与字符转换

-- 0 : 48 -> 9 : 57
-- a : 97 -> z : 122
-- A : 65 -> Z : 90
--char函数, 根据ascii码返回对应字符
--输出ssm
print(string.char(115))
print(string.char(115))
print(string.char(109))        --ssm

 

3 日期格式化

--查找日期模式匹配
local nowTime = os.time()
print("当前时间戳 : "..nowTime)    --1581926026
--时间戳转换成日期    
print("格式化后的时间"..os.date("%Y%m%d%H%M%S",os.time()))        --格式化后的时间20200217155346

 

字符串的匹配模式

 

 

 

 

4 string.macth()

--函数返回匹配到的子串的一份copy。
local str = "Hello World !"
print(string.match(str,"He"))   --He
print(string.match(str,"Ha"))   --nil

 

5 string.find()

--string.find()
local str = "Hello World !"
print(string.find(str,"Hello"))     --1 5 ,区分大小写
print(string.find(str,"o"))         --3 3 ,第一个匹配到,就不会再去往后查找
print(string.find(str,"o",6)) --8 8 ,可以控制从哪个小标开始搜索

 

6 string.gmatch()

--string.gmatch(s,pattern)
--返回一个迭代器函数,每次调用这个函数都会以 pattern 对 s 做匹配.并返回所捕捉的值
str = "Hello Word Lua"
for s in string.gmatch(str,"%a+") do
    --print(s)
end

t = {}
s = "from=word, to = to=Lua"
for k, v in string.gmatch(s,"(%w+)=(%w+)") do
    t[k] = v
end

 

7 string.gsub()

--string.gsub()
print(string.gsub("Lua is cute" ,"cute","great"))   --Lua is great    1
print(string.gsub("Lua is cute cute" ,"cute","great"))  --Lua is great great    2
--用第三个参数代替第二个参数,并返回替换次数
print(string.gsub("all lla","l","x",3)) --axx xla    3

小结:

find( 'string' , 'strsub' , index )`   从起始位置(index)查找子串返回位置
  `match( 'string' , '%s%d.....' )`  匹配捕获,返回子串的copy
  `gmatch( 'string', '%s%d' )`  全局匹配捕获,返回一个函数提供所有子串
  `gsub( 'string' , 'go' , 'come' , count)`  替换字符串中所有go子串换count次
posted @ 2020-03-28 14:29  少林拖地僧  阅读(505)  评论(0)    收藏  举报
Live2D